Mesa (main): radv: reduce SQTT traffic when instruction timing is disabled

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Sep 15 09:11:25 UTC 2021


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

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Tue Sep 14 15:47:39 2021 +0200

radv: reduce SQTT traffic when instruction timing is disabled

Some tokens can be excluded without instruction timing. This reduces
RGP capture sizes significantly.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12853>

---

 src/amd/vulkan/layers/radv_sqtt_layer.c | 14 ++++----------
 src/amd/vulkan/radv_private.h           |  2 ++
 src/amd/vulkan/radv_sqtt.c              | 22 ++++++++++++++++++----
 3 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/src/amd/vulkan/layers/radv_sqtt_layer.c b/src/amd/vulkan/layers/radv_sqtt_layer.c
index 818caca9444..60219e500b9 100644
--- a/src/amd/vulkan/layers/radv_sqtt_layer.c
+++ b/src/amd/vulkan/layers/radv_sqtt_layer.c
@@ -624,12 +624,6 @@ sqtt_CmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPoo
 
 #define API_MARKER(cmd_name, ...) API_MARKER_ALIAS(cmd_name, cmd_name, __VA_ARGS__);
 
-static bool
-radv_sqtt_dump_pipeline()
-{
-   return getenv("RADV_THREAD_TRACE_PIPELINE");
-}
-
 void
 sqtt_CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint,
                      VkPipeline _pipeline)
@@ -638,7 +632,7 @@ sqtt_CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipeline
 
    API_MARKER(BindPipeline, commandBuffer, pipelineBindPoint, _pipeline);
 
-   if (radv_sqtt_dump_pipeline())
+   if (radv_is_instruction_timing_enabled())
       radv_describe_pipeline_bind(cmd_buffer, pipelineBindPoint, pipeline);
 }
 
@@ -1020,7 +1014,7 @@ sqtt_CreateGraphicsPipelines(VkDevice _device, VkPipelineCache pipelineCache, ui
    if (result != VK_SUCCESS)
       return result;
 
-   if (radv_sqtt_dump_pipeline()) {
+   if (radv_is_instruction_timing_enabled()) {
       for (unsigned i = 0; i < count; i++) {
          RADV_FROM_HANDLE(radv_pipeline, pipeline, pPipelines[i]);
 
@@ -1056,7 +1050,7 @@ sqtt_CreateComputePipelines(VkDevice _device, VkPipelineCache pipelineCache, uin
    if (result != VK_SUCCESS)
       return result;
 
-   if (radv_sqtt_dump_pipeline()) {
+   if (radv_is_instruction_timing_enabled()) {
       for (unsigned i = 0; i < count; i++) {
          RADV_FROM_HANDLE(radv_pipeline, pipeline, pPipelines[i]);
 
@@ -1089,7 +1083,7 @@ sqtt_DestroyPipeline(VkDevice _device, VkPipeline _pipeline,
    if (!_pipeline)
       return;
 
-   if (radv_sqtt_dump_pipeline())
+   if (radv_is_instruction_timing_enabled())
       radv_unregister_pipeline(device, pipeline);
 
    radv_DestroyPipeline(_device, _pipeline, pAllocator);
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index 7f09157e2d3..bddba22e840 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -2572,6 +2572,8 @@ bool radv_end_thread_trace(struct radv_queue *queue);
 bool radv_get_thread_trace(struct radv_queue *queue, struct ac_thread_trace *thread_trace);
 void radv_emit_thread_trace_userdata(const struct radv_device *device, struct radeon_cmdbuf *cs,
                                      const void *data, uint32_t num_dwords);
+bool radv_is_instruction_timing_enabled(void);
+
 /* radv_sqtt_layer_.c */
 struct radv_barrier_data {
    union {
diff --git a/src/amd/vulkan/radv_sqtt.c b/src/amd/vulkan/radv_sqtt.c
index bd874cb9d21..4225cc65569 100644
--- a/src/amd/vulkan/radv_sqtt.c
+++ b/src/amd/vulkan/radv_sqtt.c
@@ -29,6 +29,12 @@
 
 #define SQTT_BUFFER_ALIGN_SHIFT 12
 
+bool
+radv_is_instruction_timing_enabled(void)
+{
+   return getenv("RADV_THREAD_TRACE_PIPELINE");
+}
+
 static bool
 radv_se_is_disabled(struct radv_device *device, unsigned se)
 {
@@ -77,10 +83,18 @@ radv_emit_thread_trace_start(struct radv_device *device, struct radeon_cmdbuf *c
             V_008D18_REG_INCLUDE_SQDEC | V_008D18_REG_INCLUDE_SHDEC | V_008D18_REG_INCLUDE_GFXUDEC |
             V_008D18_REG_INCLUDE_COMP | V_008D18_REG_INCLUDE_CONTEXT | V_008D18_REG_INCLUDE_CONFIG);
 
-         /* Performance counters with SQTT are considered
-          * deprecated.
-          */
-         thread_trace_token_mask |= S_008D18_TOKEN_EXCLUDE(V_008D18_TOKEN_EXCLUDE_PERF);
+         /* Performance counters with SQTT are considered deprecated. */
+         uint32_t token_exclude = V_008D18_TOKEN_EXCLUDE_PERF;
+
+         if (!radv_is_instruction_timing_enabled()) {
+            /* Reduce SQTT traffic when instruction timing isn't enabled. */
+            token_exclude |= V_008D18_TOKEN_EXCLUDE_VMEMEXEC |
+                             V_008D18_TOKEN_EXCLUDE_ALUEXEC |
+                             V_008D18_TOKEN_EXCLUDE_VALUINST |
+                             V_008D18_TOKEN_EXCLUDE_IMMEDIATE |
+                             V_008D18_TOKEN_EXCLUDE_INST;
+         }
+         thread_trace_token_mask |= S_008D18_TOKEN_EXCLUDE(token_exclude);
 
          radeon_set_privileged_config_reg(cs, R_008D18_SQ_THREAD_TRACE_TOKEN_MASK,
                                           thread_trace_token_mask);



More information about the mesa-commit mailing list