diff options
| author | comex <comexk@gmail.com> | 2014-08-24 16:27:32 -0400 |
|---|---|---|
| committer | comex <comexk@gmail.com> | 2014-08-26 12:43:39 -0400 |
| commit | 14125cf9519d3ca17d2ea160e83112cf8b7b27a2 (patch) | |
| tree | 814ef1f44da2ee330d25e6a4018514a432f475a6 /Source/Core/VideoCommon/CommandProcessor.cpp | |
| parent | f52888d3ec9a7ca8edf673293c28b28b0fd3516b (diff) | |
Refactor SetCpStatus into two functions for from-GPU and from-CPU mode rather than a boolean parameter.
This shouldn't affect functionality. I'm not sure if the breakpoint
distinction is actually necessary (my commit messages from the old
dc-netplay last year claim that breakpoints are broken anyway, but I
don't remember why), but I don't actually need to change this part of
the code (yet), so I'll stick with the trimmings change for now.
Diffstat (limited to 'Source/Core/VideoCommon/CommandProcessor.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/CommandProcessor.cpp | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/Source/Core/VideoCommon/CommandProcessor.cpp b/Source/Core/VideoCommon/CommandProcessor.cpp index 9da48f5302..b54e503240 100644 --- a/Source/Core/VideoCommon/CommandProcessor.cpp +++ b/Source/Core/VideoCommon/CommandProcessor.cpp @@ -317,7 +317,7 @@ void STACKALIGN GatherPipeBursted() } if (IsOnThread()) - SetCpStatus(true); + SetCPStatusFromCPU(); // update the fifo pointer if (fifo.CPWritePointer >= fifo.CPEnd) @@ -361,30 +361,17 @@ void UpdateInterruptsFromVideoBackend(u64 userdata) CoreTiming::ScheduleEvent_Threadsafe(0, et_UpdateInterrupts, userdata); } -void SetCpStatus(bool isCPUThread) +void SetCPStatusFromGPU() { - // overflow & underflow check - fifo.bFF_HiWatermark = (fifo.CPReadWriteDistance > fifo.CPHiWatermark); - fifo.bFF_LoWatermark = (fifo.CPReadWriteDistance < fifo.CPLoWatermark); - // breakpoint - if (!isCPUThread) + if (fifo.bFF_BPEnable) { - if (fifo.bFF_BPEnable) + if (fifo.CPBreakpoint == fifo.CPReadPointer) { - if (fifo.CPBreakpoint == fifo.CPReadPointer) - { - if (!fifo.bFF_Breakpoint) - { - INFO_LOG(COMMANDPROCESSOR, "Hit breakpoint at %i", fifo.CPReadPointer); - fifo.bFF_Breakpoint = true; - } - } - else + if (!fifo.bFF_Breakpoint) { - if (fifo.bFF_Breakpoint) - INFO_LOG(COMMANDPROCESSOR, "Cleared breakpoint at %i", fifo.CPReadPointer); - fifo.bFF_Breakpoint = false; + INFO_LOG(COMMANDPROCESSOR, "Hit breakpoint at %i", fifo.CPReadPointer); + fifo.bFF_Breakpoint = true; } } else @@ -394,6 +381,20 @@ void SetCpStatus(bool isCPUThread) fifo.bFF_Breakpoint = false; } } + else + { + if (fifo.bFF_Breakpoint) + INFO_LOG(COMMANDPROCESSOR, "Cleared breakpoint at %i", fifo.CPReadPointer); + fifo.bFF_Breakpoint = false; + } + SetCPStatusFromCPU(); +} + +void SetCPStatusFromCPU() +{ + // overflow & underflow check + fifo.bFF_HiWatermark = (fifo.CPReadWriteDistance > fifo.CPHiWatermark); + fifo.bFF_LoWatermark = (fifo.CPReadWriteDistance < fifo.CPLoWatermark); bool bpInt = fifo.bFF_Breakpoint && fifo.bFF_BPInt; bool ovfInt = fifo.bFF_HiWatermark && fifo.bFF_HiWatermarkInt; @@ -408,15 +409,14 @@ void SetCpStatus(bool isCPUThread) { if (!interrupt || bpInt || undfInt || ovfInt) { - if (!isCPUThread) + if (Core::IsGPUThread()) { - // GPU thread: + // Schedule the interrupt asynchronously interruptWaiting = true; CommandProcessor::UpdateInterruptsFromVideoBackend(userdata); } else { - // CPU thread: interruptSet = interrupt; INFO_LOG(COMMANDPROCESSOR,"Interrupt set"); ProcessorInterface::SetInterrupt(INT_CAUSE_CP, interrupt); |
