From 8194254fa168078c9272a9b29f881656747db5af Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Fri, 13 Sep 2019 12:31:10 +0200 Subject: [PATCH] pvr: restore TA ctx after rendering framebuffer fixes Sakura Taisen 4 hang when starting game --- core/hw/pvr/Renderer_if.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/hw/pvr/Renderer_if.cpp b/core/hw/pvr/Renderer_if.cpp index e82823f5c..fca23103b 100644 --- a/core/hw/pvr/Renderer_if.cpp +++ b/core/hw/pvr/Renderer_if.cpp @@ -583,9 +583,15 @@ void rend_vblank() if (!render_called && fb_dirty && FB_R_CTRL.fb_enable) { DEBUG_LOG(PVR, "Direct framebuffer write detected"); + u32 saved_ctx_addr = PARAM_BASE; + bool restore_ctx = ta_ctx != NULL; + PARAM_BASE = 0xF00000; SetCurrentTARC(CORE_CURRENT_CTX); ta_ctx->rend.isRenderFramebuffer = true; rend_start_render(); + PARAM_BASE = saved_ctx_addr; + if (restore_ctx) + SetCurrentTARC(CORE_CURRENT_CTX); fb_dirty = false; } render_called = false;