radv: Move empty dynamic states check to caller.
authorTimur Kristóf <timur.kristof@gmail.com>
Tue, 16 May 2023 11:06:40 +0000 (13:06 +0200)
committerMarge Bot <emma+marge@anholt.net>
Sat, 20 May 2023 19:33:20 +0000 (19:33 +0000)
Improves the CPU overhead of radv_emit_all_graphics_states.

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 9916793..652c8c7 100644 (file)
@@ -4543,14 +4543,8 @@ radv_emit_attachment_feedback_loop_enable(struct radv_cmd_buffer *cmd_buffer)
 }
 
 static void
-radv_cmd_buffer_flush_dynamic_state(struct radv_cmd_buffer *cmd_buffer)
+radv_cmd_buffer_flush_dynamic_state(struct radv_cmd_buffer *cmd_buffer, const uint64_t states)
 {
-   const uint64_t states =
-      cmd_buffer->state.dirty & cmd_buffer->state.emitted_graphics_pipeline->needed_dynamic_state;
-
-   if (!states)
-      return;
-
    if (states & (RADV_CMD_DIRTY_DYNAMIC_VIEWPORT |
                  RADV_CMD_DIRTY_DYNAMIC_DEPTH_CLIP_ENABLE |
                  RADV_CMD_DIRTY_DYNAMIC_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE |
@@ -9134,7 +9128,10 @@ radv_emit_all_graphics_states(struct radv_cmd_buffer *cmd_buffer, const struct r
    if (info->indexed && info->indirect && cmd_buffer->state.dirty & RADV_CMD_DIRTY_INDEX_BUFFER)
       radv_emit_index_buffer(cmd_buffer);
 
-   radv_cmd_buffer_flush_dynamic_state(cmd_buffer);
+   const uint64_t dynamic_states =
+      cmd_buffer->state.dirty & cmd_buffer->state.emitted_graphics_pipeline->needed_dynamic_state;
+   if (dynamic_states)
+      radv_cmd_buffer_flush_dynamic_state(cmd_buffer, dynamic_states);
 
    radv_emit_draw_registers(cmd_buffer, info);