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:
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) {
|
||||
|
||||
Reference in New Issue
Block a user