If there is a SetBreakPoint and the actual distance is enough to achieve the BP, we wait for the FIFO Loop in dual core mode. That fix Pokemon XD in game in dual core mode (also maybe this fix Issue 3452) and hopefully others FIFO hangs related with BP. I test games like SMG and don't produce slowdowns. If you have any slowdown about this commit. Please report it.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6483 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
5ae1b65388
commit
762563a026
|
@ -402,6 +402,30 @@ void Write16(const u16 _Value, const u32 _Address)
|
|||
UCPCtrlReg tmpCtrl(_Value);
|
||||
m_CPCtrlReg.Hex = tmpCtrl.Hex;
|
||||
|
||||
//If there is a SetBreakPoint and the actual distance is enought to achieve the BP,
|
||||
//we wait for the FIFO Loop in DC MODE
|
||||
if (g_VideoInitialize.bOnThread && fifo.bFF_BPInt && tmpCtrl.BPInt && fifo.bFF_BPEnable && tmpCtrl.BPEnable)
|
||||
{
|
||||
bool wait = false;
|
||||
if (fifo.CPReadPointer + fifo.CPReadWriteDistance + 32 > fifo.CPBreakpoint)
|
||||
{
|
||||
wait = true;
|
||||
} //If the distance is >= CPEnd we need to calculate the distane related to CPBase
|
||||
else if (fifo.CPReadPointer + fifo.CPReadWriteDistance >= fifo.CPEnd)
|
||||
{
|
||||
if (fifo.CPReadWriteDistance + fifo.CPReadPointer - fifo.CPEnd + 32 > fifo.CPBreakpoint)
|
||||
wait = true;
|
||||
}
|
||||
|
||||
// We waiting for the fifo loop finish
|
||||
while (wait && fifo.bFF_GPReadEnable && (fifo.CPReadWriteDistance ||
|
||||
(fifo.bFF_BPEnable && ((fifo.CPReadPointer <= fifo.CPBreakpoint) &&
|
||||
(fifo.CPReadPointer + 32 > fifo.CPBreakpoint)))))
|
||||
{
|
||||
Common::YieldCPU();
|
||||
}
|
||||
}
|
||||
|
||||
Common::AtomicStore(fifo.bFF_Breakpoint, false);
|
||||
|
||||
if (tmpCtrl.FifoUnderflowIntEnable)
|
||||
|
|
Loading…
Reference in New Issue