radv: re-emit more states when a shader compiled separately is bound

Shader configs are combined and they need to be re-emitted. Doesn't
fix anything known but this was obviously incorrect.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27699>
This commit is contained in:
Samuel Pitoiset
2024-02-20 17:53:52 +01:00
committed by Marge Bot
parent dc42ad4c6a
commit c1418dcb3d
+20
View File
@@ -6476,6 +6476,14 @@ radv_bind_vertex_shader(struct radv_cmd_buffer *cmd_buffer, const struct radv_sh
{
radv_bind_pre_rast_shader(cmd_buffer, vs);
/* Re-emit states that need to be updated when the vertex shader is compiled separately
* because shader configs are combined.
*/
if (vs->info.merged_shader_compiled_separately && vs->info.next_stage == MESA_SHADER_TESS_CTRL) {
cmd_buffer->state.emitted_tcs_epilog = NULL;
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_PATCH_CONTROL_POINTS;
}
/* Can't put anything else here due to merged shaders */
}
@@ -6494,6 +6502,12 @@ radv_bind_tess_ctrl_shader(struct radv_cmd_buffer *cmd_buffer, const struct radv
/* Re-emit the TCS epilog when a new tessellation control shader is bound. */
if (tcs->info.has_epilog)
cmd_buffer->state.emitted_tcs_epilog = NULL;
/* Re-emit the VS prolog when the tessellation control shader is compiled separately because
* shader configs are combined and need to be updated.
*/
if (tcs->info.merged_shader_compiled_separately)
cmd_buffer->state.emitted_vs_prolog = NULL;
}
static void
@@ -6511,6 +6525,12 @@ radv_bind_geometry_shader(struct radv_cmd_buffer *cmd_buffer, const struct radv_
cmd_buffer->esgs_ring_size_needed = MAX2(cmd_buffer->esgs_ring_size_needed, gs->info.gs_ring_info.esgs_ring_size);
cmd_buffer->gsvs_ring_size_needed = MAX2(cmd_buffer->gsvs_ring_size_needed, gs->info.gs_ring_info.gsvs_ring_size);
/* Re-emit the VS prolog when the geometry shader is compiled separately because shader configs
* are combined and need to be updated.
*/
if (gs->info.merged_shader_compiled_separately)
cmd_buffer->state.emitted_vs_prolog = NULL;
}
static void