radv: fix setting the rasterized primitive for ESO

This was missing.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27479>
This commit is contained in:
Samuel Pitoiset
2024-02-06 10:37:01 +01:00
committed by Marge Bot
parent b199aa1bda
commit 0c2213cbbd

View File

@@ -9096,7 +9096,6 @@ radv_emit_shaders(struct radv_cmd_buffer *cmd_buffer)
{
const gl_shader_stage last_vgt_api_stage = radv_cmdbuf_get_last_vgt_api_stage(cmd_buffer);
const struct radv_shader *last_vgt_shader = cmd_buffer->state.shaders[last_vgt_api_stage];
const struct radv_dynamic_state *d = &cmd_buffer->state.dynamic;
struct radv_device *device = cmd_buffer->device;
struct radeon_cmdbuf *cs = cmd_buffer->cs;
@@ -9173,7 +9172,6 @@ radv_emit_shaders(struct radv_cmd_buffer *cmd_buffer)
}
/* Emit graphics states related to shaders. */
const uint32_t vgt_gs_out = radv_get_vgt_gs_out(cmd_buffer->state.shaders, d->vk.ia.primitive_topology);
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],
@@ -9189,7 +9187,7 @@ radv_emit_shaders(struct radv_cmd_buffer *cmd_buffer)
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));
radv_emit_vgt_shader_config(device, cs, &vgt_shader_cfg_key);
radv_emit_vgt_gs_out(device, cs, vgt_gs_out);
radv_emit_vgt_gs_out(device, cs, radv_get_rasterization_prim(cmd_buffer));
if (cmd_buffer->device->physical_device->rad_info.gfx_level >= GFX10_3) {
gfx103_emit_vgt_draw_payload_cntl(cs, cmd_buffer->state.shaders[MESA_SHADER_MESH], false);
@@ -9378,6 +9376,13 @@ radv_bind_graphics_shaders(struct radv_cmd_buffer *cmd_buffer)
cmd_buffer->state.gs_copy_shader = NULL;
}
/* Determine the rasterized primitive. */
if (cmd_buffer->state.active_stages &
(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
VK_SHADER_STAGE_GEOMETRY_BIT | VK_SHADER_STAGE_MESH_BIT_EXT)) {
cmd_buffer->state.rast_prim = radv_get_vgt_gs_out(cmd_buffer->state.shaders, 0);
}
const struct radv_shader *vs = radv_get_shader(cmd_buffer->state.shaders, MESA_SHADER_VERTEX);
if (vs) {
/* Re-emit the VS prolog when a new vertex shader is bound. */