From 4a98ebba1126875a72978aee6924b57fcdb5a40b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Wed, 11 Nov 2026 23:52:20 +0100 Subject: [PATCH] GLES: Don't use framebuffer fetch on Adreno 5xx On an Adreno 506 (driver V@145, Redmi Note 4), fetch can return black for pixels an earlier draw in the same render pass wrote, which showed up as dark noise on LittleBigPlanet's foliage. Framebuffer copies render it correctly, and that frame needs only a few of them. Co-Authored-By: Claude Opus 5.5 --- Common/GPU/OpenGL/thin3d_gl.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Common/GPU/OpenGL/thin3d_gl.cpp b/Common/GPU/OpenGL/thin3d_gl.cpp index 2fc87b164f..7a9a8c0b8f 100644 --- a/Common/GPU/OpenGL/thin3d_gl.cpp +++ b/Common/GPU/OpenGL/thin3d_gl.cpp @@ -746,7 +746,10 @@ OpenGLContext::OpenGLContext(bool canChangeSwapInterval) : renderManager_(frameT } // NOTE: We only support framebuffer fetch on ES3 due to past issues.. - if (gl_extensions.IsGLES && gl_extensions.GLES3) { + // Adreno 5xx (seen on a 506, driver V@145) can fetch black instead of what an earlier draw in the same pass + // wrote there, so it gets framebuffer copies instead. + bool brokenFramebufferFetch = caps_.vendor == GPUVendor::VENDOR_QUALCOMM && gl_extensions.modelNumber < 600; + if (gl_extensions.IsGLES && gl_extensions.GLES3 && !brokenFramebufferFetch) { caps_.framebufferFetchSupported = (gl_extensions.EXT_shader_framebuffer_fetch || gl_extensions.ARM_shader_framebuffer_fetch); if (gl_extensions.EXT_shader_framebuffer_fetch) {