From 2249ab1daa1d953553f54f2fc3c5f4c2f11c3c60 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timur=20Krist=C3=B3f?= Date: Tue, 16 May 2023 01:40:23 +0200 Subject: [PATCH] radv: Set last_index_type in radv_before_draw. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This function is always inlined so checking info->indexed can be constant folded by the compiler. So it is better to set this in before_draw. Signed-off-by: Timur Kristóf Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 7bacfa0..718fb42 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -9147,18 +9147,8 @@ radv_emit_all_graphics_states(struct radv_cmd_buffer *cmd_buffer, const struct r if (cmd_buffer->state.dirty & RADV_CMD_DIRTY_GUARDBAND) radv_emit_guardband_state(cmd_buffer); - if (info->indexed) { - if (cmd_buffer->state.dirty & RADV_CMD_DIRTY_INDEX_BUFFER) - radv_emit_index_buffer(cmd_buffer, info->indirect); - } else { - /* On GFX7 and later, non-indexed draws overwrite VGT_INDEX_TYPE, - * so the state must be re-emitted before the next indexed - * draw. - */ - if (cmd_buffer->device->physical_device->rad_info.gfx_level >= GFX7) { - cmd_buffer->state.last_index_type = -1; - } - } + if (info->indexed && cmd_buffer->state.dirty & RADV_CMD_DIRTY_INDEX_BUFFER) + radv_emit_index_buffer(cmd_buffer, info->indirect); radv_cmd_buffer_flush_dynamic_state(cmd_buffer); @@ -9190,6 +9180,14 @@ radv_before_draw(struct radv_cmd_buffer *cmd_buffer, const struct radv_draw_info return false; } + if (!info->indexed && cmd_buffer->device->physical_device->rad_info.gfx_level >= GFX7) { + /* On GFX7 and later, non-indexed draws overwrite VGT_INDEX_TYPE, + * so the state must be re-emitted before the next indexed + * draw. + */ + cmd_buffer->state.last_index_type = -1; + } + /* Need to apply this workaround early as it can set flush flags. */ if (cmd_buffer->state.dirty & RADV_CMD_DIRTY_FRAMEBUFFER) radv_emit_fb_mip_change_flush(cmd_buffer); @@ -9316,6 +9314,8 @@ radv_before_taskmesh_draw(struct radv_cmd_buffer *cmd_buffer, const struct radv_ assert(cmd_buffer->cs->cdw <= cdw_max); assert(!ace_cs || ace_cs->cdw <= ace_cdw_max); + cmd_buffer->state.last_index_type = -1; + return true; } -- 2.7.4