dfxvideo: fill sanity check to prevent crashes
[pcsx_rearmed.git] / plugins / dfxvideo / gpu.c
index 200913c..50d45d5 100644 (file)
@@ -218,6 +218,8 @@ static void updateDisplay(void)                               // UPDATE DISPLAY
    bSkipNextFrame = FALSE;
    DoBufferSwap();                                     // -> swap
   }
+
+  bDoVSyncUpdate=FALSE;                                // vsync done
 }
 
 ////////////////////////////////////////////////////////////////////////
@@ -406,11 +408,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
 }
 
 ////////////////////////////////////////////////////////////////////////
@@ -946,14 +951,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 +991,7 @@ ENDVRAM:
 
 void CALLBACK GPUwriteData(uint32_t gdata)
 {
- PUTLE32(&gdata, gdata);
+ PUTLE32_(&gdata, gdata);
  GPUwriteDataMem(&gdata,1);
 }