Skip to content

Commit

Permalink
Simplify saving CP state
Browse files Browse the repository at this point in the history
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 d039b1b, we can just use p.Do on it instead of manually saving each field.
  • Loading branch information
Pokechu22 committed Oct 7, 2022
1 parent 97d7ef3 commit 178ecaf
Show file tree
Hide file tree
Showing 5 changed files with 9 additions and 25 deletions.
18 changes: 0 additions & 18 deletions Source/Core/VideoCommon/CPMemory.cpp
Expand Up @@ -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));
Expand Down
2 changes: 0 additions & 2 deletions Source/Core/VideoCommon/CPMemory.h
Expand Up @@ -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);
1 change: 1 addition & 0 deletions Source/Core/VideoCommon/VertexLoaderManager.cpp
Expand Up @@ -123,6 +123,7 @@ struct entry

void MarkAllDirty()
{
g_bases_dirty = false;
g_main_vat_dirty = BitSet8::AllTrue(8);
g_preprocess_vat_dirty = BitSet8::AllTrue(8);
}
Expand Down
4 changes: 0 additions & 4 deletions Source/Core/VideoCommon/VertexManagerBase.cpp
Expand Up @@ -555,10 +555,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);
Expand Down
9 changes: 8 additions & 1 deletion Source/Core/VideoCommon/VideoState.cpp
Expand Up @@ -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"
Expand All @@ -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);
Expand Down Expand Up @@ -90,5 +96,6 @@ void VideoCommon_DoState(PointerWrap& p)
{
// Inform backend of new state from registers.
BPReload();
VertexLoaderManager::MarkAllDirty();
}
}

0 comments on commit 178ecaf

Please sign in to comment.