Module: Mesa
Branch: main
Commit: acce5c3fe1fa2930adb6cdc152f3c371b1d24290
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=acce5c3fe1fa2930adb6cdc152f3c371b1d24290

Author: Timur Kristóf <[email protected]>
Date:   Tue Apr 18 12:59:33 2023 +0200

radv: Enable IB2 workaround on all indirect draws.

IB2 packets hang GFX6 when they contain any indirect draws,
not just the MULTI versions.

Signed-off-by: Timur Kristóf <[email protected]>
Reviewed-by: Tatsuyuki Ishi <[email protected]>
Reviewed-by: Samuel Pitoiset <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22533>

---

 src/amd/vulkan/radv_cmd_buffer.c | 8 ++++----
 src/amd/vulkan/radv_private.h    | 4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index e85e1fd9544..541454c8f2d 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -7505,10 +7505,10 @@ radv_CmdExecuteCommands(VkCommandBuffer commandBuffer, 
uint32_t commandBufferCou
       RADV_FROM_HANDLE(radv_cmd_buffer, secondary, pCmdBuffers[i]);
 
       /* Do not launch an IB2 for secondary command buffers that contain
-       * DRAW_{INDEX}_INDIRECT_MULTI on GFX7 because it's illegal and hang the 
GPU.
+       * DRAW_{INDEX}_INDIRECT_{MULTI} on GFX6-7 because it's illegal and 
hangs the GPU.
        */
       const bool allow_ib2 =
-         !secondary->state.uses_draw_indirect_multi ||
+         !secondary->state.uses_draw_indirect ||
          secondary->device->physical_device->rad_info.gfx_level >= GFX8;
 
       primary->scratch_size_per_wave_needed =
@@ -8073,9 +8073,9 @@ radv_cs_emit_indirect_draw_packet(struct radv_cmd_buffer 
*cmd_buffer, bool index
       radeon_emit(cs, count_va >> 32);
       radeon_emit(cs, stride); /* stride */
       radeon_emit(cs, di_src_sel);
-
-      cmd_buffer->state.uses_draw_indirect_multi = true;
    }
+
+   cmd_buffer->state.uses_draw_indirect = true;
 }
 
 ALWAYS_INLINE static void
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index f0fea917c91..981d6694254 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1657,8 +1657,8 @@ struct radv_cmd_state {
 
    uint8_t cb_mip[MAX_RTS];
 
-   /* Whether DRAW_{INDEX}_INDIRECT_MULTI is emitted. */
-   bool uses_draw_indirect_multi;
+   /* Whether DRAW_{INDEX}_INDIRECT_{MULTI} is emitted. */
+   bool uses_draw_indirect;
 
    uint32_t rt_stack_size;
 

Reply via email to