diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.cpp b/src/gallium/drivers/radeonsi/si_state_shaders.cpp index c9c7a02197c..42d3e78af8d 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.cpp +++ b/src/gallium/drivers/radeonsi/si_state_shaders.cpp @@ -4396,8 +4396,16 @@ static void si_set_patch_vertices(struct pipe_context *ctx, uint8_t patch_vertic if (sctx->patch_vertices != patch_vertices) { sctx->patch_vertices = patch_vertices; si_update_tess_in_out_patch_vertices(sctx); - if (sctx->shader.tcs.current) - si_update_tess_io_layout_state(sctx); + if (sctx->shader.tcs.current) { + /* Update the io layout now if possible, + * otherwise make sure it's done by si_update_shaders. + */ + if (sctx->tess_rings) + si_update_tess_io_layout_state(sctx); + else + sctx->do_update_shaders = true; + } + } }