From ae242e5675b71c6c7019b31bde0abd61ba8be875 Mon Sep 17 00:00:00 2001 From: nitsuja Date: Sun, 1 Jan 2012 13:52:31 -0800 Subject: [PATCH] added some missing VideoBackendHardware data to savestates. I think this makes savestates more stable (fewer "GFX FIFO: Unknown Opcode" errors) in dual core mode. also added some extra verification markers around here, to potentially give better info on future version mismatches --- Source/Core/VideoCommon/Src/MainBase.cpp | 8 ++++++++ Source/Core/VideoCommon/Src/VideoState.cpp | 19 ++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/Source/Core/VideoCommon/Src/MainBase.cpp b/Source/Core/VideoCommon/Src/MainBase.cpp index 4df2361ea9..df29fef606 100644 --- a/Source/Core/VideoCommon/Src/MainBase.cpp +++ b/Source/Core/VideoCommon/Src/MainBase.cpp @@ -186,6 +186,14 @@ void VideoBackendHardware::InitializeShared() void VideoBackendHardware::DoState(PointerWrap& p) { VideoCommon_DoState(p); + p.DoMarker("VideoCommon"); + + p.Do(s_swapRequested); + p.Do(s_efbAccessRequested); + p.Do(s_beginFieldArgs); + p.Do(s_accessEFBArgs); + p.Do(s_AccessEFBResult); + p.DoMarker("VideoBackendHardware"); // Refresh state. if (p.GetMode() == PointerWrap::MODE_READ) diff --git a/Source/Core/VideoCommon/Src/VideoState.cpp b/Source/Core/VideoCommon/Src/VideoState.cpp index 5a677a2460..8b1045b71f 100644 --- a/Source/Core/VideoCommon/Src/VideoState.cpp +++ b/Source/Core/VideoCommon/Src/VideoState.cpp @@ -31,29 +31,42 @@ static void DoState(PointerWrap &p) { // BP Memory p.Do(bpmem); - // CP Memory + p.DoMarker("BP Memory"); + + // CP Memory p.DoArray(arraybases, 16); p.DoArray(arraystrides, 16); p.Do(MatrixIndexA); p.Do(MatrixIndexB); p.Do(g_VtxDesc.Hex); p.DoArray(g_VtxAttr, 8); + p.DoMarker("CP Memory"); // XF Memory p.Do(xfregs); p.DoArray(xfmem, XFMEM_SIZE); - // Texture decoder + p.DoMarker("XF Memory"); + + // Texture decoder p.DoArray(texMem, TMEM_SIZE); + p.DoMarker("texMem"); // FIFO Fifo_DoState(p); + p.DoMarker("Fifo"); CommandProcessor::DoState(p); - PixelEngine::DoState(p); + p.DoMarker("CommandProcessor"); + + PixelEngine::DoState(p); + p.DoMarker("PixelEngine"); // the old way of replaying current bpmem as writes to push side effects to pixel shader manager doesn't really work. PixelShaderManager::DoState(p); + p.DoMarker("PixelShaderManager"); + VertexShaderManager::DoState(p); + p.DoMarker("VertexShaderManager"); // TODO: search for more data that should be saved and add it here }