summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/Src/CommandProcessor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoCommon/Src/CommandProcessor.cpp')
-rw-r--r--Source/Core/VideoCommon/Src/CommandProcessor.cpp48
1 files changed, 29 insertions, 19 deletions
diff --git a/Source/Core/VideoCommon/Src/CommandProcessor.cpp b/Source/Core/VideoCommon/Src/CommandProcessor.cpp
index d2c746c400..4ada117c4b 100644
--- a/Source/Core/VideoCommon/Src/CommandProcessor.cpp
+++ b/Source/Core/VideoCommon/Src/CommandProcessor.cpp
@@ -474,7 +474,6 @@ void Write16(const u16 _Value, const u32 _Address)
fifo.bFF_BPInt = tmpCtrl.BPInt;
fifo.bFF_BPEnable = tmpCtrl.BPEnable;
- fifo.bFF_GPReadEnable = tmpCtrl.GPReadEnable;
fifo.bFF_HiWatermarkInt = tmpCtrl.FifoOverflowIntEnable;
fifo.bFF_LoWatermarkInt = tmpCtrl.FifoUnderflowIntEnable;
fifo.bFF_GPLinkEnable = tmpCtrl.GPLinkEnable;
@@ -489,6 +488,15 @@ void Write16(const u16 _Value, const u32 _Address)
if (bProcessFifoToLoWatermark)
ProcessFifoToLoWatermark();
+ if(fifo.bFF_GPReadEnable && !tmpCtrl.GPReadEnable)
+ {
+ fifo.bFF_GPReadEnable = tmpCtrl.GPReadEnable;
+ while(fifo.isFifoProcesingData) Common::YieldCPU();
+ }
+ else
+ {
+ fifo.bFF_GPReadEnable = tmpCtrl.GPReadEnable;
+ }
INFO_LOG(COMMANDPROCESSOR,"\t Write to CTRL_REGISTER : %04x", _Value);
DEBUG_LOG(COMMANDPROCESSOR, "\t GPREAD %s | BP %s | Int %s | OvF %s | UndF %s | LINK %s"
@@ -613,6 +621,12 @@ void Write16(const u16 _Value, const u32 _Address)
break;
case FIFO_RW_DISTANCE_LO:
WriteLow((u32 &)fifo.CPReadWriteDistance, _Value & 0xFFE0);
+ if (fifo.CPReadWriteDistance == 0)
+ {
+ GPFifo::ResetGatherPipe();
+ ResetVideoBuffer();
+ IncrementCheckContextId();
+ }
DEBUG_LOG(COMMANDPROCESSOR,"try to write to FIFO_RW_DISTANCE_LO : %04x", _Value);
break;
@@ -699,11 +713,7 @@ void STACKALIGN GatherPipeBursted()
OnOverflow = true;
while (!CommandProcessor::interruptWaiting && fifo.bFF_GPReadEnable &&
fifo.CPReadWriteDistance > fifo.CPEnd - fifo.CPBase - 64)
- Common::YieldCPU();
-
-
-
-
+ Common::YieldCPU();
}
else
{
@@ -816,19 +826,19 @@ void SetFifoIdleFromVideoPlugin()
// to 0 when PI_FIFO_RESET occurs.
void AbortFrame()
{
- fifo.bFF_GPReadEnable = false;
- while(IsFifoProcesingData()) Common::YieldCPU();
- GPFifo::ResetGatherPipe();
- ResetVideoBuffer();
- fifo.CPReadPointer = fifo.CPWritePointer;
- fifo.CPReadWriteDistance = 0;
- fifo.CPBreakpoint = 0;
- fifo.bFF_Breakpoint = false;
- fifo.CPCmdIdle = false;
- PixelEngine::ResetSetToken();
- PixelEngine::ResetSetFinish();
- fifo.bFF_GPReadEnable = true;
- IncrementCheckContextId();
+ //fifo.bFF_GPReadEnable = false;
+ //while(IsFifoProcesingData()) Common::YieldCPU();
+ //GPFifo::ResetGatherPipe();
+ //ResetVideoBuffer();
+ //fifo.CPReadPointer = fifo.CPWritePointer;
+ //fifo.CPReadWriteDistance = 0;
+ //fifo.CPBreakpoint = 0;
+ //fifo.bFF_Breakpoint = false;
+ //fifo.CPCmdIdle = false;
+ //PixelEngine::ResetSetToken();
+ //PixelEngine::ResetSetFinish();
+ //fifo.bFF_GPReadEnable = true;
+ //IncrementCheckContextId();
}
void SetOverflowStatusFromGatherPipe()