From 90103fe61862b8cd3703dea5d906244f1bc61e4f Mon Sep 17 00:00:00 2001 From: Pierre-Eric Pelloux-Prayer Date: Thu, 16 Oct 2025 15:12:42 +0200 Subject: [PATCH] radeonsi: propagate shader updates for merged shaders MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In case of merged shaders (eg: VS+GS), a change to VS should trigger a GS update. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/13935 Fixes: b1a34ac95df ("radeonsi: change do_update_shaders boolean to a bitmask") Reviewed-by: Marek Olšák Part-of: --- src/gallium/drivers/radeonsi/si_state_draw.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/gallium/drivers/radeonsi/si_state_draw.cpp b/src/gallium/drivers/radeonsi/si_state_draw.cpp index afbfef3e0ce..6a66e472ffa 100644 --- a/src/gallium/drivers/radeonsi/si_state_draw.cpp +++ b/src/gallium/drivers/radeonsi/si_state_draw.cpp @@ -56,6 +56,19 @@ static bool si_update_shaders(struct si_context *sctx) struct si_shader *old_ps = sctx->shader.ps.current; int r; + if (GFX_VERSION >= GFX9) { + /* For merged shaders, mark the next shader as dirty so its previous_stage is updated. */ + if (is_vs_state_changed) { + if (HAS_TESS) { + is_tess_state_changed = true; + } else if (HAS_GS) { + is_gs_state_changed = true; + } + } + if ((sctx->dirty_shaders_mask & BITFIELD_BIT(MESA_SHADER_TESS_EVAL)) && HAS_GS && HAS_TESS) + is_gs_state_changed = true; + } + /* Update TCS and TES. */ if (HAS_TESS && is_tess_state_changed) { if (!sctx->has_tessellation) {