mirror of https://github.com/PCSX2/pcsx2.git
gsdump: debug mode messages implemented
This commit is contained in:
parent
7c0fc3b777
commit
ca33ccc60e
|
@ -52,6 +52,8 @@ Dialogs::GSDumpDialog::GSDumpDialog(wxWindow* parent)
|
||||||
, m_dump_list(new wxListView(this, ID_DUMP_LIST, wxDefaultPosition, wxSize(250, 200)))
|
, m_dump_list(new wxListView(this, ID_DUMP_LIST, wxDefaultPosition, wxSize(250, 200)))
|
||||||
, m_preview_image(new wxStaticBitmap(this, wxID_ANY, wxBitmap(EmbeddedImage<res_NoIcon>().Get())))
|
, m_preview_image(new wxStaticBitmap(this, wxID_ANY, wxBitmap(EmbeddedImage<res_NoIcon>().Get())))
|
||||||
, m_selected_dump(new wxString(""))
|
, m_selected_dump(new wxString(""))
|
||||||
|
, m_debug_mode(new wxCheckBox(this, wxID_ANY, _("Debug Mode")))
|
||||||
|
, m_renderer_overrides(new wxRadioBox())
|
||||||
{
|
{
|
||||||
const float scale = MSW_GetDPIScale();
|
const float scale = MSW_GetDPIScale();
|
||||||
SetMinWidth(scale * 460);
|
SetMinWidth(scale * 460);
|
||||||
|
@ -66,10 +68,13 @@ Dialogs::GSDumpDialog::GSDumpDialog(wxWindow* parent)
|
||||||
wxBoxSizer& gif(*new wxBoxSizer(wxVERTICAL));
|
wxBoxSizer& gif(*new wxBoxSizer(wxVERTICAL));
|
||||||
wxBoxSizer& dumps_list(*new wxBoxSizer(wxVERTICAL));
|
wxBoxSizer& dumps_list(*new wxBoxSizer(wxVERTICAL));
|
||||||
|
|
||||||
dump_info += new wxRadioButton(this, wxID_ANY, _("None"));
|
wxArrayString rdoverrides;
|
||||||
dump_info += new wxRadioButton(this, wxID_ANY, _("D3D11 HW"));
|
rdoverrides.Add("None");
|
||||||
dump_info += new wxRadioButton(this, wxID_ANY, _("OGL HW"));
|
rdoverrides.Add("D3D11 HW");
|
||||||
dump_info += new wxRadioButton(this, wxID_ANY, _("OGL SW"));
|
rdoverrides.Add("OGL HW");
|
||||||
|
rdoverrides.Add("OGL SW");
|
||||||
|
m_renderer_overrides->Create(this, wxID_ANY, "Renderer overrides", wxDefaultPosition, wxSize(300, 120), rdoverrides, 2);
|
||||||
|
dump_info += m_renderer_overrides;
|
||||||
dump_info += new wxButton(this, ID_RUN_DUMP, _("Run"));
|
dump_info += new wxButton(this, ID_RUN_DUMP, _("Run"));
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,7 +82,7 @@ Dialogs::GSDumpDialog::GSDumpDialog(wxWindow* parent)
|
||||||
// debugger
|
// debugger
|
||||||
dbg_tree += new wxStaticText(this, wxID_ANY, _("GIF Packets"));
|
dbg_tree += new wxStaticText(this, wxID_ANY, _("GIF Packets"));
|
||||||
dbg_tree += new wxTreeCtrl(this, wxID_ANY, wxDefaultPosition, wxSize(250, 200));
|
dbg_tree += new wxTreeCtrl(this, wxID_ANY, wxDefaultPosition, wxSize(250, 200));
|
||||||
dbg_actions += new wxCheckBox(this, wxID_ANY, _("Debug Mode"));
|
dbg_actions += m_debug_mode;
|
||||||
dbg_actions += new wxButton(this, wxID_ANY, _("Go to Start"));
|
dbg_actions += new wxButton(this, wxID_ANY, _("Go to Start"));
|
||||||
dbg_actions += new wxButton(this, wxID_ANY, _("Step"));
|
dbg_actions += new wxButton(this, wxID_ANY, _("Step"));
|
||||||
dbg_actions += new wxButton(this, wxID_ANY, _("Run to Selection"));
|
dbg_actions += new wxButton(this, wxID_ANY, _("Run to Selection"));
|
||||||
|
@ -160,8 +165,8 @@ void Dialogs::GSDumpDialog::RunDump(wxCommandEvent& event)
|
||||||
|
|
||||||
char freeze_data[sizeof(int) * 2];
|
char freeze_data[sizeof(int) * 2];
|
||||||
u32 crc = 0, ss = 0;
|
u32 crc = 0, ss = 0;
|
||||||
// TODO: get that from the GUI
|
// XXX: check the numbers are correct
|
||||||
int renderer_override = 0;
|
int renderer_override = m_renderer_overrides->GetSelection();
|
||||||
char regs[8192];
|
char regs[8192];
|
||||||
|
|
||||||
dump_file.Read(&crc, 4);
|
dump_file.Read(&crc, 4);
|
||||||
|
@ -240,16 +245,57 @@ void Dialogs::GSDumpDialog::RunDump(wxCommandEvent& event)
|
||||||
GSfreeze(0, &fd);
|
GSfreeze(0, &fd);
|
||||||
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
|
int RunTo = 0;
|
||||||
|
size_t debug_idx = 0;
|
||||||
|
|
||||||
while (0!=1)
|
while (0!=1)
|
||||||
{
|
{
|
||||||
/* First listen to keys:
|
|
||||||
case 0x1B: Running = false; break; // VK_ESCAPE;
|
|
||||||
case 0x77: GSmakeSnapshot(""); break; // VK_F8;
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* if DebugMode handle buttons, else:*/
|
if (m_debug_mode->GetValue())
|
||||||
|
{
|
||||||
|
if (m_button_events.size() > 0)
|
||||||
|
{
|
||||||
|
switch (m_button_events[0].index)
|
||||||
|
{
|
||||||
|
case Step:
|
||||||
|
if (debug_idx >= dump.size())
|
||||||
|
debug_idx = 0;
|
||||||
|
RunTo = debug_idx;
|
||||||
|
break;
|
||||||
|
case RunCursor:
|
||||||
|
RunTo = m_button_events[0].index;
|
||||||
|
if (debug_idx > RunTo)
|
||||||
|
debug_idx = 0;
|
||||||
|
break;
|
||||||
|
case RunVSync:
|
||||||
|
if (debug_idx >= dump.size())
|
||||||
|
debug_idx = 1;
|
||||||
|
auto it = std::find_if(dump.begin() + debug_idx, dump.end(), [](const GSData& gs) { return gs.id == Registers; });
|
||||||
|
if (it != std::end(dump))
|
||||||
|
RunTo = std::distance(dump.begin(), it);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
m_button_events.erase(m_button_events.begin());
|
||||||
|
|
||||||
|
if (debug_idx <= RunTo)
|
||||||
|
{
|
||||||
|
while (debug_idx <= RunTo)
|
||||||
|
{
|
||||||
|
ProcessDumpEvent(dump[debug_idx++], regs);
|
||||||
|
}
|
||||||
|
auto it = std::find_if(dump.begin() + debug_idx, dump.end(), [](const GSData& gs) { return gs.id == Registers; });
|
||||||
|
if (it != std::end(dump))
|
||||||
|
ProcessDumpEvent(*it, regs);
|
||||||
|
|
||||||
|
debug_idx--;
|
||||||
|
}
|
||||||
|
|
||||||
|
// do vsync
|
||||||
|
ProcessDumpEvent(GSData{VSync, 0, 0, Dummy}, regs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
while (i < dump.size())
|
while (i < dump.size())
|
||||||
{
|
{
|
||||||
ProcessDumpEvent(dump[i++], regs);
|
ProcessDumpEvent(dump[i++], regs);
|
||||||
|
@ -260,6 +306,7 @@ void Dialogs::GSDumpDialog::RunDump(wxCommandEvent& event)
|
||||||
if (i >= dump.size())
|
if (i >= dump.size())
|
||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GSclose();
|
GSclose();
|
||||||
GSshutdown();
|
GSshutdown();
|
||||||
|
|
|
@ -87,6 +87,8 @@ namespace Dialogs
|
||||||
wxListView* m_dump_list;
|
wxListView* m_dump_list;
|
||||||
wxStaticBitmap* m_preview_image;
|
wxStaticBitmap* m_preview_image;
|
||||||
wxString* m_selected_dump;
|
wxString* m_selected_dump;
|
||||||
|
wxCheckBox* m_debug_mode;
|
||||||
|
wxRadioBox* m_renderer_overrides;
|
||||||
void GetDumpsList();
|
void GetDumpsList();
|
||||||
void SelectedDump(wxListEvent& evt);
|
void SelectedDump(wxListEvent& evt);
|
||||||
void RunDump(wxCommandEvent& event);
|
void RunDump(wxCommandEvent& event);
|
||||||
|
@ -117,6 +119,18 @@ namespace Dialogs
|
||||||
int length;
|
int length;
|
||||||
GSTransferPath path;
|
GSTransferPath path;
|
||||||
};
|
};
|
||||||
|
enum ButtonState
|
||||||
|
{
|
||||||
|
Step,
|
||||||
|
RunCursor,
|
||||||
|
RunVSync
|
||||||
|
};
|
||||||
|
struct GSEvent
|
||||||
|
{
|
||||||
|
ButtonState btn;
|
||||||
|
int index;
|
||||||
|
};
|
||||||
|
std::vector<GSEvent> m_button_events;
|
||||||
void ProcessDumpEvent(GSData event, char* regs);
|
void ProcessDumpEvent(GSData event, char* regs);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue