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