summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/CommandProcessor.cpp
diff options
context:
space:
mode:
authorcomex <comexk@gmail.com>2014-08-24 16:27:32 -0400
committercomex <comexk@gmail.com>2014-08-26 12:43:39 -0400
commit14125cf9519d3ca17d2ea160e83112cf8b7b27a2 (patch)
tree814ef1f44da2ee330d25e6a4018514a432f475a6 /Source/Core/VideoCommon/CommandProcessor.cpp
parentf52888d3ec9a7ca8edf673293c28b28b0fd3516b (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.cpp46
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);