diff --git a/Source/Core/VideoCommon/CPMemory.cpp b/Source/Core/VideoCommon/CPMemory.cpp index 401c37bc00..c9a5a57b51 100644 --- a/Source/Core/VideoCommon/CPMemory.cpp +++ b/Source/Core/VideoCommon/CPMemory.cpp @@ -15,24 +15,6 @@ CPState g_main_cp_state; CPState g_preprocess_cp_state; -void DoCPState(PointerWrap& p) -{ - // We don't save g_preprocess_cp_state separately because the GPU should be - // synced around state save/load. - p.DoArray(g_main_cp_state.array_bases); - p.DoArray(g_main_cp_state.array_strides); - p.Do(g_main_cp_state.matrix_index_a); - p.Do(g_main_cp_state.matrix_index_b); - p.Do(g_main_cp_state.vtx_desc); - p.DoArray(g_main_cp_state.vtx_attr); - p.DoMarker("CP Memory"); - if (p.IsReadMode()) - { - CopyPreprocessCPStateFromMain(); - VertexLoaderManager::g_bases_dirty = true; - } -} - void CopyPreprocessCPStateFromMain() { std::memcpy(&g_preprocess_cp_state, &g_main_cp_state, sizeof(CPState)); diff --git a/Source/Core/VideoCommon/CPMemory.h b/Source/Core/VideoCommon/CPMemory.h index 7ce56c05cd..098cf1f288 100644 --- a/Source/Core/VideoCommon/CPMemory.h +++ b/Source/Core/VideoCommon/CPMemory.h @@ -658,8 +658,6 @@ class PointerWrap; extern CPState g_main_cp_state; extern CPState g_preprocess_cp_state; -void DoCPState(PointerWrap& p); - void CopyPreprocessCPStateFromMain(); std::pair GetCPRegInfo(u8 cmd, u32 value); diff --git a/Source/Core/VideoCommon/VertexLoaderManager.cpp b/Source/Core/VideoCommon/VertexLoaderManager.cpp index bb843a6120..08dbe8a4d5 100644 --- a/Source/Core/VideoCommon/VertexLoaderManager.cpp +++ b/Source/Core/VideoCommon/VertexLoaderManager.cpp @@ -123,6 +123,7 @@ struct entry void MarkAllDirty() { + g_bases_dirty = true; g_main_vat_dirty = BitSet8::AllTrue(8); g_preprocess_vat_dirty = BitSet8::AllTrue(8); } diff --git a/Source/Core/VideoCommon/VertexManagerBase.cpp b/Source/Core/VideoCommon/VertexManagerBase.cpp index c208f81097..41b3968b2b 100644 --- a/Source/Core/VideoCommon/VertexManagerBase.cpp +++ b/Source/Core/VideoCommon/VertexManagerBase.cpp @@ -557,10 +557,6 @@ void VertexManagerBase::DoState(PointerWrap& p) { // Flush old vertex data before loading state. Flush(); - - // Clear all caches that touch RAM - // (? these don't appear to touch any emulation state that gets saved. moved to on load only.) - VertexLoaderManager::MarkAllDirty(); } p.Do(m_zslope); diff --git a/Source/Core/VideoCommon/VideoState.cpp b/Source/Core/VideoCommon/VideoState.cpp index 538c3d0904..b56c931b48 100644 --- a/Source/Core/VideoCommon/VideoState.cpp +++ b/Source/Core/VideoCommon/VideoState.cpp @@ -18,6 +18,7 @@ #include "VideoCommon/TMEM.h" #include "VideoCommon/TextureCacheBase.h" #include "VideoCommon/TextureDecoder.h" +#include "VideoCommon/VertexLoaderManager.h" #include "VideoCommon/VertexManagerBase.h" #include "VideoCommon/VertexShaderManager.h" #include "VideoCommon/XFMemory.h" @@ -38,7 +39,12 @@ void VideoCommon_DoState(PointerWrap& p) p.DoMarker("BP Memory"); // CP Memory - DoCPState(p); + // We don't save g_preprocess_cp_state separately because the GPU should be + // synced around state save/load. + p.Do(g_main_cp_state); + p.DoMarker("CP Memory"); + if (p.IsReadMode()) + CopyPreprocessCPStateFromMain(); // XF Memory p.Do(xfmem); @@ -90,5 +96,6 @@ void VideoCommon_DoState(PointerWrap& p) { // Inform backend of new state from registers. BPReload(); + VertexLoaderManager::MarkAllDirty(); } }