From 06b436e51e25febf04e58d8d2da1c38c799cfca2 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Fri, 9 Jun 2023 23:00:09 +0300 Subject: [PATCH] anv: add query tracepoints Signed-off-by: Lionel Landwerlin Part-of: --- src/intel/ds/intel_driver_ds.cc | 3 +++ src/intel/ds/intel_tracepoints.py | 7 +++++++ src/intel/vulkan/genX_query.c | 14 ++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/intel/ds/intel_driver_ds.cc b/src/intel/ds/intel_driver_ds.cc index d9287a87b34..b6b49b82a45 100644 --- a/src/intel/ds/intel_driver_ds.cc +++ b/src/intel/ds/intel_driver_ds.cc @@ -392,6 +392,9 @@ CREATE_DUAL_EVENT_CALLBACK(xfb, INTEL_DS_QUEUE_STAGE_CMD_BUFFER) CREATE_DUAL_EVENT_CALLBACK(compute, INTEL_DS_QUEUE_STAGE_COMPUTE) CREATE_DUAL_EVENT_CALLBACK(generate_draws, INTEL_DS_QUEUE_STAGE_GENERATE_DRAWS) CREATE_DUAL_EVENT_CALLBACK(trace_copy, INTEL_DS_QUEUE_STAGE_BLORP) +CREATE_DUAL_EVENT_CALLBACK(query_clear_blorp, INTEL_DS_QUEUE_STAGE_BLORP) +CREATE_DUAL_EVENT_CALLBACK(query_clear_cs, INTEL_DS_QUEUE_STAGE_CMD_BUFFER) +CREATE_DUAL_EVENT_CALLBACK(query_copy, INTEL_DS_QUEUE_STAGE_CMD_BUFFER) void intel_ds_begin_cmd_buffer_annotation(struct intel_ds_device *device, diff --git a/src/intel/ds/intel_tracepoints.py b/src/intel/ds/intel_tracepoints.py index f88236e962b..a7079930116 100644 --- a/src/intel/ds/intel_tracepoints.py +++ b/src/intel/ds/intel_tracepoints.py @@ -121,6 +121,13 @@ def define_tracepoints(args): # Indirect draw generation, only for Anv begin_end_tp('generate_draws') + # vkCmdResetQuery, only for Anv + begin_end_tp('query_clear_blorp') + begin_end_tp('query_clear_cs', end_pipelined=False) + + # vkCmdCopyQueryResults, only for Anv + begin_end_tp('query_copy', end_pipelined=False) + # Various draws/dispatch, Anv & Iris begin_end_tp('draw', tp_args=[Arg(type='uint32_t', var='count', c_format='%u')]) diff --git a/src/intel/vulkan/genX_query.c b/src/intel/vulkan/genX_query.c index 49420994b3e..280c9cfb1e0 100644 --- a/src/intel/vulkan/genX_query.c +++ b/src/intel/vulkan/genX_query.c @@ -34,6 +34,8 @@ #include "genxml/gen_macros.h" #include "genxml/genX_pack.h" +#include "ds/intel_tracepoints.h" + /* We reserve : * - GPR 14 for perf queries * - GPR 15 for conditional rendering @@ -786,6 +788,8 @@ void genX(CmdResetQueryPool)( */ if (queryCount >= pdevice->instance->query_clear_with_blorp_threshold && !intel_device_info_is_mtl(cmd_buffer->device->info)) { + trace_intel_begin_query_clear_blorp(&cmd_buffer->trace); + anv_cmd_buffer_fill_area(cmd_buffer, anv_query_address(pool, firstQuery), queryCount * pool->stride, @@ -794,9 +798,13 @@ void genX(CmdResetQueryPool)( anv_add_pending_pipe_bits(cmd_buffer, ANV_PIPE_QUERY_CLEARS_BIT, "vkCmdResetQueryPool of timestamps"); + + trace_intel_end_query_clear_blorp(&cmd_buffer->trace); return; } + trace_intel_begin_query_clear_cs(&cmd_buffer->trace); + switch (pool->type) { case VK_QUERY_TYPE_OCCLUSION: #if GFX_VERx10 >= 125 @@ -870,6 +878,8 @@ void genX(CmdResetQueryPool)( default: unreachable("Unsupported query type"); } + + trace_intel_end_query_clear_cs(&cmd_buffer->trace); } void genX(ResetQueryPool)( @@ -1500,6 +1510,8 @@ void genX(CmdCopyQueryPoolResults)( ANV_FROM_HANDLE(anv_query_pool, pool, queryPool); ANV_FROM_HANDLE(anv_buffer, buffer, destBuffer); + trace_intel_begin_query_copy(&cmd_buffer->trace); + struct mi_builder b; mi_builder_init(&b, cmd_buffer->device->info, &cmd_buffer->batch); struct mi_value result; @@ -1630,6 +1642,8 @@ void genX(CmdCopyQueryPoolResults)( dest_addr = anv_address_add(dest_addr, destStride); } + + trace_intel_end_query_copy(&cmd_buffer->trace); } #if GFX_VERx10 >= 125 && ANV_SUPPORT_RT