diff --git a/Core/HLE/sceDisplay.cpp b/Core/HLE/sceDisplay.cpp index 5500df8a86..b124b5a088 100644 --- a/Core/HLE/sceDisplay.cpp +++ b/Core/HLE/sceDisplay.cpp @@ -625,15 +625,16 @@ void hleEnterVblank(u64 userdata, int cyclesLate) { // We flip only if the framebuffer was dirty. This eliminates flicker when using // non-buffered rendering. The interaction with frame skipping seems to need // some work. - // But, let's flip at least once every 10 frames if possible, since there may be sound effects. - if (gpu->FramebufferDirty() || (g_Config.iRenderingMode != 0 && numVBlanksSinceFlip >= 10)) { + // But, let's flip at least once every 10 vblanks, to update fps, etc. + const bool noRecentFlip = g_Config.iRenderingMode != FB_NON_BUFFERED_MODE && numVBlanksSinceFlip >= 10; + if (gpu->FramebufferDirty() || noRecentFlip) { if (g_Config.iShowFPSCounter && g_Config.iShowFPSCounter < 4) { CalculateFPS(); } // Setting CORE_NEXTFRAME causes a swap. // Check first though, might've just quit / been paused. - if (gpu->FramebufferReallyDirty()) { + if (gpu->FramebufferReallyDirty() || noRecentFlip) { if (coreState == CORE_RUNNING) { coreState = CORE_NEXTFRAME; gpu->CopyDisplayToOutput();