diff --git a/core/hw/pvr/Renderer_if.cpp b/core/hw/pvr/Renderer_if.cpp index 254cccb76..eada63387 100644 --- a/core/hw/pvr/Renderer_if.cpp +++ b/core/hw/pvr/Renderer_if.cpp @@ -253,6 +253,14 @@ bool rend_frame(TA_context* ctx, bool draw_osd) { dump_frame_switch = false; } bool proc = renderer->Process(ctx); + if ((ctx->rend.isRTT || ctx->rend.isRenderFramebuffer) && swap_pending) + { + // If there a frame swap pending, we want to do it now. + // The current frame "swapping" detection mechanism (using FB_R_SOF1) doesn't work + // if a RTT frame is rendered in between. + renderer->Present(); + swap_pending = false; + } #if !defined(TARGET_NO_THREADS) if (!proc || (!ctx->rend.isRTT && !ctx->rend.isRenderFramebuffer)) // If rendering to texture, continue locking until the frame is rendered