gsdump: add missing gifreg naming, fix vsync type casting & formatting

This commit is contained in:
Gauvain 'GovanifY' Roussel-Tarbouriech 2021-03-06 18:03:50 +01:00 committed by Kojin
parent db2b487247
commit d86d9f66a9
3 changed files with 94 additions and 47 deletions

View File

@ -122,7 +122,7 @@ enum MenuIdentifiers
MenuId_GameSettingsSubMenu,
MenuId_EnablePatches,
MenuId_EnableCheats,
MenuId_GSDump,
MenuId_GSDump,
MenuId_EnableWideScreenPatches,
MenuId_EnableInputRecording,
MenuId_EnableLuaTools,

View File

@ -274,22 +274,21 @@ void Dialogs::GSDumpDialog::GenPacketList(std::vector<GSData>& dump)
wxTreeItemId rootId = m_gif_list->AppendItem(mainrootId, "0 - VSync");
for (auto& element : dump)
{
wxString s;
([&] { return element.id == Transfer; })() ? (s.Printf("%d - %s - %s - %d byte", i, GSTypeNames[element.id], GSTransferPathNames[element.path], element.length)) :
wxString s;
([&] { return element.id == Transfer; })() ? (s.Printf("%d - %s - %s - %d byte", i, GSTypeNames[element.id], GSTransferPathNames[element.path], element.length)) :
s.Printf("%d - %s - %d byte", i, GSTypeNames[element.id], element.length);
if (element.id == VSync)
{
m_gif_list->SetItemText(rootId, s);
rootId = m_gif_list->AppendItem(mainrootId, "VSync");
}
else
m_gif_list->AppendItem(rootId, s);
if (element.id == VSync)
{
m_gif_list->SetItemText(rootId, s);
rootId = m_gif_list->AppendItem(mainrootId, "VSync");
}
else
m_gif_list->AppendItem(rootId, s);
i++;
}
m_gif_list->Delete(rootId);
}
void Dialogs::GSDumpDialog::GenPacketInfo(GSData& dump)
{
m_gif_packet->DeleteAllItems();
@ -315,7 +314,7 @@ void Dialogs::GSDumpDialog::GenPacketInfo(GSData& dump)
wxString snloop, seop, sflg, spre, sprim, snreg, sreg;
std::vector<wxString> infos = {snloop, seop, sflg, spre, sprim, snreg, sreg};
m_stored_q = 1;
m_stored_q = 1.0;
infos[0].Printf("nloop = %u", nloop);
infos[1].Printf("eop = %u", eop);
@ -389,7 +388,7 @@ void Dialogs::GSDumpDialog::GenPacketInfo(GSData& dump)
case VSync:
{
wxString s;
s.Printf("Field = %d", (u32)(dump.data));
s.Printf("Field = %llu", (u64)(dump.data));
m_gif_packet->AppendItem(rootId, s);
break;
}
@ -455,13 +454,13 @@ void Dialogs::GSDumpDialog::ParseTreeReg(wxTreeItemId& id, GIFReg reg, u128 data
{
wxString s, t;
std::vector<wxString> st_infos = {s, t};
st_infos[0].Printf("S = %u", *(u32*)(&data.lo));
st_infos[1].Printf("T = %u", *(u32*)(&data.lo + 4));
st_infos[0].Printf("S = %f", *(float*)(&data.lo));
st_infos[1].Printf("T = %f", *(float*)(&data.lo + 4));
if (packed)
{
wxString q;
m_stored_q = *(u32*)(&data.hi + 4);
q.Printf("Q = %u", m_stored_q);
m_stored_q = *(float*)(&data.hi + 4);
q.Printf("Q = %f", m_stored_q);
st_infos.push_back(q);
}
for (auto& el : st_infos)
@ -471,12 +470,12 @@ void Dialogs::GSDumpDialog::ParseTreeReg(wxTreeItemId& id, GIFReg reg, u128 data
case UV:
{
wxString s, t;
u32 v;
s.Printf("U = %u", (u32)(data.lo & ((u64)(1 << 14) - 1)) / 16);
double v;
s.Printf("U = %f", (double)(data.lo & ((u64)(1 << 14) - 1)) / 16.0);
if (packed)
v = (u32)((data.lo >> 32) & ((u64)(1 << 14) - 1)) / 16;
v = (double)((data.lo >> 32) & ((u64)(1 << 14) - 1)) / 16.0;
else
v = (u32)((data.lo >> 16) & ((u64)(1 << 14) - 1)) / 16;
v = (double)((data.lo >> 16) & ((u64)(1 << 14) - 1)) / 16.0;
t.Printf("V = %u", v);
m_gif_packet->AppendItem(rootId, s);
m_gif_packet->AppendItem(rootId, t);
@ -492,15 +491,15 @@ void Dialogs::GSDumpDialog::ParseTreeReg(wxTreeItemId& id, GIFReg reg, u128 data
std::vector<wxString> xyzf_infos = {a, b, c, d};
if (packed)
{
xyzf_infos[0].Printf("X = %u", (u32)(data.lo & ((u64)(1 << 16) - 1)) / 16);
xyzf_infos[1].Printf("Y = %u", (u32)((data.lo >> 32) & ((u64)(1 << 16) - 1)) / 16);
xyzf_infos[0].Printf("X = %f", (float)(data.lo & ((u64)(1 << 16) - 1)) / 16.0);
xyzf_infos[1].Printf("Y = %f", (float)((data.lo >> 32) & ((u64)(1 << 16) - 1)) / 16.0);
xyzf_infos[2].Printf("Z = %u", (u32)((data.hi >> 4) & ((u64)(1 << 24) - 1)));
xyzf_infos[3].Printf("F = %u", (u32)((data.hi >> 36) & ((u64)(1 << 8) - 1)));
}
else
{
xyzf_infos[0].Printf("X = %u", (u32)(data.lo & ((u64)(1 << 16) - 1)) / 16);
xyzf_infos[1].Printf("Y = %u", (u32)((data.lo >> 16) & ((u64)(1 << 16) - 1)) / 16);
xyzf_infos[0].Printf("X = %f", (float)(data.lo & ((u64)(1 << 16) - 1)) / 16.0);
xyzf_infos[1].Printf("Y = %f", (float)((data.lo >> 16) & ((u64)(1 << 16) - 1)) / 16.0);
xyzf_infos[2].Printf("Z = %u", (u32)((data.lo >> 32) & ((u64)(1 << 24) - 1)));
xyzf_infos[3].Printf("F = %u", (u32)((data.lo >> 56) & ((u64)(1 << 8) - 1)));
}
@ -519,14 +518,14 @@ void Dialogs::GSDumpDialog::ParseTreeReg(wxTreeItemId& id, GIFReg reg, u128 data
std::vector<wxString> xyz_infos = {a, b, c};
if (packed)
{
xyz_infos[0].Printf("X = %u", (u32)(data.lo & ((u64)(1 << 16) - 1)) / 16);
xyz_infos[1].Printf("Y = %u", (u32)((data.lo >> 32) & ((u64)(1 << 16) - 1)) / 16);
xyz_infos[0].Printf("X = %f", (float)(data.lo & ((u64)(1 << 16) - 1)) / 16.0);
xyz_infos[1].Printf("Y = %f", (float)((data.lo >> 32) & ((u64)(1 << 16) - 1)) / 16.0);
xyz_infos[2].Printf("Z = %u", *(u32*)(&data.hi));
}
else
{
xyz_infos[0].Printf("X = %u", (u32)(data.lo & ((u64)(1 << 16) - 1)) / 16);
xyz_infos[1].Printf("Y = %u", (u32)((data.lo >> 16) & ((u64)(1 << 16) - 1)) / 16);
xyz_infos[0].Printf("X = %f", (float)(data.lo & ((u64)(1 << 16) - 1)) / 16.0);
xyz_infos[1].Printf("Y = %f", (float)((data.lo >> 16) & ((u64)(1 << 16) - 1)) / 16.0);
xyz_infos[2].Printf("Z = %u", *(u32*)(&data.lo)+4);
}
@ -542,14 +541,14 @@ void Dialogs::GSDumpDialog::ParseTreeReg(wxTreeItemId& id, GIFReg reg, u128 data
tex_infos[0].Printf("TBP0 = %u", (u32)(data.lo & ((u64)(1 << 14) - 1)));
tex_infos[1].Printf("TBW = %u", (u32)((data.lo >> 14) & ((u64)(1 << 6) - 1)));
tex_infos[2].Printf("PSM = %u", (u32)((data.lo >> 20) & ((u64)(1 << 6) - 1)));
tex_infos[2].Printf("PSM = %s", TEXPSMNames[(u32)((data.lo >> 20) & ((u64)(1 << 6) - 1))]);
tex_infos[3].Printf("TW = %u", (u32)((data.lo >> 26) & ((u64)(1 << 4) - 1)));
tex_infos[4].Printf("TH = %u", (u32)((data.lo >> 30) & ((u64)(1 << 4) - 1)));
tex_infos[5].Printf("TCC = %u", (u32)((data.lo >> 34) & ((u64)(1 << 1) - 1)));
tex_infos[6].Printf("TFX = %u", (u32)((data.lo >> 35) & ((u64)(1 << 2) - 1)));
tex_infos[5].Printf("TCC = %s", TEXTCCNames[(u32)((data.lo >> 34) & ((u64)(1 << 1) - 1))]);
tex_infos[6].Printf("TFX = %s", TEXTFXNames[(u32)((data.lo >> 35) & ((u64)(1 << 2) - 1))]);
tex_infos[7].Printf("CBP = %u", (u32)((data.lo >> 37) & ((u64)(1 << 14) - 1)));
tex_infos[8].Printf("CPSM = %u", (u32)((data.lo >> 51) & ((u64)(1 << 4) - 1)));
tex_infos[9].Printf("CSM = %u", (u32)((data.lo >> 55) & ((u64)(1 << 1) - 1)));
tex_infos[8].Printf("CPSM = %s", TEXCPSMNames[(u32)((data.lo >> 51) & ((u64)(1 << 4) - 1))]);
tex_infos[9].Printf("CSM = %s", TEXCSMNames[(u32)((data.lo >> 55) & ((u64)(1 << 1) - 1))]);
tex_infos[10].Printf("CSA = %u", (u32)((data.lo >> 56) & ((u64)(1 << 5) - 1)));
tex_infos[11].Printf("CLD = %u", (u32)((data.lo >> 61) & ((u64)(1 << 3) - 1)));
@ -569,10 +568,10 @@ void Dialogs::GSDumpDialog::ParseTreeReg(wxTreeItemId& id, GIFReg reg, u128 data
}
case AD:
{
wxString s;
GIFReg nreg = (GIFReg)(data.hi & ((u64)(1 << 8) - 1));
if ((GIFReg)nreg == AD)
{
wxString s;
s.Printf("NOP");
m_gif_packet->AppendItem(id, s);
}
@ -657,7 +656,7 @@ void Dialogs::GSDumpDialog::GSThread::ExecuteTaskInThread()
u32 crc = 0, ss = 0;
// XXX: check the numbers are correct
int renderer_override = m_root_window->m_renderer_overrides->GetSelection();
const int renderer_override = m_root_window->m_renderer_overrides->GetSelection();
char regs[8192];
dump_file.Read(&crc, 4);
@ -719,7 +718,7 @@ void Dialogs::GSDumpDialog::GSThread::ExecuteTaskInThread()
if (m_root_window->m_debug_mode->GetValue())
m_root_window->GenPacketList(m_root_window->m_dump_packets);
//return;
return;
GetCorePlugins().Init();
GSsetBaseMem((void*)regs);
if (GSopen2((void*)pDsp, renderer_override) != 0)

View File

@ -187,7 +187,7 @@ namespace Dialogs
ReadFIFO2 = 2,
Registers = 3
};
static constexpr const char* GSTypeNames[] = {
static constexpr const char* GSTypeNames[256] = {
"Transfer",
"VSync",
"ReadFIFO2",
@ -214,7 +214,7 @@ namespace Dialogs
RunCursor,
RunVSync
};
static constexpr const char* GSTransferPathNames[] = {
static constexpr const char* GSTransferPathNames[256] = {
"Path1Old",
"Path2",
"Path3",
@ -228,13 +228,13 @@ namespace Dialogs
GIF_FLG_IMAGE = 2,
GIF_FLG_IMAGE2 = 3
};
static constexpr const char* GifFlagNames[] = {
static constexpr const char* GifFlagNames[256] = {
"GIF_FLG_PACKED",
"GIF_FLG_REGLIST",
"GIF_FLG_IMAGE",
"GIF_FLG_IMAGE2"
};
static constexpr const char* GsPrimNames[] = {
static constexpr const char* GsPrimNames[256] = {
"GS_POINTLIST",
"GS_LINELIST",
"GS_LINESTRIP",
@ -244,22 +244,70 @@ namespace Dialogs
"GS_SPRITE",
"GS_INVALID"
};
static constexpr const char* GsIIPNames[] = {
static constexpr const char* GsIIPNames[256] = {
"FlatShading",
"Gouraud"
};
static constexpr const char* GsFSTNames[] = {
static constexpr const char* GsFSTNames[256] = {
"STQValue",
"UVValue"
};
static constexpr const char* GsCTXTNames[] = {
static constexpr const char* GsCTXTNames[256] = {
"Context1",
"Context2"
};
static constexpr const char* GsFIXNames[] = {
static constexpr const char* GsFIXNames[256] = {
"Unfixed",
"Fixed"
};
static constexpr const char* TEXTCCNames[256] = {
"RGB",
"RGBA"
};
static constexpr const char* TEXTFXNames[256] = {
"MODULATE",
"DECAL",
"HIGHLIGHT",
"HIGHLIGHT2"
};
static constexpr const char* TEXCSMNames[256] = {
"CSM1",
"CSM2"
};
// a GNU extension exists to initialize array at given indices which would be
// exactly what we need here but, obviously, MSVC is at it again to make our
// life harder than sandpaper on your skin, so we make do
// clang-format off
static constexpr const char* TEXCPSMNames[256] = {
"PSMCT32",
"",
"PSMCT16",
"","","","","","","",
"PSMCT16S"
};
static constexpr const char* TEXPSMNames[256] = {
"PSMCT32",
"PSMCT24",
"PSMCT16",
"","","","","","","",
"PSMCT16S",
"","","","","","","","",
"PSMT8",
"PSMT4",
"","","","","","",
"PSMT8H",
"","","","","","","","",
"PSMT4HL",
"","","","","","","",
"PSMT4HH",
"","","",
"PSMZ32",
"PSMZ24",
"PSMZ16",
"","","","","","","",
"PSMZ16S"
};
// clang-format on
// the actual type is defined above thanks to preprocessing magic
enum GSDUMP_GIFREG_NAME : GSDUMP_GIFREG_TYPE
@ -287,7 +335,7 @@ namespace Dialogs
};
std::vector<GSEvent> m_button_events;
std::vector<GSData> m_dump_packets;
u32 m_stored_q = 1;
float m_stored_q = 1.0;
void ProcessDumpEvent(GSData event, char* regs);
void GenPacketList(std::vector<GSData>& dump);
void GenPacketInfo(GSData& dump);