From becb0a5efe77a8c4c983e7c6a131fb13c85bf4b6 Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Wed, 19 Jun 2019 15:10:28 +0200 Subject: [PATCH] renderer: when a RTT frame is rendered, swap any pending frame first Fixes Tony Hawks 1 & 2 black screen issue --- core/hw/pvr/Renderer_if.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) 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