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:
parent
05f3bbfa4d
commit
ffed23c059
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue