Simplify saving CP state

Rather than makring some parts of VertexLoaderManager dirty in some places and some in others, do it all in VideoState. Also, since CPState no longer contains pointers/non-CP data after d039b1bc0d, we can just use p.Do on it instead of manually saving each field.
This commit is contained in:
Pokechu22 2022-10-07 12:25:04 -07:00
parent 05f3bbfa4d
commit ffed23c059
5 changed files with 9 additions and 25 deletions

View File

@ -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));

View File

@ -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<std::string, std::string> GetCPRegInfo(u8 cmd, u32 value);

View File

@ -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);
}

View File

@ -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);

View File

@ -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();
}
}