From aabb542d474b4a92099aebceccc95bb47f66de9b Mon Sep 17 00:00:00 2001 From: "sl1nk3.s" Date: Wed, 16 Mar 2011 23:57:13 +0000 Subject: [PATCH] Fix the framerate counter of the software graphic backend. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7363 8ced0084-cf51-0410-be5f-012b33b47a6e --- .../Plugin_VideoSoftware/Src/EfbCopy.cpp | 2 +- .../Plugin_VideoSoftware/Src/SWmain.cpp | 29 ++++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/EfbCopy.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/EfbCopy.cpp index 62f00b22b8..50e6998a74 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/EfbCopy.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/EfbCopy.cpp @@ -85,7 +85,7 @@ namespace EfbCopy if (bpmem.triggerEFBCopy.copy_to_xfb) { CopyToXfb(); - Core::Callback_VideoCopiedToXFB(false); + Core::Callback_VideoCopiedToXFB(true); swstats.frameCount++; } diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp index a6dbb835d2..8870aaac83 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp @@ -43,7 +43,8 @@ namespace SW { -static bool fifoStateRun = false; +static volatile bool fifoStateRun = false; +static volatile bool emuRunningState = false; std::string VideoSoftware::GetName() @@ -94,11 +95,12 @@ void VideoSoftware::DoState(PointerWrap&) void VideoSoftware::RunLoop(bool enable) { - //EmulatorState(true); + emuRunningState = enable; } void VideoSoftware::EmuStateChange(EMUSTATE_CHANGE newState) { + emuRunningState = (newState == EMUSTATE_CHANGE_PLAY) ? true : false; } void VideoSoftware::Shutdown() @@ -167,13 +169,26 @@ void VideoSoftware::Video_EnterLoop() { fifoStateRun = true; - while (fifoStateRun) - { + while (fifoStateRun) + { g_video_backend->PeekMessages(); - if (!SWCommandProcessor::RunBuffer()) { - Common::YieldCPU(); + + if (!SWCommandProcessor::RunBuffer()) + { + Common::YieldCPU(); } - } + + if (!emuRunningState) + { + while (!emuRunningState) + { + g_video_backend->PeekMessages(); + Common::SleepCurrentThread(1); + } + } + } + + } void VideoSoftware::Video_ExitLoop()