From ea7a2dabfd1ab6b0a5720568ffd207f5825e47f1 Mon Sep 17 00:00:00 2001
From: Ifcaro <[EMAIL REDACTED]>
Date: Thu, 1 Oct 2026 18:18:40 +0200
Subject: [PATCH] PS2: Blank both physical framebuffers on renderer init
gsKit_vram_clear() only resets gsKit's VRAM allocator, it never
zeroes physical VRAM - and gsKit_init_screen() already turned PCRTC
on pointing at whatever was there before (previous app's framebuffer,
power-on garbage). A single clear+flip only ever cleans the buffer
not currently on screen. Flip twice right after enabling the display
so both physical buffers are black before anything can see either of
them.
---
src/render/ps2/SDL_render_ps2.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/src/render/ps2/SDL_render_ps2.c b/src/render/ps2/SDL_render_ps2.c
index 6bf99cd3c4be3..c469b24891ecd 100644
--- a/src/render/ps2/SDL_render_ps2.c
+++ b/src/render/ps2/SDL_render_ps2.c
@@ -737,7 +737,18 @@ static bool PS2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P
gsKit_mode_switch(gsGlobal, GS_ONESHOT);
+ // gsKit_vram_clear() doesn't touch physical VRAM - flip twice so both
+ // physical buffers are black before anything can see either of them
+ // (otherwise the previous app's framebuffer/power-on garbage shows
+ // through on whichever buffer the single flip missed).
gsKit_clear(gsGlobal, GS_BLACK);
+ gsKit_queue_exec(gsGlobal);
+ gsKit_finish();
+ gsKit_flip(gsGlobal);
+ gsKit_clear(gsGlobal, GS_BLACK);
+ gsKit_queue_exec(gsGlobal);
+ gsKit_finish();
+ gsKit_flip(gsGlobal);
data->gsGlobal = gsGlobal;