From 851a8a481bc8c04d6ad0778f70d7835fbe866876 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 27 Nov 2024 10:47:09 +0100 Subject: [PATCH] vulkan: add MESA_VK_TRACE_PER_SUBMIT To capture RGP per-submit for compute-only workloads. Other capture tools like RMV are not covered here. Signed-off-by: Samuel Pitoiset Part-of: --- docs/envvars.rst | 7 +++++++ src/vulkan/runtime/vk_instance.c | 7 +++++-- src/vulkan/runtime/vk_instance.h | 3 +++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/docs/envvars.rst b/docs/envvars.rst index 703d8f17393..ca46538280d 100644 --- a/docs/envvars.rst +++ b/docs/envvars.rst @@ -365,14 +365,21 @@ Core Mesa environment variables - Creating RMV captures requires the ``scripts/setup.sh`` script in the Radeon Developer Tools folder to be run beforehand +.. envvar:: MESA_VK_TRACE_PER_SUBMIT + + Enables per-submit capture for compute-only workload. Disabled by default + and only valid with MESA_VK_TRACE=rgp. + .. envvar:: MESA_VK_TRACE_FRAME Specifies a frame index at which a trace capture is automatically triggered. + Ignored when MESA_VK_TRACE_PER_SUBMIT is enabled. .. envvar:: MESA_VK_TRACE_TRIGGER Specifies a trigger file. Creating the file triggers the capture. (e.g. ``export MESA_VK_TRACE_TRIGGER=/tmp/trigger`` and then ``touch /tmp/trigger``) + Ignored when MESA_VK_TRACE_PER_SUBMIT is enabled. .. envvar:: MESA_LOADER_DRIVER_OVERRIDE diff --git a/src/vulkan/runtime/vk_instance.c b/src/vulkan/runtime/vk_instance.c index 186452d16a4..ff72f595ec3 100644 --- a/src/vulkan/runtime/vk_instance.c +++ b/src/vulkan/runtime/vk_instance.c @@ -200,8 +200,11 @@ vk_instance_init(struct vk_instance *instance, } instance->trace_mode = parse_debug_string(getenv("MESA_VK_TRACE"), trace_options); - instance->trace_frame = (uint32_t)debug_get_num_option("MESA_VK_TRACE_FRAME", 0xFFFFFFFF); - instance->trace_trigger_file = secure_getenv("MESA_VK_TRACE_TRIGGER"); + instance->trace_per_submit = debug_get_bool_option("MESA_VK_TRACE_PER_SUBMIT", false); + if (!instance->trace_per_submit) { + instance->trace_frame = (uint32_t)debug_get_num_option("MESA_VK_TRACE_FRAME", 0xFFFFFFFF); + instance->trace_trigger_file = secure_getenv("MESA_VK_TRACE_TRIGGER"); + } #if !VK_LITE_RUNTIME_INSTANCE glsl_type_singleton_init_or_ref(); diff --git a/src/vulkan/runtime/vk_instance.h b/src/vulkan/runtime/vk_instance.h index 2eb44ff3923..1ec1fea768e 100644 --- a/src/vulkan/runtime/vk_instance.h +++ b/src/vulkan/runtime/vk_instance.h @@ -173,6 +173,9 @@ struct vk_instance { uint32_t trace_frame; char *trace_trigger_file; + + /** Whether the capture mode is per-submit. */ + bool trace_per_submit; }; VK_DEFINE_HANDLE_CASTS(vk_instance, base, VkInstance,