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 <olvaffe@gmail.com>
Reviewed-by: Christoph Pillmayer <christoph.pillmayer@arm.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32693>
This commit is contained in:
Chia-I Wu
2024-12-05 09:46:16 -08:00
committed by Marge Bot
parent 356f08aeab
commit a68dcc5de3
3 changed files with 188 additions and 0 deletions
+171
View File
@@ -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(
@@ -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)
@@ -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,
};