// Run from the CPU thread void VideoBackendHardware::DoState(PointerWrap& p) { bool software = false; p.Do(software); if (p.GetMode() == PointerWrap::MODE_READ && software == true) { // change mode to abort load of incompatible save state. p.SetMode(PointerWrap::MODE_VERIFY); } 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) { m_invalid = true; RecomputeCachedArraybases(); // 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(); } }
void Init() { MarkAllDirty(); for (auto& map_entry : g_main_cp_state.vertex_loaders) map_entry = nullptr; for (auto& map_entry : g_preprocess_cp_state.vertex_loaders) map_entry = nullptr; RecomputeCachedArraybases(); }