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

Author: Samuel Pitoiset <[email protected]>
Date:   Tue Sep  5 08:39:21 2023 +0200

radv: avoid emitting SQTT markers for DGC calls

This confuses RGP.

Signed-off-by: Samuel Pitoiset <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25035>

---

 src/amd/vulkan/radv_cmd_buffer.c | 63 ++++++++++++++++++++--------------------
 1 file changed, 32 insertions(+), 31 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 6d1f9c27d82..a8cf5e755eb 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -711,10 +711,10 @@ radv_gang_finalize(struct radv_cmd_buffer *cmd_buffer)
 }
 
 static void
-radv_cmd_buffer_after_draw(struct radv_cmd_buffer *cmd_buffer, enum 
radv_cmd_flush_bits flags)
+radv_cmd_buffer_after_draw(struct radv_cmd_buffer *cmd_buffer, enum 
radv_cmd_flush_bits flags, bool dgc)
 {
    const struct radv_device *device = cmd_buffer->device;
-   if (unlikely(device->sqtt.bo)) {
+   if (unlikely(device->sqtt.bo) && !dgc) {
       radeon_check_space(device->ws, cmd_buffer->cs, 2);
 
       radeon_emit(cmd_buffer->cs, PKT3(PKT3_EVENT_WRITE, 0, 0));
@@ -8995,7 +8995,7 @@ radv_emit_all_graphics_states(struct radv_cmd_buffer 
*cmd_buffer, const struct r
 
 /* MUST inline this function to avoid massive perf loss in drawoverhead */
 ALWAYS_INLINE static bool
-radv_before_draw(struct radv_cmd_buffer *cmd_buffer, const struct 
radv_draw_info *info, uint32_t drawCount)
+radv_before_draw(struct radv_cmd_buffer *cmd_buffer, const struct 
radv_draw_info *info, uint32_t drawCount, bool dgc)
 {
    const bool has_prefetch = 
cmd_buffer->device->physical_device->rad_info.gfx_level >= GFX7;
 
@@ -9064,7 +9064,8 @@ radv_before_draw(struct radv_cmd_buffer *cmd_buffer, 
const struct radv_draw_info
       radv_emit_all_graphics_states(cmd_buffer, info);
    }
 
-   radv_describe_draw(cmd_buffer);
+   if (!dgc)
+      radv_describe_draw(cmd_buffer);
    if (likely(!info->indirect)) {
       struct radv_cmd_state *state = &cmd_buffer->state;
       struct radeon_cmdbuf *cs = cmd_buffer->cs;
@@ -9150,7 +9151,7 @@ radv_before_taskmesh_draw(struct radv_cmd_buffer 
*cmd_buffer, const struct radv_
 }
 
 ALWAYS_INLINE static void
-radv_after_draw(struct radv_cmd_buffer *cmd_buffer)
+radv_after_draw(struct radv_cmd_buffer *cmd_buffer, bool dgc)
 {
    const struct radeon_info *rad_info = 
&cmd_buffer->device->physical_device->rad_info;
    bool has_prefetch = cmd_buffer->device->physical_device->rad_info.gfx_level 
>= GFX7;
@@ -9170,7 +9171,7 @@ radv_after_draw(struct radv_cmd_buffer *cmd_buffer)
       cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_VGT_STREAMOUT_SYNC;
    }
 
-   radv_cmd_buffer_after_draw(cmd_buffer, RADV_CMD_FLAG_PS_PARTIAL_FLUSH);
+   radv_cmd_buffer_after_draw(cmd_buffer, RADV_CMD_FLAG_PS_PARTIAL_FLUSH, dgc);
 }
 
 VKAPI_ATTR void VKAPI_CALL
@@ -9187,11 +9188,11 @@ radv_CmdDraw(VkCommandBuffer commandBuffer, uint32_t 
vertexCount, uint32_t insta
    info.indirect = NULL;
    info.indexed = false;
 
-   if (!radv_before_draw(cmd_buffer, &info, 1))
+   if (!radv_before_draw(cmd_buffer, &info, 1, false))
       return;
    const VkMultiDrawInfoEXT minfo = {firstVertex, vertexCount};
    radv_emit_direct_draw_packets(cmd_buffer, &info, 1, &minfo, 0, 0);
-   radv_after_draw(cmd_buffer);
+   radv_after_draw(cmd_buffer, false);
 }
 
 VKAPI_ATTR void VKAPI_CALL
@@ -9211,10 +9212,10 @@ radv_CmdDrawMultiEXT(VkCommandBuffer commandBuffer, 
uint32_t drawCount, const Vk
    info.indirect = NULL;
    info.indexed = false;
 
-   if (!radv_before_draw(cmd_buffer, &info, drawCount))
+   if (!radv_before_draw(cmd_buffer, &info, drawCount, false))
       return;
    radv_emit_direct_draw_packets(cmd_buffer, &info, drawCount, pVertexInfo, 0, 
stride);
-   radv_after_draw(cmd_buffer);
+   radv_after_draw(cmd_buffer, false);
 }
 
 VKAPI_ATTR void VKAPI_CALL
@@ -9231,11 +9232,11 @@ radv_CmdDrawIndexed(VkCommandBuffer commandBuffer, 
uint32_t indexCount, uint32_t
    info.strmout_buffer = NULL;
    info.indirect = NULL;
 
-   if (!radv_before_draw(cmd_buffer, &info, 1))
+   if (!radv_before_draw(cmd_buffer, &info, 1, false))
       return;
    const VkMultiDrawIndexedInfoEXT minfo = {firstIndex, indexCount, 
vertexOffset};
    radv_emit_draw_packets_indexed(cmd_buffer, &info, 1, &minfo, 0, NULL);
-   radv_after_draw(cmd_buffer);
+   radv_after_draw(cmd_buffer, false);
 }
 
 VKAPI_ATTR void VKAPI_CALL
@@ -9257,10 +9258,10 @@ radv_CmdDrawMultiIndexedEXT(VkCommandBuffer 
commandBuffer, uint32_t drawCount,
    info.strmout_buffer = NULL;
    info.indirect = NULL;
 
-   if (!radv_before_draw(cmd_buffer, &info, drawCount))
+   if (!radv_before_draw(cmd_buffer, &info, drawCount, false))
       return;
    radv_emit_draw_packets_indexed(cmd_buffer, &info, drawCount, pIndexInfo, 
stride, pVertexOffset);
-   radv_after_draw(cmd_buffer);
+   radv_after_draw(cmd_buffer, false);
 }
 
 VKAPI_ATTR void VKAPI_CALL
@@ -9280,10 +9281,10 @@ radv_CmdDrawIndirect(VkCommandBuffer commandBuffer, 
VkBuffer _buffer, VkDeviceSi
    info.indexed = false;
    info.instance_count = 0;
 
-   if (!radv_before_draw(cmd_buffer, &info, 1))
+   if (!radv_before_draw(cmd_buffer, &info, 1, false))
       return;
    radv_emit_indirect_draw_packets(cmd_buffer, &info);
-   radv_after_draw(cmd_buffer);
+   radv_after_draw(cmd_buffer, false);
 }
 
 VKAPI_ATTR void VKAPI_CALL
@@ -9303,10 +9304,10 @@ radv_CmdDrawIndexedIndirect(VkCommandBuffer 
commandBuffer, VkBuffer _buffer, VkD
    info.strmout_buffer = NULL;
    info.instance_count = 0;
 
-   if (!radv_before_draw(cmd_buffer, &info, 1))
+   if (!radv_before_draw(cmd_buffer, &info, 1, false))
       return;
    radv_emit_indirect_draw_packets(cmd_buffer, &info);
-   radv_after_draw(cmd_buffer);
+   radv_after_draw(cmd_buffer, false);
 }
 
 VKAPI_ATTR void VKAPI_CALL
@@ -9328,10 +9329,10 @@ radv_CmdDrawIndirectCount(VkCommandBuffer 
commandBuffer, VkBuffer _buffer, VkDev
    info.indexed = false;
    info.instance_count = 0;
 
-   if (!radv_before_draw(cmd_buffer, &info, 1))
+   if (!radv_before_draw(cmd_buffer, &info, 1, false))
       return;
    radv_emit_indirect_draw_packets(cmd_buffer, &info);
-   radv_after_draw(cmd_buffer);
+   radv_after_draw(cmd_buffer, false);
 }
 
 VKAPI_ATTR void VKAPI_CALL
@@ -9354,10 +9355,10 @@ radv_CmdDrawIndexedIndirectCount(VkCommandBuffer 
commandBuffer, VkBuffer _buffer
    info.strmout_buffer = NULL;
    info.instance_count = 0;
 
-   if (!radv_before_draw(cmd_buffer, &info, 1))
+   if (!radv_before_draw(cmd_buffer, &info, 1, false))
       return;
    radv_emit_indirect_draw_packets(cmd_buffer, &info);
-   radv_after_draw(cmd_buffer);
+   radv_after_draw(cmd_buffer, false);
 }
 
 VKAPI_ATTR void VKAPI_CALL
@@ -9384,7 +9385,7 @@ radv_CmdDrawMeshTasksEXT(VkCommandBuffer commandBuffer, 
uint32_t x, uint32_t y,
       radv_emit_direct_mesh_draw_packet(cmd_buffer, x, y, z);
    }
 
-   radv_after_draw(cmd_buffer);
+   radv_after_draw(cmd_buffer, false);
 }
 
 VKAPI_ATTR void VKAPI_CALL
@@ -9417,7 +9418,7 @@ radv_CmdDrawMeshTasksIndirectEXT(VkCommandBuffer 
commandBuffer, VkBuffer _buffer
       radv_emit_indirect_mesh_draw_packets(cmd_buffer, &info);
    }
 
-   radv_after_draw(cmd_buffer);
+   radv_after_draw(cmd_buffer, false);
 }
 
 VKAPI_ATTR void VKAPI_CALL
@@ -9451,7 +9452,7 @@ radv_CmdDrawMeshTasksIndirectCountEXT(VkCommandBuffer 
commandBuffer, VkBuffer _b
       radv_emit_indirect_mesh_draw_packets(cmd_buffer, &info);
    }
 
-   radv_after_draw(cmd_buffer);
+   radv_after_draw(cmd_buffer, false);
 }
 
 /* TODO: Use these functions with the normal dispatch path. */
@@ -9491,7 +9492,7 @@ radv_CmdExecuteGeneratedCommandsNV(VkCommandBuffer 
commandBuffer, VkBool32 isPre
       info.indexed = layout->indexed;
       info.instance_count = 0;
 
-      if (!radv_before_draw(cmd_buffer, &info, 1))
+      if (!radv_before_draw(cmd_buffer, &info, 1, true))
          return;
    }
 
@@ -9547,7 +9548,7 @@ radv_CmdExecuteGeneratedCommandsNV(VkCommandBuffer 
commandBuffer, VkBool32 isPre
       cmd_buffer->state.last_first_instance = -1;
       cmd_buffer->state.last_drawid = -1;
 
-      radv_after_draw(cmd_buffer);
+      radv_after_draw(cmd_buffer, true);
    }
 }
 
@@ -9777,7 +9778,7 @@ radv_dispatch(struct radv_cmd_buffer *cmd_buffer, const 
struct radv_dispatch_inf
    if (compute_shader->info.cs.regalloc_hang_bug)
       cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_CS_PARTIAL_FLUSH;
 
-   radv_cmd_buffer_after_draw(cmd_buffer, RADV_CMD_FLAG_CS_PARTIAL_FLUSH);
+   radv_cmd_buffer_after_draw(cmd_buffer, RADV_CMD_FLAG_CS_PARTIAL_FLUSH, 
false);
 }
 
 static void
@@ -9825,7 +9826,7 @@ radv_dgc_after_dispatch(struct radv_cmd_buffer 
*cmd_buffer)
    if (compute_shader->info.cs.regalloc_hang_bug)
       cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_CS_PARTIAL_FLUSH;
 
-   radv_cmd_buffer_after_draw(cmd_buffer, RADV_CMD_FLAG_CS_PARTIAL_FLUSH);
+   radv_cmd_buffer_after_draw(cmd_buffer, RADV_CMD_FLAG_CS_PARTIAL_FLUSH, 
true);
 }
 
 void
@@ -11070,12 +11071,12 @@ radv_CmdDrawIndirectByteCountEXT(VkCommandBuffer 
commandBuffer, uint32_t instanc
    info.indexed = false;
    info.indirect = NULL;
 
-   if (!radv_before_draw(cmd_buffer, &info, 1))
+   if (!radv_before_draw(cmd_buffer, &info, 1, false))
       return;
    struct VkMultiDrawInfoEXT minfo = {0, 0};
    radv_emit_strmout_buffer(cmd_buffer, &info);
    radv_emit_direct_draw_packets(cmd_buffer, &info, 1, &minfo, 
S_0287F0_USE_OPAQUE(1), 0);
-   radv_after_draw(cmd_buffer);
+   radv_after_draw(cmd_buffer, false);
 }
 
 /* VK_AMD_buffer_marker */

Reply via email to