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;
|
||||
|
||||
case FIFO_READ_POINTER_LO:
|
||||
//_rReturnValue = ReadLow (fifo.CPReadPointer);
|
||||
_rReturnValue = ReadLow (fifo.CPReadPointer);
|
||||
// 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);
|
||||
return;
|
||||
case FIFO_READ_POINTER_HI:
|
||||
//_rReturnValue = ReadHigh(fifo.CPReadPointer);
|
||||
_rReturnValue = ReadHigh(fifo.CPReadPointer);
|
||||
// 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);
|
||||
return;
|
||||
|
||||
|
@ -503,11 +503,6 @@ void Write16(const u16 _Value, const u32 _Address)
|
|||
if (!tmpCtrl.ClearFifoUnderflow && tmpCtrl.ClearFifoOverflow)
|
||||
bProcessFifoToLoWatemark = true;
|
||||
|
||||
if (tmpCtrl.ClearFifoUnderflow && tmpCtrl.ClearFifoOverflow)
|
||||
ProcessFifoAllDistance();
|
||||
|
||||
if (!tmpCtrl.ClearFifoUnderflow && !tmpCtrl.ClearFifoOverflow)
|
||||
ProcessFifoAllDistance();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -814,8 +809,7 @@ void SetFifoIdleFromVideoPlugin()
|
|||
void AbortFrame()
|
||||
{
|
||||
fifo.bFF_GPReadEnable = false;
|
||||
while (CommandProcessor::isFifoBusy)
|
||||
Common::YieldCPU();
|
||||
s_fifoIdleEvent.Wait();
|
||||
GPFifo::ResetGatherPipe();
|
||||
ResetVideoBuffer();
|
||||
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
|
||||
// leading the CPU thread to wait in Video_BeginField or Video_AccessEFB thus slowing things down.
|
||||
VideoFifo_CheckAsyncRequest();
|
||||
CommandProcessor::isFifoBusy = false;
|
||||
}
|
||||
|
||||
CommandProcessor::isFifoBusy = false;
|
||||
|
||||
CommandProcessor::SetFifoIdleFromVideoPlugin();
|
||||
|
||||
if (EmuRunning)
|
||||
|
|
Loading…
Reference in New Issue