radeonsi: propagate shader updates for merged shaders

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: b1a34ac95d ("radeonsi: change do_update_shaders boolean to a bitmask")
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37882>
This commit is contained in:
Pierre-Eric Pelloux-Prayer
2025-10-16 15:12:42 +02:00
committed by Marge Bot
parent 091f18ea57
commit 90103fe618
@@ -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) {