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 <noreply@anthropic.com>
This commit is contained in:
Henrik RydgårdandClaude Opus 5.5 committed 2026-11-11 23:52:20 +01:00
1 parent 15e4c378fb
commit 4a98ebba11
1 file changed
+4 -1
+4 -1
View File
@@ -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) {