From adad1a7318f7ecb1da2ed22e24ee5dcbe359579f Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Fri, 22 May 2026 09:53:11 +0200 Subject: [PATCH] st/mesa: Zero MaxTextureImageUnits for unsupported stages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mesa core pre-seeds VS/TCS/TES/GS/FS in _mesa_init_constants(..) with MAX_TEXTURE_IMAGE_UNITS. When a driver does not expose a stage, this seed leaks into the GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS sum. Drivers that only expose VS+FS (like etnaviv) overcounted by 96. Zero the field so the sum reflects only the stages the driver advertises. Signed-off-by: Christian Gmeiner Reviewed-by: Tapani Pälli Reviewed-by: Marek Olšák Part-of: --- src/mesa/state_tracker/st_extensions.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 7dde5cb652a..6f55c19e1e3 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -206,8 +206,10 @@ void st_init_limits(struct pipe_screen *screen, for (sh = 0; sh < MESA_SHADER_MESH_STAGES; ++sh) { struct gl_program_constants *pc = &c->Program[sh]; - if (!screen->shader_caps[sh].max_instructions) + if (!screen->shader_caps[sh].max_instructions) { + pc->MaxTextureImageUnits = 0; continue; + } pc->MaxTextureImageUnits = _min(screen->shader_caps[sh].max_texture_samplers,