BOOL bDoLazyUpdate=FALSE;
uint32_t lGPUInfoVals[16];
static int iFakePrimBusy=0;
+static uint32_t vBlank=0;
////////////////////////////////////////////////////////////////////////
// some misc external display funcs
bSkipNextFrame = FALSE;
DoBufferSwap(); // -> swap
}
+
+ bDoVSyncUpdate=FALSE; // vsync done
}
////////////////////////////////////////////////////////////////////////
void CALLBACK GPUupdateLace(void) // VSYNC
{
- if(!(dwActFixes&1))
- lGPUstatusRet^=0x80000000; // odd/even bit
+ //if(!(dwActFixes&1))
+ // lGPUstatusRet^=0x80000000; // odd/even bit
//pcsx-rearmed: removed, this is handled by core
//if(!(dwActFixes&32)) // std fps limitation?
if(PSXDisplay.Interlaced) // interlaced mode?
{
+ lGPUstatusRet^=0x80000000; // odd/even bit?
+
if(bDoVSyncUpdate && PSXDisplay.DisplayMode.x>0 && PSXDisplay.DisplayMode.y>0)
{
updateDisplay();
}
else
{
- if(bDoVSyncUpdate && !UseFrameSkip) // some primitives drawn?
- updateDisplay(); // -> update display
+ if((bDoVSyncUpdate && !UseFrameSkip) // some primitives drawn?
+ || bDoVSyncUpdate >= 8) // not syned for a while
+ updateDisplay(); // -> update display
}
}
- bDoVSyncUpdate=FALSE; // vsync done
+
+ if(bDoVSyncUpdate) // if display not synced
+ bDoVSyncUpdate++; // count how many times
}
////////////////////////////////////////////////////////////////////////
GPUIsReadyForCommands;
}
}
- return lGPUstatusRet;
+ return lGPUstatusRet | vBlank;
}
////////////////////////////////////////////////////////////////////////
return 1;
}
+
+void CALLBACK GPUvBlank(int val)
+{
+ vBlank=val?0x80000000:0;
+}
+