From 6e940e4d08a4f6483c616d2bd9c76bc93e5b9ea7 Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Fri, 3 Feb 2023 11:34:58 +0100 Subject: [PATCH] ggpo: move endOfFrame() call back to start render Naomi2 TA context geometry for the current frame is lost when rollbacking during vblank in because it hasn't been queued for render yet. Fixes black screen after GGPO rollback for Naomi 2 games --- core/emulator.cpp | 4 +++- core/hw/pvr/Renderer_if.cpp | 3 +++ core/hw/pvr/spg.cpp | 1 - 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/emulator.cpp b/core/emulator.cpp index 28feefee7..305ffeb7f 100644 --- a/core/emulator.cpp +++ b/core/emulator.cpp @@ -928,7 +928,9 @@ void Emulator::vblank() if (sh4_sched_now64() - startTime <= 10000000) return; renderTimeout = true; - if (!ggpo::active() && !config::ThreadedRendering) + if (ggpo::active()) + ggpo::endOfFrame(); + else if (!config::ThreadedRendering) sh4_cpu.Stop(); } diff --git a/core/hw/pvr/Renderer_if.cpp b/core/hw/pvr/Renderer_if.cpp index afd9cd035..a4efb1732 100644 --- a/core/hw/pvr/Renderer_if.cpp +++ b/core/hw/pvr/Renderer_if.cpp @@ -395,6 +395,9 @@ void rend_start_render() ctx->rend.fog_clamp_min = FOG_CLAMP_MIN; ctx->rend.fog_clamp_max = FOG_CLAMP_MAX; + if (!ctx->rend.isRTT) + ggpo::endOfFrame(); + if (QueueRender(ctx)) { palette_update(); diff --git a/core/hw/pvr/spg.cpp b/core/hw/pvr/spg.cpp index da0a59056..2192ee06e 100755 --- a/core/hw/pvr/spg.cpp +++ b/core/hw/pvr/spg.cpp @@ -113,7 +113,6 @@ static int spg_line_sched(int tag, int cycles, int jitter) SB_MDST = 0; } asic_RaiseInterrupt(holly_SCANINT1); - ggpo::endOfFrame(); } if (SPG_VBLANK_INT.vblank_out_interrupt_line_number == prv_cur_scanline)