summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/Src/MainBase.cpp
diff options
context:
space:
mode:
authorMatthew Parlane <parlane@gmail.com>2013-01-01 23:28:46 +1300
committerMatthew Parlane <parlane@gmail.com>2013-01-01 23:28:46 +1300
commite0c9a1fd09b9be953bf0ae41b9014485e750b07e (patch)
tree059744e17a2a35ca58dd9b817cab620faee38611 /Source/Core/VideoCommon/Src/MainBase.cpp
parentfe1fdc5e7b957312c906324134e42ca3484fa2d5 (diff)
parentc728ef2cd30ef803210d5db0a1ecab6b198a2c65 (diff)
Merge branch 'master' into wii-network
Conflicts: Source/Core/Common/Src/CommonPaths.h Source/Core/Core/CMakeLists.txt Source/Core/Core/Src/Boot/Boot_BS2Emu.cpp Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_es.cpp Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp
Diffstat (limited to 'Source/Core/VideoCommon/Src/MainBase.cpp')
-rw-r--r--Source/Core/VideoCommon/Src/MainBase.cpp69
1 files changed, 32 insertions, 37 deletions
diff --git a/Source/Core/VideoCommon/Src/MainBase.cpp b/Source/Core/VideoCommon/Src/MainBase.cpp
index 0b1258a662..726ef71b38 100644
--- a/Source/Core/VideoCommon/Src/MainBase.cpp
+++ b/Source/Core/VideoCommon/Src/MainBase.cpp
@@ -169,8 +169,7 @@ u32 VideoBackendHardware::Video_AccessEFB(EFBAccessType type, u32 x, u32 y, u32
return 0;
}
-static volatile u32 s_doStateRequested = false;
-
+
void VideoBackendHardware::InitializeShared()
{
VideoCommon_Init();
@@ -181,54 +180,50 @@ void VideoBackendHardware::InitializeShared()
memset((void*)&s_beginFieldArgs, 0, sizeof(s_beginFieldArgs));
memset(&s_accessEFBArgs, 0, sizeof(s_accessEFBArgs));
s_AccessEFBResult = 0;
+ m_invalid = false;
}
-static volatile struct
-{
- unsigned char **ptr;
- int mode;
-} s_doStateArgs;
-
-// Depending on the threading mode (DC/SC) this can be called
-// from either the GPU thread or the CPU thread
-void VideoFifo_CheckStateRequest()
+// Run from the CPU thread
+void VideoBackendHardware::DoState(PointerWrap& p)
{
- if (Common::AtomicLoadAcquire(s_doStateRequested))
+ 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
- TextureCache::Invalidate(false);
+ // (? these don't appear to touch any emulation state that gets saved. moved to on load only.)
VertexLoaderManager::MarkAllDirty();
-
- PointerWrap p(s_doStateArgs.ptr, s_doStateArgs.mode);
- VideoCommon_DoState(p);
-
- // Refresh state.
- if (s_doStateArgs.mode == PointerWrap::MODE_READ)
- {
- BPReload();
- RecomputeCachedArraybases();
- }
-
- Common::AtomicStoreRelease(s_doStateRequested, false);
}
}
-// Run from the CPU thread
-void VideoBackendHardware::DoState(PointerWrap& p)
-{
- s_doStateArgs.ptr = p.ptr;
- s_doStateArgs.mode = p.mode;
- Common::AtomicStoreRelease(s_doStateRequested, true);
- if (SConfig::GetInstance().m_LocalCoreStartupParameter.bCPUThread)
+void VideoBackendHardware::CheckInvalidState() {
+ if (m_invalid)
{
- while (Common::AtomicLoadAcquire(s_doStateRequested) && !s_FifoShuttingDown)
- //Common::SleepCurrentThread(1);
- Common::YieldCPU();
+ m_invalid = false;
+
+ BPReload();
+ TextureCache::Invalidate();
}
- else
- VideoFifo_CheckStateRequest();
}
+void VideoBackendHardware::PauseAndLock(bool doLock, bool unpauseOnUnlock)
+{
+ Fifo_PauseAndLock(doLock, unpauseOnUnlock);
+}
+
+
void VideoBackendHardware::RunLoop(bool enable)
{
VideoCommon_RunLoop(enable);