From a5e5fc079ae7020c34c14843ecfcd3ef1e04e62b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 20 Oct 2026 23:03:00 +0200 Subject: [PATCH] GPU: Pick up a changed Skip Buffer Effects even without a render resize The framebuffer manager only switches between buffered and non-buffered rendering on a render resize. Turning on Auto FrameSkip clears Skip Buffer Effects without posting one, so after resuming, EmuScreen ran the buffered path with a GPU still in non-buffered mode. A frame displayed from RAM was then drawn straight to output with no render pass bound, crashing in VulkanRenderManager::SetScissor. Treat a mismatch as a resize in BeginHostFrame, whatever changed the setting. Co-Authored-By: Claude Opus 5.5 (1M context) --- GPU/GPUCommon.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/GPU/GPUCommon.cpp b/GPU/GPUCommon.cpp index 913ada9910..a3ac40b08c 100644 --- a/GPU/GPUCommon.cpp +++ b/GPU/GPUCommon.cpp @@ -76,6 +76,11 @@ void GPUCommon::BeginHostFrame(const DisplayLayoutConfig &config) { UpdateMSAALevel(draw_); CheckConfigChanged(config); CheckDisplayResized(); + // Skip Buffer Effects only takes effect on a render resize, and not everything that changes it posts one + // (turning on Auto FrameSkip clears it). + if (framebufferManager_ && framebufferManager_->UseBufferedRendering() == g_Config.bSkipBufferEffects) { + renderResized_ = true; + } CheckRenderResized(config); // After the resizes, which ask for the post shaders to be rebuilt at the new size.