radv: Set last_index_type in radv_before_draw.
authorTimur Kristóf <timur.kristof@gmail.com>
Mon, 15 May 2023 23:40:23 +0000 (01:40 +0200)
committerMarge Bot <emma+marge@anholt.net>
Sat, 20 May 2023 19:33:20 +0000 (19:33 +0000)
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 <timur.kristof@gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20659>

src/amd/vulkan/radv_cmd_buffer.c

index 7bacfa0..718fb42 100644 (file)
@@ -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;
 }