mirror of https://github.com/PCSX2/pcsx2.git
gsdump: new freeze definition, the dump now gets correctly loaded in memory
This commit is contained in:
parent
6840041ee6
commit
dae36f59d2
|
@ -167,7 +167,6 @@ typedef void(CALLBACK *_GSosdMonitor)(const char *key, const char *value, u32 co
|
||||||
typedef s32(CALLBACK *_GSopen)(void *pDsp, const char *Title, int multithread);
|
typedef s32(CALLBACK *_GSopen)(void *pDsp, const char *Title, int multithread);
|
||||||
typedef s32(CALLBACK *_GSopen2)(void *pDsp, u32 flags);
|
typedef s32(CALLBACK *_GSopen2)(void *pDsp, u32 flags);
|
||||||
typedef void(CALLBACK *_GSvsync)(int field);
|
typedef void(CALLBACK *_GSvsync)(int field);
|
||||||
typedef s32(CALLBACK* _GSfreeze)(int mode, freezeData* data);
|
|
||||||
typedef void(CALLBACK *_GSgifTransfer)(const u32 *pMem, u32 size);
|
typedef void(CALLBACK *_GSgifTransfer)(const u32 *pMem, u32 size);
|
||||||
typedef void(CALLBACK *_GSgifTransfer1)(u32 *pMem, u32 addr);
|
typedef void(CALLBACK *_GSgifTransfer1)(u32 *pMem, u32 addr);
|
||||||
typedef void(CALLBACK *_GSgifTransfer2)(u32 *pMem, u32 size);
|
typedef void(CALLBACK *_GSgifTransfer2)(u32 *pMem, u32 size);
|
||||||
|
@ -203,7 +202,6 @@ extern _GSosdLog GSosdLog;
|
||||||
extern _GSosdMonitor GSosdMonitor;
|
extern _GSosdMonitor GSosdMonitor;
|
||||||
extern _GSopen GSopen;
|
extern _GSopen GSopen;
|
||||||
extern _GSopen2 GSopen2;
|
extern _GSopen2 GSopen2;
|
||||||
extern _GSfreeze GSfreeze;
|
|
||||||
extern _GSvsync GSvsync;
|
extern _GSvsync GSvsync;
|
||||||
extern _GSgifTransfer GSgifTransfer;
|
extern _GSgifTransfer GSgifTransfer;
|
||||||
extern _GSgifTransfer1 GSgifTransfer1;
|
extern _GSgifTransfer1 GSgifTransfer1;
|
||||||
|
|
|
@ -157,7 +157,6 @@ _GSosdLog GSosdLog;
|
||||||
_GSosdMonitor GSosdMonitor;
|
_GSosdMonitor GSosdMonitor;
|
||||||
_GSopen GSopen;
|
_GSopen GSopen;
|
||||||
_GSopen2 GSopen2;
|
_GSopen2 GSopen2;
|
||||||
_GSfreeze GSfreeze;
|
|
||||||
_GSgifTransfer GSgifTransfer;
|
_GSgifTransfer GSgifTransfer;
|
||||||
_GSgifTransfer1 GSgifTransfer1;
|
_GSgifTransfer1 GSgifTransfer1;
|
||||||
_GSgifTransfer2 GSgifTransfer2;
|
_GSgifTransfer2 GSgifTransfer2;
|
||||||
|
@ -1042,9 +1041,9 @@ bool SysCorePlugins::Shutdown()
|
||||||
|
|
||||||
// For internal use only, unless you're the MTGS. Then it's for you too!
|
// For internal use only, unless you're the MTGS. Then it's for you too!
|
||||||
// Returns false if the plugin returned an error.
|
// Returns false if the plugin returned an error.
|
||||||
bool SysCorePlugins::DoFreeze( PluginsEnum_t pid, int mode, freezeData* data )
|
bool SysCorePlugins::DoFreeze( PluginsEnum_t pid, int mode, freezeData* data, bool bypass_tsafety )
|
||||||
{
|
{
|
||||||
if( (pid == PluginId_GS) && !GetMTGS().IsSelf() )
|
if( (pid == PluginId_GS) && !GetMTGS().IsSelf() && !bypass_tsafety )
|
||||||
{
|
{
|
||||||
// GS needs some thread safety love...
|
// GS needs some thread safety love...
|
||||||
|
|
||||||
|
|
|
@ -379,7 +379,7 @@ public:
|
||||||
virtual void FreezeOut( PluginsEnum_t pid, pxOutputStream& outfp );
|
virtual void FreezeOut( PluginsEnum_t pid, pxOutputStream& outfp );
|
||||||
virtual void FreezeIn( PluginsEnum_t pid, pxInputStream& infp );
|
virtual void FreezeIn( PluginsEnum_t pid, pxInputStream& infp );
|
||||||
virtual void Freeze( PluginsEnum_t pid, SaveStateBase& state );
|
virtual void Freeze( PluginsEnum_t pid, SaveStateBase& state );
|
||||||
virtual bool DoFreeze( PluginsEnum_t pid, int mode, freezeData* data );
|
virtual bool DoFreeze( PluginsEnum_t pid, int mode, freezeData* data, bool bypass_tsafety=false );
|
||||||
|
|
||||||
virtual bool KeyEvent( const keyEvent& evt );
|
virtual bool KeyEvent( const keyEvent& evt );
|
||||||
virtual void Configure( PluginsEnum_t pid );
|
virtual void Configure( PluginsEnum_t pid );
|
||||||
|
|
|
@ -666,7 +666,7 @@ void Dialogs::GSDumpDialog::GSThread::ExecuteTaskInThread()
|
||||||
dump_file.Read(®s, 8192);
|
dump_file.Read(®s, 8192);
|
||||||
|
|
||||||
int ssi = ss;
|
int ssi = ss;
|
||||||
freezeData fd = {0, (s8*)state_data};
|
freezeData fd = {ss, (s8*)state_data};
|
||||||
m_root_window->m_dump_packets.clear();
|
m_root_window->m_dump_packets.clear();
|
||||||
|
|
||||||
while (dump_file.Tell() < dump_file.Length())
|
while (dump_file.Tell() < dump_file.Length())
|
||||||
|
@ -727,15 +727,12 @@ void Dialogs::GSDumpDialog::GSThread::ExecuteTaskInThread()
|
||||||
|
|
||||||
GSsetGameCRC((int)crc, 0);
|
GSsetGameCRC((int)crc, 0);
|
||||||
|
|
||||||
//OnStop();
|
if (!GetCorePlugins().DoFreeze(PluginId_GS, 0, &fd, true))
|
||||||
return;
|
|
||||||
|
|
||||||
if (GSfreeze(0, &fd) == -1)
|
|
||||||
m_running = false;
|
m_running = false;
|
||||||
GSvsync(1);
|
GSvsync(1);
|
||||||
GSreset();
|
GSreset();
|
||||||
GSsetBaseMem((void*)regs);
|
GSsetBaseMem((void*)regs);
|
||||||
GSfreeze(0, &fd);
|
GetCorePlugins().DoFreeze(PluginId_GS, 0, &fd, true);
|
||||||
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
int RunTo = 0;
|
int RunTo = 0;
|
||||||
|
@ -788,7 +785,7 @@ void Dialogs::GSDumpDialog::GSThread::ExecuteTaskInThread()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while (i < m_root_window->m_dump_packets.size())
|
while (i < (m_root_window->m_dump_packets.size()-1))
|
||||||
{
|
{
|
||||||
m_root_window->ProcessDumpEvent(m_root_window->m_dump_packets[i++], regs);
|
m_root_window->ProcessDumpEvent(m_root_window->m_dump_packets[i++], regs);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue