X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=plugins%2Fdfxvideo%2Fgpu.c;h=8e36f8e8b6198e430a450f6acf40d798e368ffd7;hb=2588a9387f60ec46ec9c7a1f7ebc480276e5cf1e;hp=200913ceab2fa15e00dd90a45ffa6e58b76621fd;hpb=a96a5eb2d6a6720cc7bba6a30d1c25473f345a89;p=pcsx_rearmed.git diff --git a/plugins/dfxvideo/gpu.c b/plugins/dfxvideo/gpu.c index 200913ce..8e36f8e8 100644 --- a/plugins/dfxvideo/gpu.c +++ b/plugins/dfxvideo/gpu.c @@ -59,6 +59,7 @@ long lSelectedSlot=0; BOOL bDoLazyUpdate=FALSE; uint32_t lGPUInfoVals[16]; static int iFakePrimBusy=0; +static uint32_t vBlank=0; //////////////////////////////////////////////////////////////////////// // some misc external display funcs @@ -218,6 +219,8 @@ static void updateDisplay(void) // UPDATE DISPLAY bSkipNextFrame = FALSE; DoBufferSwap(); // -> swap } + + bDoVSyncUpdate=FALSE; // vsync done } //////////////////////////////////////////////////////////////////////// @@ -382,8 +385,8 @@ static void updateDisplayIfChanged(void) // UPDATE DISPLAY 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? @@ -391,6 +394,8 @@ void CALLBACK GPUupdateLace(void) // VSYNC if(PSXDisplay.Interlaced) // interlaced mode? { + lGPUstatusRet^=0x80000000; // odd/even bit? + if(bDoVSyncUpdate && PSXDisplay.DisplayMode.x>0 && PSXDisplay.DisplayMode.y>0) { updateDisplay(); @@ -406,11 +411,14 @@ void CALLBACK GPUupdateLace(void) // VSYNC } 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 } //////////////////////////////////////////////////////////////////////// @@ -445,7 +453,7 @@ uint32_t CALLBACK GPUreadStatus(void) // READ STATUS GPUIsReadyForCommands; } } - return lGPUstatusRet; + return lGPUstatusRet | vBlank; } //////////////////////////////////////////////////////////////////////// @@ -946,14 +954,14 @@ ENDVRAM: { gpuDataC = primTableCX[command]; gpuCommand = command; - PUTLE32(&gpuDataM[0], gdata); + PUTLE32_(&gpuDataM[0], gdata); gpuDataP = 1; } else continue; } else { - PUTLE32(&gpuDataM[gpuDataP], gdata); + PUTLE32_(&gpuDataM[gpuDataP], gdata); if(gpuDataC>128) { if((gpuDataC==254 && gpuDataP>=3) || @@ -986,7 +994,7 @@ ENDVRAM: void CALLBACK GPUwriteData(uint32_t gdata) { - PUTLE32(&gdata, gdata); + PUTLE32_(&gdata, gdata); GPUwriteDataMem(&gdata,1); } @@ -1098,3 +1106,9 @@ long CALLBACK GPUfreeze(uint32_t ulGetFreezeData,GPUFreeze_t * pF) return 1; } + +void CALLBACK GPUvBlank(int val) +{ + vBlank=val?0x80000000:0; +} +