Speed back to dolpihn: - Revert Read16 CPRead fifo hack for fix RE0. This hack only solve RE0 but brings slowdown in games like RE Umbrella, etc. - Move isFifoBusy again in the fifo loop and use s_fifoIdleEvent for AbortFrame. Note: if you can play RE0 only deactivate PanicAlert. These opdecoding error seems harmless. Some day this wiil be fixed in right way.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7107 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
fc370c5136
commit
f0adc3adb4
|
@ -288,15 +288,15 @@ void Read16(u16& _rReturnValue, const u32 _Address)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case FIFO_READ_POINTER_LO:
|
case FIFO_READ_POINTER_LO:
|
||||||
//_rReturnValue = ReadLow (fifo.CPReadPointer);
|
_rReturnValue = ReadLow (fifo.CPReadPointer);
|
||||||
// hack: CPU will always believe fifo is empty and on idle
|
// hack: CPU will always believe fifo is empty and on idle
|
||||||
_rReturnValue = ReadLow (fifo.CPWritePointer);
|
//_rReturnValue = ReadLow (fifo.CPWritePointer);
|
||||||
DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_READ_POINTER_LO : %04x", _rReturnValue);
|
DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_READ_POINTER_LO : %04x", _rReturnValue);
|
||||||
return;
|
return;
|
||||||
case FIFO_READ_POINTER_HI:
|
case FIFO_READ_POINTER_HI:
|
||||||
//_rReturnValue = ReadHigh(fifo.CPReadPointer);
|
_rReturnValue = ReadHigh(fifo.CPReadPointer);
|
||||||
// hack: CPU will always believe fifo is empty and on idle
|
// hack: CPU will always believe fifo is empty and on idle
|
||||||
_rReturnValue = ReadHigh(fifo.CPWritePointer);
|
//_rReturnValue = ReadHigh(fifo.CPWritePointer);
|
||||||
DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_READ_POINTER_HI : %04x", _rReturnValue);
|
DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_READ_POINTER_HI : %04x", _rReturnValue);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -503,11 +503,6 @@ void Write16(const u16 _Value, const u32 _Address)
|
||||||
if (!tmpCtrl.ClearFifoUnderflow && tmpCtrl.ClearFifoOverflow)
|
if (!tmpCtrl.ClearFifoUnderflow && tmpCtrl.ClearFifoOverflow)
|
||||||
bProcessFifoToLoWatemark = true;
|
bProcessFifoToLoWatemark = true;
|
||||||
|
|
||||||
if (tmpCtrl.ClearFifoUnderflow && tmpCtrl.ClearFifoOverflow)
|
|
||||||
ProcessFifoAllDistance();
|
|
||||||
|
|
||||||
if (!tmpCtrl.ClearFifoUnderflow && !tmpCtrl.ClearFifoOverflow)
|
|
||||||
ProcessFifoAllDistance();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -814,8 +809,7 @@ void SetFifoIdleFromVideoPlugin()
|
||||||
void AbortFrame()
|
void AbortFrame()
|
||||||
{
|
{
|
||||||
fifo.bFF_GPReadEnable = false;
|
fifo.bFF_GPReadEnable = false;
|
||||||
while (CommandProcessor::isFifoBusy)
|
s_fifoIdleEvent.Wait();
|
||||||
Common::YieldCPU();
|
|
||||||
GPFifo::ResetGatherPipe();
|
GPFifo::ResetGatherPipe();
|
||||||
ResetVideoBuffer();
|
ResetVideoBuffer();
|
||||||
fifo.CPReadPointer = fifo.CPWritePointer;
|
fifo.CPReadPointer = fifo.CPWritePointer;
|
||||||
|
|
|
@ -180,9 +180,10 @@ void Fifo_EnterLoop()
|
||||||
// If we don't, s_swapRequested or s_efbAccessRequested won't be set to false
|
// If we don't, s_swapRequested or s_efbAccessRequested won't be set to false
|
||||||
// leading the CPU thread to wait in Video_BeginField or Video_AccessEFB thus slowing things down.
|
// leading the CPU thread to wait in Video_BeginField or Video_AccessEFB thus slowing things down.
|
||||||
VideoFifo_CheckAsyncRequest();
|
VideoFifo_CheckAsyncRequest();
|
||||||
|
CommandProcessor::isFifoBusy = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
CommandProcessor::isFifoBusy = false;
|
|
||||||
CommandProcessor::SetFifoIdleFromVideoPlugin();
|
CommandProcessor::SetFifoIdleFromVideoPlugin();
|
||||||
|
|
||||||
if (EmuRunning)
|
if (EmuRunning)
|
||||||
|
|
Loading…
Reference in New Issue