From 850f339b892e9a944212da058a526b31dbf17e6e Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Mon, 25 Aug 2025 14:38:25 +0200 Subject: [PATCH] vulkan: Add more detail to encode debug markers Useful for radv because radv has quite a few different configurations. Part-of: --- src/intel/ds/intel_tracepoints.py | 4 +- .../vulkan/genX_acceleration_structure.c | 2 + .../runtime/vk_acceleration_structure.c | 50 +++++++++++++------ .../runtime/vk_acceleration_structure.h | 7 ++- 4 files changed, 46 insertions(+), 17 deletions(-) diff --git a/src/intel/ds/intel_tracepoints.py b/src/intel/ds/intel_tracepoints.py index e9fe49b96e5..de8bf443b10 100644 --- a/src/intel/ds/intel_tracepoints.py +++ b/src/intel/ds/intel_tracepoints.py @@ -241,7 +241,9 @@ def define_tracepoints(args): begin_end_tp('as_lbvh_build_internal', repeat_last=True) begin_end_tp('as_ploc_build_internal', repeat_last=True) begin_end_tp('as_encode', repeat_last=True, - tp_args=[Arg(type='uint32_t', var='n_leaves', c_format='%u'), + tp_args=[Arg(type='uint32_t', var='pass', c_format='%u'), + Arg(type='uint32_t', var='key', c_format='%x'), + Arg(type='uint32_t', var='n_leaves', c_format='%u'), Arg(type='uint32_t', var='n_ir_leaves', c_format='%u')]) begin_end_tp('as_copy', repeat_last=True) diff --git a/src/intel/vulkan/genX_acceleration_structure.c b/src/intel/vulkan/genX_acceleration_structure.c index 2fc1be10371..656e9ab209a 100644 --- a/src/intel/vulkan/genX_acceleration_structure.c +++ b/src/intel/vulkan/genX_acceleration_structure.c @@ -92,6 +92,8 @@ end_debug_marker(VkCommandBuffer commandBuffer, break; case VK_ACCELERATION_STRUCTURE_BUILD_STEP_ENCODE: trace_intel_end_as_encode(&cmd_buffer->trace, + marker->encode.pass, + marker->encode.key, marker->encode.leaf_node_count, marker->encode.internal_node_count); break; diff --git a/src/vulkan/runtime/vk_acceleration_structure.c b/src/vulkan/runtime/vk_acceleration_structure.c index f105c7debcd..d72c38dff27 100644 --- a/src/vulkan/runtime/vk_acceleration_structure.c +++ b/src/vulkan/runtime/vk_acceleration_structure.c @@ -472,9 +472,13 @@ vk_accel_struct_cmd_begin_debug_marker(VkCommandBuffer commandBuffer, snprintf(name, sizeof(name), "ploc_build_internal"); break; case VK_ACCELERATION_STRUCTURE_BUILD_STEP_ENCODE: - snprintf(name, sizeof(name), "encode(leaf_node_count=%u, internal_node_count=%u)", - marker->encode.leaf_node_count, marker->encode.internal_node_count); + case VK_ACCELERATION_STRUCTURE_BUILD_STEP_UPDATE: { + const char *type = marker->step == VK_ACCELERATION_STRUCTURE_BUILD_STEP_ENCODE ? "encode" : "update"; + snprintf(name, sizeof(name), "%s(pass=%u, key=0x%x, leaf_node_count=%u, internal_node_count=%u)", + type, marker->encode.pass, marker->encode.key, marker->encode.leaf_node_count, + marker->encode.internal_node_count); break; + } default: UNREACHABLE("Invalid build step"); } @@ -1234,17 +1238,8 @@ vk_cmd_build_acceleration_structures(VkCommandBuffer commandBuffer, vk_barrier_compute_w_to_indirect_compute_r(commandBuffer); } - struct vk_acceleration_structure_build_marker encode_marker = { - .step = VK_ACCELERATION_STRUCTURE_BUILD_STEP_ENCODE, - }; - if (args->emit_markers) { - for ( uint32_t i = 0; i < infoCount; i++) { - encode_marker.encode.leaf_node_count += bvh_states[i].vk.leaf_node_count; - encode_marker.encode.internal_node_count += bvh_states[i].internal_node_count; - } - - device->as_build_ops->begin_debug_marker(commandBuffer, &encode_marker); - } + struct vk_acceleration_structure_build_marker encode_marker; + bool inside_encode_marker = false; for (unsigned pass = 0; pass < ARRAY_SIZE(ops->encode_as); pass++) { if (!ops->encode_as[pass] && !ops->update_as[pass]) @@ -1271,6 +1266,33 @@ vk_cmd_build_acceleration_structures(VkCommandBuffer commandBuffer, encode_key = bvh_states[i].vk.config.encode_key[pass]; update_key = bvh_states[i].vk.config.update_key[pass]; progress = true; + + if (args->emit_markers) { + if (inside_encode_marker) + device->as_build_ops->end_debug_marker(commandBuffer, &encode_marker); + + memset(&encode_marker, 0, sizeof(encode_marker)); + encode_marker.step = update ? VK_ACCELERATION_STRUCTURE_BUILD_STEP_UPDATE + : VK_ACCELERATION_STRUCTURE_BUILD_STEP_ENCODE; + encode_marker.encode.pass = pass; + encode_marker.encode.key = update ? update_key : encode_key; + + for (uint32_t j = 0; j < infoCount; j++) { + if (update != (bvh_states[j].vk.config.internal_type == + VK_INTERNAL_BUILD_TYPE_UPDATE) || + encode_key != bvh_states[j].vk.config.encode_key[pass] || + update_key != bvh_states[j].vk.config.update_key[pass]) + continue; + + encode_marker.encode.leaf_node_count += bvh_states[j].vk.leaf_node_count; + encode_marker.encode.internal_node_count += bvh_states[j].internal_node_count; + } + + device->as_build_ops->begin_debug_marker(commandBuffer, &encode_marker); + + inside_encode_marker = true; + } + if (update) ops->update_bind_pipeline[pass](commandBuffer, &bvh_states[i].vk); else @@ -1293,7 +1315,7 @@ vk_cmd_build_acceleration_structures(VkCommandBuffer commandBuffer, } while (progress); } - if (args->emit_markers) + if (inside_encode_marker) device->as_build_ops->end_debug_marker(commandBuffer, &encode_marker); if (args->emit_markers) diff --git a/src/vulkan/runtime/vk_acceleration_structure.h b/src/vulkan/runtime/vk_acceleration_structure.h index 3b2df47f405..3ca63660395 100644 --- a/src/vulkan/runtime/vk_acceleration_structure.h +++ b/src/vulkan/runtime/vk_acceleration_structure.h @@ -44,6 +44,7 @@ enum vk_acceleration_structure_build_step { VK_ACCELERATION_STRUCTURE_BUILD_STEP_LBVH_BUILD_INTERNAL, VK_ACCELERATION_STRUCTURE_BUILD_STEP_PLOC_BUILD_INTERNAL, VK_ACCELERATION_STRUCTURE_BUILD_STEP_ENCODE, + VK_ACCELERATION_STRUCTURE_BUILD_STEP_UPDATE, }; struct vk_acceleration_structure_build_marker { @@ -52,11 +53,13 @@ struct vk_acceleration_structure_build_marker { struct { uint32_t blas_count; uint32_t tlas_count; - } top; + } top; /* Used for VK_ACCELERATION_STRUCTURE_BUILD_STEP_TOP */ struct { + uint32_t pass; + uint32_t key; uint32_t leaf_node_count; uint32_t internal_node_count; - } encode; + } encode; /* Used for VK_ACCELERATION_STRUCTURE_BUILD_STEP_ENCODE, VK_ACCELERATION_STRUCTURE_BUILD_STEP_UPDATE */ }; };