Module: Mesa Branch: main Commit: 4b37439764e941ab867d7ea88d30479fe9aa66f6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4b37439764e941ab867d7ea88d30479fe9aa66f6
Author: Chia-I Wu <[email protected]> Date: Tue Aug 23 16:37:28 2022 -0700 turnip: add cmd_buffer tracepoint It is only used for primary cmd buffers for the moment. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18238> --- src/freedreno/vulkan/tu_cmd_buffer.c | 5 +++++ src/freedreno/vulkan/tu_perfetto.cc | 3 +++ src/freedreno/vulkan/tu_tracepoints.py | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index fa1e8ec78a9..7fa63aad0ef 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -1822,6 +1822,8 @@ 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); + switch (cmd_buffer->queue_family_index) { case TU_QUEUE_GENERAL: tu6_init_hw(cmd_buffer, &cmd_buffer->cs); @@ -2512,6 +2514,9 @@ tu_EndCommandBuffer(VkCommandBuffer commandBuffer) tu_emit_cache_flush(cmd_buffer, &cmd_buffer->cs); } + if (cmd_buffer->vk.level == VK_COMMAND_BUFFER_LEVEL_PRIMARY) + trace_end_cmd_buffer(&cmd_buffer->trace, &cmd_buffer->cs, cmd_buffer); + tu_cs_end(&cmd_buffer->cs); tu_cs_end(&cmd_buffer->draw_cs); tu_cs_end(&cmd_buffer->draw_epilogue_cs); diff --git a/src/freedreno/vulkan/tu_perfetto.cc b/src/freedreno/vulkan/tu_perfetto.cc index de67ed82718..5334e095db4 100644 --- a/src/freedreno/vulkan/tu_perfetto.cc +++ b/src/freedreno/vulkan/tu_perfetto.cc @@ -37,6 +37,7 @@ enum { * Render-stage id's */ enum tu_stage_id { + CMD_BUFFER_STAGE_ID, RENDER_PASS_STAGE_ID, BINNING_STAGE_ID, GMEM_STAGE_ID, @@ -62,6 +63,7 @@ static const struct { const char *name; const char *desc; } stages[] = { + [CMD_BUFFER_STAGE_ID] = { "Command Buffer" }, [RENDER_PASS_STAGE_ID] = { "Render Pass" }, [BINNING_STAGE_ID] = { "Binning", "Perform Visibility pass and determine target bins" }, [GMEM_STAGE_ID] = { "GMEM", "Rendering to GMEM" }, @@ -419,6 +421,7 @@ tu_end_##event_name(struct tu_device *dev, uint64_t ts_ns, \ (trace_payload_as_extra_func) &trace_payload_as_extra_end_##event_name); \ } +CREATE_EVENT_CALLBACK(cmd_buffer, CMD_BUFFER_STAGE_ID) CREATE_EVENT_CALLBACK(render_pass, RENDER_PASS_STAGE_ID) CREATE_EVENT_CALLBACK(binning_ib, BINNING_STAGE_ID) CREATE_EVENT_CALLBACK(draw_ib_gmem, GMEM_STAGE_ID) diff --git a/src/freedreno/vulkan/tu_tracepoints.py b/src/freedreno/vulkan/tu_tracepoints.py index e659270657c..12654ccdaa4 100644 --- a/src/freedreno/vulkan/tu_tracepoints.py +++ b/src/freedreno/vulkan/tu_tracepoints.py @@ -24,11 +24,14 @@ from u_trace import TracepointArgStruct as ArgStruct from u_trace import utrace_generate from u_trace import utrace_generate_perfetto_utils +Header('vk_enum_to_str.h', scope=HeaderScope.SOURCE|HeaderScope.PERFETTO) Header('vk_format.h') +Header('tu_cmd_buffer.h', scope=HeaderScope.SOURCE) Header('tu_device.h', scope=HeaderScope.SOURCE) # we can't use tu_common.h because it includes ir3 headers which are not # compatible with C++ +ForwardDecl('struct tu_cmd_buffer') ForwardDecl('struct tu_device') ForwardDecl('struct tu_framebuffer') ForwardDecl('struct tu_tiling_config') @@ -56,6 +59,10 @@ def begin_end_tp(name, args=[], tp_struct=None, tp_print=None, tp_perfetto='tu_end_{0}'.format(name), tp_print=tp_print) +begin_end_tp('cmd_buffer', + args=[ArgStruct(type='const struct tu_cmd_buffer *', var='cmd')], + tp_struct=[Arg(type='VkCommandBufferLevel', name='level', var='cmd->vk.level', c_format='%s', to_prim_type='vk_CommandBufferLevel_to_str({})'), + Arg(type='uint8_t', name='render_pass_continue', var='!!(cmd->usage_flags & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)', c_format='%u')]) begin_end_tp('render_pass', args=[ArgStruct(type='const struct tu_framebuffer *', var='fb'),
