diff --git a/src/freedreno/ir3/ir3_compiler.c b/src/freedreno/ir3/ir3_compiler.c index 395a359c77c..24a8e9ebf6b 100644 --- a/src/freedreno/ir3/ir3_compiler.c +++ b/src/freedreno/ir3/ir3_compiler.c @@ -362,3 +362,9 @@ ir3_get_compiler_options(struct ir3_compiler *compiler) { return &compiler->nir_options; } + +const char * +ir3_shader_debug_as_string() +{ + return debug_dump_flags(shader_debug_options, ir3_shader_debug); +} diff --git a/src/freedreno/ir3/ir3_compiler.h b/src/freedreno/ir3/ir3_compiler.h index d64d646d154..569ba90c926 100644 --- a/src/freedreno/ir3/ir3_compiler.h +++ b/src/freedreno/ir3/ir3_compiler.h @@ -428,6 +428,10 @@ ir3_shader_debug_hash_key() IR3_DBG_SHADER_INTERNAL | IR3_DBG_SCHEDMSGS | IR3_DBG_RAMSGS)); } +/* Returns a pointer to internal static tmp buffer. */ +const char * +ir3_shader_debug_as_string(void); + ENDC; #endif /* IR3_COMPILER_H_ */ diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index a4202e16a94..b955e9138e2 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -2678,7 +2678,11 @@ tu_BeginCommandBuffer(VkCommandBuffer commandBuffer, /* setup initial configuration into command buffer */ if (cmd_buffer->vk.level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) { - trace_start_cmd_buffer(&cmd_buffer->trace, &cmd_buffer->cs, cmd_buffer); + if (u_trace_enabled(&cmd_buffer->device->trace_context)) { + trace_start_cmd_buffer(&cmd_buffer->trace, &cmd_buffer->cs, + cmd_buffer, tu_env_debug_as_string(), + ir3_shader_debug_as_string()); + } switch (cmd_buffer->queue_family_index) { case TU_QUEUE_GENERAL: @@ -2691,8 +2695,13 @@ tu_BeginCommandBuffer(VkCommandBuffer commandBuffer, const bool pass_continue = pBeginInfo->flags & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT; - trace_start_cmd_buffer(&cmd_buffer->trace, - pass_continue ? &cmd_buffer->draw_cs : &cmd_buffer->cs, cmd_buffer); + if (u_trace_enabled(&cmd_buffer->device->trace_context)) { + trace_start_cmd_buffer( + &cmd_buffer->trace, + pass_continue ? &cmd_buffer->draw_cs : &cmd_buffer->cs, + cmd_buffer, tu_env_debug_as_string(), + ir3_shader_debug_as_string()); + } assert(pBeginInfo->pInheritanceInfo); diff --git a/src/freedreno/vulkan/tu_tracepoints.py b/src/freedreno/vulkan/tu_tracepoints.py index ed0a369dbb9..287e251d931 100644 --- a/src/freedreno/vulkan/tu_tracepoints.py +++ b/src/freedreno/vulkan/tu_tracepoints.py @@ -69,7 +69,9 @@ def begin_end_tp(name, args=[], tp_struct=None, tp_print=None, tp_markers='tu_cs_trace_end' if marker_tp else None) begin_end_tp('cmd_buffer', - args=[ArgStruct(type='const struct tu_cmd_buffer *', var='cmd')], + args=[ArgStruct(type='const struct tu_cmd_buffer *', var='cmd'), + Arg(type='str', var='TUdebugFlags', c_format='%s', length_arg='96', copy_func='strncpy'), + Arg(type='str', var='IR3debugFlags', c_format='%s', length_arg='96', copy_func='strncpy')], tp_struct=[Arg(type='const char *', name='appName', var='cmd->device->instance->vk.app_info.app_name', c_format='%s'), Arg(type='const char *', name='engineName', var='cmd->device->instance->vk.app_info.engine_name', c_format='%s'), Arg(type='VkCommandBufferLevel', name='level', var='cmd->vk.level', c_format='%s', to_prim_type='vk_CommandBufferLevel_to_str({})'), diff --git a/src/freedreno/vulkan/tu_util.cc b/src/freedreno/vulkan/tu_util.cc index 3c5dd35f58a..a45cdce3ba8 100644 --- a/src/freedreno/vulkan/tu_util.cc +++ b/src/freedreno/vulkan/tu_util.cc @@ -153,6 +153,16 @@ tu_env_init(void) call_once(&once, tu_env_init_once); } +const char * +tu_env_debug_as_string(void) +{ + static thread_local char debug_string[96]; + dump_debug_control_string(debug_string, sizeof(debug_string), + tu_debug_options, + tu_env.debug.load(std::memory_order_acquire)); + return debug_string; +} + void PRINTFLIKE(3, 4) __tu_finishme(const char *file, int line, const char *format, ...) { diff --git a/src/freedreno/vulkan/tu_util.h b/src/freedreno/vulkan/tu_util.h index fca0020bbc2..1a5e09c0660 100644 --- a/src/freedreno/vulkan/tu_util.h +++ b/src/freedreno/vulkan/tu_util.h @@ -82,6 +82,10 @@ extern struct tu_env tu_env; void tu_env_init(void); +/* Returns a pointer to the internal static tmp buffer, do not free. */ +const char * +tu_env_debug_as_string(void); + /* Whenever we generate an error, pass it through this function. Useful for * debugging, where we can break on it. Only call at error site, not when * propagating errors. Might be useful to plug in a stack trace here.