CommandProcessor: Replace volatile usages with atomics

Also remove said variables from being globals.
This commit is contained in:
Lioncash
2015-05-27 03:08:48 -04:00
parent 1c2d4e5d42
commit 1ba3b4e7ac
4 changed files with 78 additions and 40 deletions

View File

@ -103,7 +103,7 @@ void Fifo_Init()
s_video_buffer = (u8*)AllocateMemoryPages(FIFO_SIZE + 4);
ResetVideoBuffer();
s_gpu_running_state.store(false);
Common::AtomicStore(CommandProcessor::VITicks, CommandProcessor::m_cpClockOrigin);
CommandProcessor::SetVITicks(CommandProcessor::m_cpClockOrigin);
}
void Fifo_Shutdown()
@ -321,17 +321,17 @@ void RunGpuLoop()
if (!fifo.isGpuReadingData)
{
Common::AtomicStore(CommandProcessor::VITicks, CommandProcessor::m_cpClockOrigin);
CommandProcessor::SetVITicks(CommandProcessor::m_cpClockOrigin);
}
bool run_loop = true;
// check if we are able to run this buffer
while (run_loop && !CommandProcessor::interruptWaiting && fifo.bFF_GPReadEnable && fifo.CPReadWriteDistance && !AtBreakpoint())
while (run_loop && !CommandProcessor::IsInterruptWaiting() && fifo.bFF_GPReadEnable && fifo.CPReadWriteDistance && !AtBreakpoint())
{
fifo.isGpuReadingData = true;
if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bSyncGPU || Common::AtomicLoad(CommandProcessor::VITicks) > CommandProcessor::m_cpClockOrigin)
if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bSyncGPU || CommandProcessor::GetVITicks() > CommandProcessor::m_cpClockOrigin)
{
u32 readPtr = fifo.CPReadPointer;
ReadDataFromFifo(readPtr);
@ -349,8 +349,8 @@ void RunGpuLoop()
s_video_buffer_read_ptr = OpcodeDecoder_Run(DataReader(s_video_buffer_read_ptr, write_ptr), &cyclesExecuted, false);
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bSyncGPU && Common::AtomicLoad(CommandProcessor::VITicks) >= cyclesExecuted)
Common::AtomicAdd(CommandProcessor::VITicks, -(s32)cyclesExecuted);
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bSyncGPU && CommandProcessor::GetVITicks() >= cyclesExecuted)
CommandProcessor::DecrementVITicks(cyclesExecuted);
Common::AtomicStore(fifo.CPReadPointer, readPtr);
Common::AtomicAdd(fifo.CPReadWriteDistance, -32);