diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 332d3ef670f..f51be90d156 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -9178,18 +9178,8 @@ radv_emit_graphics_shaders(struct radv_cmd_buffer *cmd_buffer) } /* Emit graphics states related to shaders. */ - struct radv_vgt_shader_key vgt_shader_cfg_key = { - .tess = !!cmd_buffer->state.shaders[MESA_SHADER_TESS_CTRL], - .gs = !!cmd_buffer->state.shaders[MESA_SHADER_GEOMETRY], - .ngg = last_vgt_shader->info.is_ngg, - .ngg_passthrough = last_vgt_shader->info.is_ngg_passthrough, - .ngg_streamout = last_vgt_shader->info.is_ngg && last_vgt_shader->info.so.num_outputs > 0, - }; - - if (cmd_buffer->state.shaders[MESA_SHADER_MESH]) { - vgt_shader_cfg_key.mesh = 1; - vgt_shader_cfg_key.mesh_scratch_ring = cmd_buffer->state.shaders[MESA_SHADER_MESH]->info.ms.needs_ms_scratch_ring; - } + const struct radv_vgt_shader_key vgt_shader_cfg_key = + radv_get_vgt_shader_key(cmd_buffer->device, cmd_buffer->state.shaders, cmd_buffer->state.gs_copy_shader); radv_emit_vgt_gs_mode(device, cs, last_vgt_shader); radv_emit_vgt_vertex_reuse(device, cs, radv_get_shader(cmd_buffer->state.shaders, MESA_SHADER_TESS_EVAL)); diff --git a/src/amd/vulkan/radv_pipeline_graphics.c b/src/amd/vulkan/radv_pipeline_graphics.c index 494bae90ad1..7348bfcd306 100644 --- a/src/amd/vulkan/radv_pipeline_graphics.c +++ b/src/amd/vulkan/radv_pipeline_graphics.c @@ -3567,7 +3567,7 @@ radv_emit_vgt_vertex_reuse(const struct radv_device *device, struct radeon_cmdbu radeon_set_context_reg(ctx_cs, R_028C58_VGT_VERTEX_REUSE_BLOCK_CNTL, S_028C58_VTX_REUSE_DEPTH(vtx_reuse_depth)); } -static struct radv_vgt_shader_key +struct radv_vgt_shader_key radv_get_vgt_shader_key(const struct radv_device *device, struct radv_shader **shaders, const struct radv_shader *gs_copy_shader) { diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 4b1a5069ce3..b99e8ae9451 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -3472,6 +3472,9 @@ radv_get_num_vertices_per_prim(const struct radv_graphics_state_key *gfx_state) uint32_t radv_get_vgt_gs_out(struct radv_shader **shaders, uint32_t primitive_topology); +struct radv_vgt_shader_key radv_get_vgt_shader_key(const struct radv_device *device, struct radv_shader **shaders, + const struct radv_shader *gs_copy_shader); + static inline uint32_t radv_translate_fill(VkPolygonMode func) {