mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
Experimental commit and one fix for my last commit.
I think that isFifoBusy bring better sync with VI (video interface) because the CPU emulated threads are waiting for DrawDone in BP Register. So, I do some modifications. 1) Rename "IsFifoBusy" by "isPossibleWaitingSetDrawDone" 2) Only activate isPossibleWaitingSetDrawDone when bFF_GPLinkEnable is true in fifo loop "Inmediate mode" that is because in theory this drawsync function is using in this mode. 3) Deactivate isPossibleWaitingSetDrawDone also in SetFinish in PixelEngine, beside when 32 block is finish. Please regression in yours games thats can bring some FPS more above all with VPS frame limiter ON (Auto, 60, 50, etc). - Fix waiting in AbortFrame(), please test mp1/mp2 is fixed again. Good look! git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7123 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -111,7 +111,7 @@ static Common::CriticalSection sFifoCritical;
|
||||
static bool bProcessFifoToLoWatermark = false;
|
||||
static bool bProcessFifoAllDistance = false;
|
||||
|
||||
volatile bool isFifoBusy = false; //This state is changed when the FIFO is processing data.
|
||||
volatile bool isPossibleWaitingSetDrawDone = false; //This state is changed when the FIFO is processing data.
|
||||
volatile bool interruptSet= false;
|
||||
volatile bool interruptWaiting= false;
|
||||
volatile bool interruptTokenWaiting = false;
|
||||
@ -153,7 +153,7 @@ void DoState(PointerWrap &p)
|
||||
p.Do(bProcessFifoToLoWatermark);
|
||||
p.Do(bProcessFifoAllDistance);
|
||||
|
||||
p.Do(isFifoBusy);
|
||||
p.Do(isPossibleWaitingSetDrawDone);
|
||||
p.Do(interruptSet);
|
||||
p.Do(interruptWaiting);
|
||||
p.Do(interruptTokenWaiting);
|
||||
@ -477,6 +477,7 @@ void Write16(const u16 _Value, const u32 _Address)
|
||||
fifo.bFF_GPReadEnable = tmpCtrl.GPReadEnable;
|
||||
fifo.bFF_HiWatermarkInt = tmpCtrl.FifoOverflowIntEnable;
|
||||
fifo.bFF_LoWatermarkInt = tmpCtrl.FifoUnderflowIntEnable;
|
||||
fifo.bFF_GPLinkEnable = tmpCtrl.GPLinkEnable;
|
||||
|
||||
if(tmpCtrl.GPReadEnable && tmpCtrl.GPLinkEnable)
|
||||
{
|
||||
@ -816,7 +817,7 @@ void SetFifoIdleFromVideoPlugin()
|
||||
void AbortFrame()
|
||||
{
|
||||
fifo.bFF_GPReadEnable = false;
|
||||
s_fifoIdleEvent.Wait();
|
||||
while(IsFifoProcesingData()) Common::YieldCPU();
|
||||
GPFifo::ResetGatherPipe();
|
||||
ResetVideoBuffer();
|
||||
fifo.CPReadPointer = fifo.CPWritePointer;
|
||||
|
Reference in New Issue
Block a user