Set the token and finish interrupt signal from the video thread. This fixes the inconsistent state caused by lag from the scheduler. Fixes Rayman 3: Hoodlum Havoc and Shamu's Deep Sea Adventures.

Fixes issue 5401.
Fixes issue 5589.
This commit is contained in:
skidau
2013-02-03 18:05:46 +11:00
parent 867bfaa696
commit 9a4e9da7c2
5 changed files with 22 additions and 45 deletions

View File

@ -464,7 +464,7 @@ void STACKALIGN GatherPipeBursted()
}
if (IsOnThread())
SetOverflowStatusFromGatherPipe();
SetWatermarkFromGatherPipe();
// update the fifo-pointer
if (fifo.CPWritePointer >= fifo.CPEnd)
@ -514,7 +514,7 @@ void AbortFrame()
}
void SetOverflowStatusFromGatherPipe()
void SetWatermarkFromGatherPipe()
{
fifo.bFF_HiWatermark = (fifo.CPReadWriteDistance > fifo.CPHiWatermark);
fifo.bFF_LoWatermark = (fifo.CPReadWriteDistance < fifo.CPLoWatermark);
@ -634,10 +634,6 @@ void SetCpStatusRegister()
m_CPStatusReg.UnderflowLoWatermark = fifo.bFF_LoWatermark;
m_CPStatusReg.OverflowHiWatermark = fifo.bFF_HiWatermark;
// HACK to compensate for slow response to PE interrupts in Time Splitters: Future Perfect
if (IsOnThread())
PixelEngine::ResumeWaitingForPEInterrupt();
INFO_LOG(COMMANDPROCESSOR,"\t Read from STATUS_REGISTER : %04x", m_CPStatusReg.Hex);
DEBUG_LOG(COMMANDPROCESSOR, "(r) status: iBP %s | fReadIdle %s | fCmdIdle %s | iOvF %s | iUndF %s"
, m_CPStatusReg.Breakpoint ? "ON" : "OFF"