summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/MainBase.cpp
diff options
context:
space:
mode:
authordegasus <wickmarkus@web.de>2015-01-31 11:38:23 +0100
committerdegasus <wickmarkus@web.de>2015-02-22 08:41:15 +0100
commitbc248f8941ae5f24e651d5bf029740bc96c3df89 (patch)
treec2b209edda05a9f11f32dbfbb8549e0bffcd9616 /Source/Core/VideoCommon/MainBase.cpp
parent860c889454635c0f4f7cf601f8ec77c7b81c19cd (diff)
VideoCommon: use a new async event system for efb access
Diffstat (limited to 'Source/Core/VideoCommon/MainBase.cpp')
-rw-r--r--Source/Core/VideoCommon/MainBase.cpp77
1 files changed, 25 insertions, 52 deletions
diff --git a/Source/Core/VideoCommon/MainBase.cpp b/Source/Core/VideoCommon/MainBase.cpp
index b5c6cdebf9..47eab7d941 100644
--- a/Source/Core/VideoCommon/MainBase.cpp
+++ b/Source/Core/VideoCommon/MainBase.cpp
@@ -1,6 +1,7 @@
#include "Common/Event.h"
#include "Core/ConfigManager.h"
+#include "VideoCommon/AsyncRequests.h"
#include "VideoCommon/BoundingBox.h"
#include "VideoCommon/BPStructs.h"
#include "VideoCommon/CommandProcessor.h"
@@ -20,8 +21,6 @@ bool s_BackendInitialized = false;
Common::Flag s_swapRequested;
static Common::Flag s_FifoShuttingDown;
-static Common::Flag s_efbAccessRequested;
-static Common::Event s_efbAccessReadyEvent;
static Common::Flag s_perfQueryRequested;
static Common::Event s_perfQueryReadyEvent;
@@ -39,16 +38,6 @@ static volatile struct
u32 fbHeight;
} s_beginFieldArgs;
-static struct
-{
- EFBAccessType type;
- u32 x;
- u32 y;
- u32 Data;
-} s_accessEFBArgs;
-
-static u32 s_AccessEFBResult = 0;
-
void VideoBackendHardware::EmuStateChange(EMUSTATE_CHANGE newState)
{
EmulatorState((newState == EMUSTATE_CHANGE_PLAY) ? true : false);
@@ -64,7 +53,6 @@ void VideoBackendHardware::Video_ExitLoop()
{
ExitGpuLoop();
s_FifoShuttingDown.Set();
- s_efbAccessReadyEvent.Set();
s_perfQueryReadyEvent.Set();
}
@@ -152,44 +140,36 @@ bool VideoBackendHardware::Video_Screenshot(const std::string& filename)
return true;
}
-void VideoFifo_CheckEFBAccess()
+u32 VideoBackendHardware::Video_AccessEFB(EFBAccessType type, u32 x, u32 y, u32 InputData)
{
- if (s_efbAccessRequested.IsSet())
+ if (!g_ActiveConfig.bEFBAccessEnable)
{
- s_AccessEFBResult = g_renderer->AccessEFB(s_accessEFBArgs.type, s_accessEFBArgs.x, s_accessEFBArgs.y, s_accessEFBArgs.Data);
- s_efbAccessRequested.Clear();
- s_efbAccessReadyEvent.Set();
+ return 0;
}
-}
-u32 VideoBackendHardware::Video_AccessEFB(EFBAccessType type, u32 x, u32 y, u32 InputData)
-{
- if (s_BackendInitialized && g_ActiveConfig.bEFBAccessEnable)
+ if (type == POKE_COLOR || type == POKE_Z)
{
- SyncGPU(SYNC_GPU_EFB_POKE);
-
- s_accessEFBArgs.type = type;
- s_accessEFBArgs.x = x;
- s_accessEFBArgs.y = y;
- s_accessEFBArgs.Data = InputData;
-
- s_efbAccessRequested.Set();
-
- if (SConfig::GetInstance().m_LocalCoreStartupParameter.bCPUThread)
- {
- s_efbAccessReadyEvent.Reset();
- if (s_FifoShuttingDown.IsSet())
- return 0;
- s_efbAccessRequested.Set();
- s_efbAccessReadyEvent.Wait();
- }
- else
- VideoFifo_CheckEFBAccess();
-
- return s_AccessEFBResult;
+ AsyncRequests::Event e;
+ e.type = type == POKE_COLOR ? AsyncRequests::Event::EFB_POKE_COLOR : AsyncRequests::Event::EFB_POKE_Z;
+ e.time = 0;
+ e.efb_poke.data = InputData;
+ e.efb_poke.x = x;
+ e.efb_poke.y = y;
+ AsyncRequests::GetInstance()->PushEvent(e, 0);
+ return 0;
+ }
+ else
+ {
+ AsyncRequests::Event e;
+ u32 result;
+ e.type = type == PEEK_COLOR ? AsyncRequests::Event::EFB_PEEK_COLOR : AsyncRequests::Event::EFB_PEEK_Z;
+ e.time = 0;
+ e.efb_peek.x = x;
+ e.efb_peek.y = y;
+ e.efb_peek.data = &result;
+ AsyncRequests::GetInstance()->PushEvent(e, 1);
+ return result;
}
-
- return 0;
}
static void VideoFifo_CheckPerfQueryRequest()
@@ -267,12 +247,9 @@ void VideoBackendHardware::InitializeShared()
VideoCommon_Init();
s_swapRequested.Clear();
- s_efbAccessRequested.Clear();
s_perfQueryRequested.Clear();
s_FifoShuttingDown.Clear();
memset((void*)&s_beginFieldArgs, 0, sizeof(s_beginFieldArgs));
- memset(&s_accessEFBArgs, 0, sizeof(s_accessEFBArgs));
- s_AccessEFBResult = 0;
m_invalid = false;
}
@@ -292,10 +269,7 @@ void VideoBackendHardware::DoState(PointerWrap& 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.
@@ -335,7 +309,6 @@ void VideoBackendHardware::RunLoop(bool enable)
void VideoFifo_CheckAsyncRequest()
{
VideoFifo_CheckSwapRequest();
- VideoFifo_CheckEFBAccess();
VideoFifo_CheckPerfQueryRequest();
VideoFifo_CheckBBoxRequest();
}