mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 09:18:04 +02:00
tu/perfetto: Attach VkCommandBuffer handles to the GPU events.
All of the GPU renderstage events show a command buffer id/name field in the UI (default 0/NULL), so let's get it filled with something useful. This will also be used by perfetto's trace processor for associating object names with cmdbuf executions. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22350>
This commit is contained in:
parent
7c130e5dcf
commit
131284b943
4 changed files with 27 additions and 20 deletions
|
|
@ -2305,7 +2305,7 @@ tu6_blit_image(struct tu_cmd_buffer *cmd,
|
|||
src_image->vk.format, info->srcSubresource.aspectMask);
|
||||
enum pipe_format dst_format = tu_aspects_to_plane(
|
||||
dst_image->vk.format, info->dstSubresource.aspectMask);
|
||||
trace_start_blit(&cmd->trace, cs,
|
||||
trace_start_blit(&cmd->trace, cs, cmd,
|
||||
ops == &r3d_ops<CHIP>,
|
||||
src_image->vk.format,
|
||||
dst_image->vk.format,
|
||||
|
|
@ -3539,7 +3539,7 @@ resolve_sysmem(struct tu_cmd_buffer *cmd,
|
|||
{
|
||||
const struct blit_ops *ops = &r2d_ops<CHIP>;
|
||||
|
||||
trace_start_sysmem_resolve(&cmd->trace, cs, vk_dst_format);
|
||||
trace_start_sysmem_resolve(&cmd->trace, cs, cmd, vk_dst_format);
|
||||
|
||||
enum pipe_format src_format = vk_format_to_pipe_format(vk_src_format);
|
||||
enum pipe_format dst_format = vk_format_to_pipe_format(vk_dst_format);
|
||||
|
|
@ -4028,7 +4028,7 @@ tu_clear_sysmem_attachments(struct tu_cmd_buffer *cmd,
|
|||
bool z_clear = false;
|
||||
bool s_clear = false;
|
||||
|
||||
trace_start_sysmem_clear_all(&cmd->trace, cs, mrt_count, rect_count);
|
||||
trace_start_sysmem_clear_all(&cmd->trace, cs, cmd, mrt_count, rect_count);
|
||||
|
||||
for (uint32_t i = 0; i < attachment_count; i++) {
|
||||
uint32_t a;
|
||||
|
|
@ -4294,7 +4294,7 @@ tu_emit_clear_gmem_attachment(struct tu_cmd_buffer *cmd,
|
|||
const struct tu_render_pass_attachment *att =
|
||||
&cmd->state.pass->attachments[attachment];
|
||||
|
||||
trace_start_gmem_clear(&cmd->trace, cs, att->format, att->samples);
|
||||
trace_start_gmem_clear(&cmd->trace, cs, cmd, att->format, att->samples);
|
||||
|
||||
tu_cs_emit_regs(cs,
|
||||
A6XX_RB_BLIT_GMEM_MSAA_CNTL(tu_msaa_samples(att->samples)));
|
||||
|
|
@ -4579,7 +4579,7 @@ tu_clear_attachments_generic(struct tu_cmd_buffer *cmd,
|
|||
if (a != VK_ATTACHMENT_UNUSED) {
|
||||
const struct tu_render_pass_attachment *att = &cmd->state.pass->attachments[a];
|
||||
const struct tu_image_view *iview = cmd->state.attachments[a];
|
||||
trace_start_generic_clear(&cmd->trace, cs, att->format,
|
||||
trace_start_generic_clear(&cmd->trace, cs, cmd, att->format,
|
||||
iview->view.ubwc_enabled, att->samples);
|
||||
for (unsigned j = 0; j < rectCount; j++) {
|
||||
tu7_clear_attachment_generic_single_rect(
|
||||
|
|
@ -4642,7 +4642,7 @@ clear_sysmem_attachment(struct tu_cmd_buffer *cmd,
|
|||
if (cmd->state.pass->attachments[a].samples > 1)
|
||||
ops = &r3d_ops<CHIP>;
|
||||
|
||||
trace_start_sysmem_clear(&cmd->trace, cs, vk_format, ops == &r3d_ops<CHIP>,
|
||||
trace_start_sysmem_clear(&cmd->trace, cs, cmd, vk_format, ops == &r3d_ops<CHIP>,
|
||||
cmd->state.pass->attachments[a].samples);
|
||||
|
||||
ops->setup(cmd, cs, format, format, clear_mask, 0, true, iview->view.ubwc_enabled,
|
||||
|
|
@ -4749,7 +4749,7 @@ tu7_generic_clear_attachment(struct tu_cmd_buffer *cmd,
|
|||
const VkClearValue *value = &cmd->state.clear_values[a];
|
||||
const struct tu_image_view *iview = cmd->state.attachments[a];
|
||||
|
||||
trace_start_generic_clear(&cmd->trace, cs, att->format,
|
||||
trace_start_generic_clear(&cmd->trace, cs, cmd, att->format,
|
||||
iview->view.ubwc_enabled, att->samples);
|
||||
|
||||
enum pipe_format format = vk_format_to_pipe_format(att->format);
|
||||
|
|
@ -5044,7 +5044,7 @@ tu_load_gmem_attachment(struct tu_cmd_buffer *cmd,
|
|||
if (!load_common && !load_stencil)
|
||||
return;
|
||||
|
||||
trace_start_gmem_load(&cmd->trace, cs, attachment->format, force_load);
|
||||
trace_start_gmem_load(&cmd->trace, cs, cmd, attachment->format, force_load);
|
||||
|
||||
/* If attachment will be cleared by vkCmdClearAttachments - it is likely
|
||||
* that it would be partially cleared, and since it is done by 2d blit
|
||||
|
|
@ -5442,7 +5442,7 @@ tu_store_gmem_attachment(struct tu_cmd_buffer *cmd,
|
|||
!resolve_d24s8_s8 &&
|
||||
(a == gmem_a || blit_can_resolve(dst->format));
|
||||
|
||||
trace_start_gmem_store(&cmd->trace, cs, dst->format, use_fast_path, unaligned);
|
||||
trace_start_gmem_store(&cmd->trace, cs, cmd, dst->format, use_fast_path, unaligned);
|
||||
|
||||
/* Unconditional store should happen only if attachment was cleared,
|
||||
* which could have happened either by load_op or via vkCmdClearAttachments.
|
||||
|
|
|
|||
|
|
@ -1992,7 +1992,7 @@ tu6_emit_binning_pass(struct tu_cmd_buffer *cmd, struct tu_cs *cs,
|
|||
tu_cs_emit_regs(cs,
|
||||
A6XX_SP_TP_WINDOW_OFFSET(.x = 0, .y = 0));
|
||||
|
||||
trace_start_binning_ib(&cmd->trace, cs);
|
||||
trace_start_binning_ib(&cmd->trace, cs, cmd);
|
||||
|
||||
/* emit IB to binning drawcmds: */
|
||||
tu_cs_emit_call(cs, &cmd->draw_cs);
|
||||
|
|
@ -2260,7 +2260,7 @@ tu_trace_start_render_pass(struct tu_cmd_buffer *cmd)
|
|||
max_samples = MAX2(max_samples, cmd->state.pass->subpasses[i].samples);
|
||||
}
|
||||
|
||||
trace_start_render_pass(&cmd->trace, &cmd->cs, cmd->state.framebuffer,
|
||||
trace_start_render_pass(&cmd->trace, &cmd->cs, cmd, cmd->state.framebuffer,
|
||||
cmd->state.tiling, max_samples, clear_cpp,
|
||||
load_cpp, store_cpp, has_depth, ubwc);
|
||||
}
|
||||
|
|
@ -2509,7 +2509,7 @@ tu6_render_tile(struct tu_cmd_buffer *cmd, struct tu_cs *cs,
|
|||
tu6_emit_tile_select<CHIP>(cmd, &cmd->cs, tile, fdm, fdm_offsets);
|
||||
tu_lrz_before_tile<CHIP>(cmd, &cmd->cs);
|
||||
|
||||
trace_start_draw_ib_gmem(&cmd->trace, &cmd->cs);
|
||||
trace_start_draw_ib_gmem(&cmd->trace, &cmd->cs, cmd);
|
||||
|
||||
/* Primitives that passed all tests are still counted in in each
|
||||
* tile even with HW binning beforehand. Do not permit it.
|
||||
|
|
@ -2981,7 +2981,7 @@ tu_cmd_render_sysmem(struct tu_cmd_buffer *cmd,
|
|||
|
||||
tu6_sysmem_render_begin<CHIP>(cmd, &cmd->cs, autotune_result);
|
||||
|
||||
trace_start_draw_ib_sysmem(&cmd->trace, &cmd->cs);
|
||||
trace_start_draw_ib_sysmem(&cmd->trace, &cmd->cs, cmd);
|
||||
|
||||
tu_cs_emit_call(&cmd->cs, &cmd->draw_cs);
|
||||
|
||||
|
|
@ -7691,7 +7691,7 @@ tu_dispatch(struct tu_cmd_buffer *cmd,
|
|||
}
|
||||
|
||||
if (info->indirect) {
|
||||
trace_start_compute_indirect(&cmd->trace, cs, info->unaligned);
|
||||
trace_start_compute_indirect(&cmd->trace, cs, cmd, info->unaligned);
|
||||
|
||||
if (info->unaligned) {
|
||||
tu_cs_emit_pkt7(cs, CP_RUN_OPENCL, 1);
|
||||
|
|
@ -7713,7 +7713,7 @@ tu_dispatch(struct tu_cmd_buffer *cmd,
|
|||
.offset = info->indirect,
|
||||
});
|
||||
} else {
|
||||
trace_start_compute(&cmd->trace, cs, info->indirect != 0,
|
||||
trace_start_compute(&cmd->trace, cs, cmd, info->indirect != 0,
|
||||
info->unaligned, local_size[0], local_size[1],
|
||||
local_size[2], info->blocks[0], info->blocks[1],
|
||||
info->blocks[2]);
|
||||
|
|
|
|||
|
|
@ -3644,10 +3644,10 @@ tu_CmdBeginDebugUtilsLabelEXT(VkCommandBuffer _commandBuffer,
|
|||
const char *label = pLabelInfo->pLabelName;
|
||||
if (cmd_buffer->state.pass) {
|
||||
trace_start_cmd_buffer_annotation_rp(
|
||||
&cmd_buffer->trace, &cmd_buffer->draw_cs, strlen(label), label);
|
||||
&cmd_buffer->trace, &cmd_buffer->draw_cs, cmd_buffer, strlen(label), label);
|
||||
} else {
|
||||
trace_start_cmd_buffer_annotation(&cmd_buffer->trace, &cmd_buffer->cs,
|
||||
strlen(label), label);
|
||||
cmd_buffer, strlen(label), label);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -46,6 +46,9 @@ tu_default_tps = []
|
|||
# Tracepoint definitions:
|
||||
#
|
||||
|
||||
command_buffer_arg = ArgStruct(type='struct tu_cmd_buffer *', var='cmd')
|
||||
command_buffer_struct = Arg(type='VkCommandBuffer', name='command_buffer_handle', var='vk_command_buffer_to_handle(&cmd->vk)', c_format='%" PRIu64 "', to_prim_type='(uint64_t){}', perfetto_field=True)
|
||||
|
||||
def begin_end_tp(name, args=[], tp_struct=None, tp_print=None,
|
||||
end_args=[], end_tp_struct=None, end_tp_print=None,
|
||||
tp_default_enabled=True, marker_tp=True,
|
||||
|
|
@ -53,6 +56,12 @@ def begin_end_tp(name, args=[], tp_struct=None, tp_print=None,
|
|||
global tu_default_tps
|
||||
if tp_default_enabled:
|
||||
tu_default_tps.append(name)
|
||||
|
||||
# Make all the GPU render stage events take a cmdbuf, so that the
|
||||
# command_buffer field can be set appropriately in the UI.
|
||||
tp_struct = [command_buffer_struct] + (tp_struct if tp_struct else [])
|
||||
args = [command_buffer_arg] + (args if args else [])
|
||||
|
||||
Tracepoint('start_{0}'.format(name),
|
||||
toggle_name=name,
|
||||
args=args,
|
||||
|
|
@ -69,8 +78,7 @@ def begin_end_tp(name, args=[], tp_struct=None, tp_print=None,
|
|||
tp_markers='tu_cs_trace_end' if marker_tp else None)
|
||||
|
||||
begin_end_tp('cmd_buffer',
|
||||
args=[ArgStruct(type='const struct tu_cmd_buffer *', var='cmd'),
|
||||
Arg(type='str', var='TUdebugFlags', c_format='%s', length_arg='96', copy_func='strncpy'),
|
||||
args=[Arg(type='str', var='TUdebugFlags', c_format='%s', length_arg='96', copy_func='strncpy'),
|
||||
Arg(type='str', var='IR3debugFlags', c_format='%s', length_arg='96', copy_func='strncpy')],
|
||||
tp_struct=[Arg(type='const char *', name='appName', var='cmd->device->instance->vk.app_info.app_name', c_format='%s'),
|
||||
Arg(type='const char *', name='engineName', var='cmd->device->instance->vk.app_info.engine_name', c_format='%s')],
|
||||
|
|
@ -79,7 +87,6 @@ begin_end_tp('cmd_buffer',
|
|||
Arg(type='uint32_t', name='dispatches', var='cmd->state.total_dispatches', c_format='%u')])
|
||||
|
||||
begin_end_tp('secondary_cmd_buffer', tp_default_enabled=False,
|
||||
args=[ArgStruct(type='const struct tu_cmd_buffer *', var='cmd')],
|
||||
tp_struct=[Arg(type='uint8_t', name='render_pass_continue', var='!!(cmd->usage_flags & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)', c_format='%u')])
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue