diff --git a/src/freedreno/vulkan/tu_clear_blit.cc b/src/freedreno/vulkan/tu_clear_blit.cc index 841b6b3a683..a807d6140d5 100644 --- a/src/freedreno/vulkan/tu_clear_blit.cc +++ b/src/freedreno/vulkan/tu_clear_blit.cc @@ -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, 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; - 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; - trace_start_sysmem_clear(&cmd->trace, cs, vk_format, ops == &r3d_ops, + trace_start_sysmem_clear(&cmd->trace, cs, cmd, vk_format, ops == &r3d_ops, 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. diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index fc3bc6709db..d324799d72c 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -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(cmd, &cmd->cs, tile, fdm, fdm_offsets); tu_lrz_before_tile(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(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]); diff --git a/src/freedreno/vulkan/tu_device.cc b/src/freedreno/vulkan/tu_device.cc index 0b9b66aee2d..e705d33fd1f 100644 --- a/src/freedreno/vulkan/tu_device.cc +++ b/src/freedreno/vulkan/tu_device.cc @@ -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); } } diff --git a/src/freedreno/vulkan/tu_tracepoints.py b/src/freedreno/vulkan/tu_tracepoints.py index 25a0c2fb2bc..a39fa8cbccc 100644 --- a/src/freedreno/vulkan/tu_tracepoints.py +++ b/src/freedreno/vulkan/tu_tracepoints.py @@ -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')])