From a68dcc5de34827e4e48a62d7591d490a50ab6e38 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Thu, 5 Dec 2024 09:46:16 -0800 Subject: [PATCH] panvk: define more utrace tracepoints Define tracepoints for these higl-level api calls - meta - render - dispatch and dispatch_indirect - barrier and these low-level cs cmds - sync_wait Signed-off-by: Chia-I Wu Reviewed-by: Christoph Pillmayer Part-of: --- src/panfrost/vulkan/panvk_tracepoints.py | 171 +++++++++++++++++++ src/panfrost/vulkan/panvk_utrace_perfetto.cc | 11 ++ src/panfrost/vulkan/panvk_utrace_perfetto.h | 6 + 3 files changed, 188 insertions(+) diff --git a/src/panfrost/vulkan/panvk_tracepoints.py b/src/panfrost/vulkan/panvk_tracepoints.py index 1225beee5ce..079f320078d 100644 --- a/src/panfrost/vulkan/panvk_tracepoints.py +++ b/src/panfrost/vulkan/panvk_tracepoints.py @@ -24,8 +24,11 @@ from u_trace import TracepointArgStruct as ArgStruct # noqa: E402 from u_trace import utrace_generate, utrace_generate_perfetto_utils # noqa: E402 Header('vulkan/vulkan_core.h', scope=HeaderScope.HEADER) +ForwardDecl('struct pan_fb_info') ForwardDecl('struct panvk_device') +Header('pan_desc.h', scope=HeaderScope.SOURCE) + def begin_end_tp(name, args=[], tp_struct=None): Tracepoint( @@ -42,6 +45,8 @@ def begin_end_tp(name, args=[], tp_struct=None): def define_tracepoints(): + # high-level tracepoints for API calls + begin_end_tp( 'cmdbuf', args=[ @@ -53,6 +58,172 @@ def define_tracepoints(): ], ) + begin_end_tp('meta') + + begin_end_tp( + 'render', + args=[ + Arg( + type='VkRenderingFlags', + var='flags', + c_format='0x%x', + ), + ArgStruct(type='const struct pan_fb_info *', var='fb'), + ], + tp_struct=[ + Arg( + type='uint16_t', + name='width', + var='fb->width', + c_format='%u', + ), + Arg( + type='uint16_t', + name='height', + var='fb->height', + c_format='%u', + ), + Arg( + type='uint8_t', + name='nr_samples', + var='fb->nr_samples', + c_format='%u', + ), + Arg( + type='uint8_t', + name='rt_count', + var='fb->rt_count', + c_format='%u', + ), + Arg( + type='uint16_t', + name='rt0_format', + var='fb->rts[0].view ? fb->rts[0].view->format : PIPE_FORMAT_NONE', + c_format='%s', + to_prim_type='util_format_description((enum pipe_format){})->name', + ), + Arg( + type='uint16_t', + name='zs_format', + var='fb->zs.view.zs ? fb->zs.view.zs->format : PIPE_FORMAT_NONE', + c_format='%s', + to_prim_type='util_format_description((enum pipe_format){})->name', + ), + Arg( + type='uint16_t', + name='s_format', + var='fb->zs.view.s ? fb->zs.view.s->format : PIPE_FORMAT_NONE', + c_format='%s', + to_prim_type='util_format_description((enum pipe_format){})->name', + ), + Arg( + type='uint32_t', + name='tile_size', + var='fb->tile_size', + c_format='%u', + ), + ], + ) + + begin_end_tp( + 'dispatch', + args=[ + Arg( + type='uint16_t', + var='base_group_x', + c_format='%u', + ), + Arg( + type='uint16_t', + var='base_group_y', + c_format='%u', + ), + Arg( + type='uint16_t', + var='base_group_z', + c_format='%u', + ), + Arg( + type='uint16_t', + var='group_count_x', + c_format='%u', + ), + Arg( + type='uint16_t', + var='group_count_y', + c_format='%u', + ), + Arg( + type='uint16_t', + var='group_count_z', + c_format='%u', + ), + Arg( + type='uint16_t', + var='group_size_x', + c_format='%u', + ), + Arg( + type='uint16_t', + var='group_size_y', + c_format='%u', + ), + Arg( + type='uint16_t', + var='group_size_z', + c_format='%u', + ), + ], + ) + + begin_end_tp( + 'dispatch_indirect', + args=[ + ArgStruct( + type='VkDispatchIndirectCommand', + var='group_count', + is_indirect=True, + c_format='%ux%ux%u', + fields=['x', 'y', 'z'], + ), + ], + ) + + begin_end_tp( + 'barrier', + args=[ + Arg( + type='uint8_t', + var='sb_wait', + c_format='0x%x', + ), + Arg( + type='uint8_t', + var='sync_wait', + c_format='0x%x', + ), + Arg( + type='uint8_t', + var='l2', + c_format='%u', + ), + Arg( + type='uint8_t', + var='lsc', + c_format='%u', + ), + Arg( + type='uint8_t', + var='other', + c_format='%u', + ), + ], + ) + + # low-level tracepoints for CS commands + + begin_end_tp('sync_wait') + def generate_code(): utrace_generate( diff --git a/src/panfrost/vulkan/panvk_utrace_perfetto.cc b/src/panfrost/vulkan/panvk_utrace_perfetto.cc index 9dfa87e5278..ba175d7a313 100644 --- a/src/panfrost/vulkan/panvk_utrace_perfetto.cc +++ b/src/panfrost/vulkan/panvk_utrace_perfetto.cc @@ -39,6 +39,11 @@ get_stage_name(enum panvk_utrace_perfetto_stage stage) case PANVK_UTRACE_PERFETTO_STAGE_##x: \ return #x CASE(CMDBUF); + CASE(META); + CASE(RENDER); + CASE(DISPATCH); + CASE(BARRIER); + CASE(SYNC_WAIT); #undef CASE default: unreachable("bad stage"); @@ -239,6 +244,12 @@ panvk_utrace_perfetto_end_event( * (traceq) for processing. These callbacks are called from traceq. */ PANVK_UTRACE_PERFETTO_PROCESS_EVENT(cmdbuf, CMDBUF) +PANVK_UTRACE_PERFETTO_PROCESS_EVENT(meta, META) +PANVK_UTRACE_PERFETTO_PROCESS_EVENT(render, RENDER) +PANVK_UTRACE_PERFETTO_PROCESS_EVENT(dispatch, DISPATCH) +PANVK_UTRACE_PERFETTO_PROCESS_EVENT(dispatch_indirect, DISPATCH) +PANVK_UTRACE_PERFETTO_PROCESS_EVENT(barrier, BARRIER) +PANVK_UTRACE_PERFETTO_PROCESS_EVENT(sync_wait, SYNC_WAIT) static uint32_t get_gpu_clock_id(void) diff --git a/src/panfrost/vulkan/panvk_utrace_perfetto.h b/src/panfrost/vulkan/panvk_utrace_perfetto.h index f9a6222efad..67b7699896a 100644 --- a/src/panfrost/vulkan/panvk_utrace_perfetto.h +++ b/src/panfrost/vulkan/panvk_utrace_perfetto.h @@ -20,6 +20,12 @@ struct panvk_device; enum panvk_utrace_perfetto_stage { PANVK_UTRACE_PERFETTO_STAGE_CMDBUF, + PANVK_UTRACE_PERFETTO_STAGE_META, + PANVK_UTRACE_PERFETTO_STAGE_RENDER, + PANVK_UTRACE_PERFETTO_STAGE_DISPATCH, + PANVK_UTRACE_PERFETTO_STAGE_BARRIER, + PANVK_UTRACE_PERFETTO_STAGE_SYNC_WAIT, + PANVK_UTRACE_PERFETTO_STAGE_COUNT, };