From 16bd3664da272d869b643595f19bfe1bb8ae3fe3 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 27 Mar 2023 18:39:29 +0200 Subject: [PATCH] radv: move dirtying flags for mesh shading to radv_bind_pre_rast_shader() Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 9c73ab4..23743b2 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -6268,6 +6268,8 @@ radv_bind_multisample_state(struct radv_cmd_buffer *cmd_buffer, static void radv_bind_pre_rast_shader(struct radv_cmd_buffer *cmd_buffer, const struct radv_shader *shader) { + bool mesh_shading = shader->info.stage == MESA_SHADER_MESH; + assert(shader->info.stage == MESA_SHADER_VERTEX || shader->info.stage == MESA_SHADER_TESS_EVAL || shader->info.stage == MESA_SHADER_GEOMETRY || @@ -6299,6 +6301,16 @@ radv_bind_pre_rast_shader(struct radv_cmd_buffer *cmd_buffer, const struct radv_ /* Re-emit NGG query state when SGPR exists but location potentially changed. */ cmd_buffer->state.dirty |= RADV_CMD_DIRTY_NGG_QUERY; } + + if (mesh_shading != cmd_buffer->state.mesh_shading) { + /* Re-emit VRS state because the combiner is different (vertex vs primitive). Re-emit + * primitive topology because the mesh shading pipeline clobbered it. + */ + cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_FRAGMENT_SHADING_RATE | + RADV_CMD_DIRTY_DYNAMIC_PRIMITIVE_TOPOLOGY; + } + + cmd_buffer->state.mesh_shading = mesh_shading; } static void @@ -6488,16 +6500,6 @@ radv_CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipeline cmd_buffer->state.graphics_pipeline->vtx_base_sgpr != graphics_pipeline->vtx_base_sgpr; cmd_buffer->state.graphics_pipeline = graphics_pipeline; - bool mesh_shading = (graphics_pipeline->active_stages & VK_SHADER_STAGE_MESH_BIT_EXT) > 0; - if (mesh_shading != cmd_buffer->state.mesh_shading) { - /* Re-emit VRS state because the combiner is different (vertex vs primitive). - * Re-emit primitive topology because the mesh shading pipeline clobbered it. - */ - cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_FRAGMENT_SHADING_RATE | - RADV_CMD_DIRTY_DYNAMIC_PRIMITIVE_TOPOLOGY; - } - - cmd_buffer->state.mesh_shading = mesh_shading; cmd_buffer->state.has_nggc = graphics_pipeline->has_ngg_culling; cmd_buffer->state.dirty |= RADV_CMD_DIRTY_PIPELINE | RADV_CMD_DIRTY_DYNAMIC_VERTEX_INPUT; cmd_buffer->push_constant_stages |= graphics_pipeline->active_stages; -- 2.7.4