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'),

Reply via email to