turnip: add cmd_buffer tracepoint
authorChia-I Wu <olvaffe@gmail.com>
Tue, 23 Aug 2022 23:37:28 +0000 (16:37 -0700)
committerMarge Bot <emma+marge@anholt.net>
Thu, 25 Aug 2022 21:00:14 +0000 (21:00 +0000)
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
src/freedreno/vulkan/tu_perfetto.cc
src/freedreno/vulkan/tu_tracepoints.py

index fa1e8ec..7fa63aa 100644 (file)
@@ -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);
index de67ed8..5334e09 100644 (file)
@@ -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)
index e659270..12654cc 100644 (file)
@@ -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'),