mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 11:00:11 +01:00
vulkan: Use a struct for debug markers
Improves u_trace integation with anv. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36982>
This commit is contained in:
parent
01c7c97ef7
commit
5c94e20abe
4 changed files with 130 additions and 101 deletions
|
|
@ -4520,13 +4520,6 @@ struct anv_cmd_ray_tracing_state {
|
|||
|
||||
VkDeviceSize scratch_size;
|
||||
|
||||
uint32_t debug_marker_count;
|
||||
uint32_t num_tlas;
|
||||
uint32_t num_blas;
|
||||
uint32_t num_leaves;
|
||||
uint32_t num_ir_nodes;
|
||||
enum vk_acceleration_structure_build_step debug_markers[5];
|
||||
|
||||
struct anv_address build_priv_mem_addr;
|
||||
size_t build_priv_mem_size;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -32,26 +32,14 @@ static uint32_t tlas_id = 0;
|
|||
|
||||
static void
|
||||
begin_debug_marker(VkCommandBuffer commandBuffer,
|
||||
enum vk_acceleration_structure_build_step step,
|
||||
const char *format, ...)
|
||||
struct vk_acceleration_structure_build_marker *marker)
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
assert(cmd_buffer->state.rt.debug_marker_count <
|
||||
ARRAY_SIZE(cmd_buffer->state.rt.debug_markers));
|
||||
cmd_buffer->state.rt.debug_markers[cmd_buffer->state.rt.debug_marker_count++] =
|
||||
step;
|
||||
switch (step) {
|
||||
switch (marker->step) {
|
||||
case VK_ACCELERATION_STRUCTURE_BUILD_STEP_TOP:
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
cmd_buffer->state.rt.num_tlas = va_arg(args, uint32_t);
|
||||
cmd_buffer->state.rt.num_blas = va_arg(args, uint32_t);
|
||||
va_end(args);
|
||||
trace_intel_begin_as_build(&cmd_buffer->trace);
|
||||
break;
|
||||
}
|
||||
case VK_ACCELERATION_STRUCTURE_BUILD_STEP_BUILD_LEAVES:
|
||||
trace_intel_begin_as_build_leaves(&cmd_buffer->trace);
|
||||
break;
|
||||
|
|
@ -68,31 +56,24 @@ begin_debug_marker(VkCommandBuffer commandBuffer,
|
|||
trace_intel_begin_as_ploc_build_internal(&cmd_buffer->trace);
|
||||
break;
|
||||
case VK_ACCELERATION_STRUCTURE_BUILD_STEP_ENCODE:
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
cmd_buffer->state.rt.num_leaves = va_arg(args, uint32_t);
|
||||
cmd_buffer->state.rt.num_ir_nodes = va_arg(args, uint32_t);
|
||||
va_end(args);
|
||||
trace_intel_begin_as_encode(&cmd_buffer->trace);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
UNREACHABLE("Invalid build step");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
end_debug_marker(VkCommandBuffer commandBuffer)
|
||||
end_debug_marker(VkCommandBuffer commandBuffer,
|
||||
struct vk_acceleration_structure_build_marker *marker)
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
cmd_buffer->state.rt.debug_marker_count--;
|
||||
switch (cmd_buffer->state.rt.debug_markers[cmd_buffer->state.rt.debug_marker_count]) {
|
||||
switch (marker->step) {
|
||||
case VK_ACCELERATION_STRUCTURE_BUILD_STEP_TOP:
|
||||
trace_intel_end_as_build(&cmd_buffer->trace,
|
||||
cmd_buffer->state.rt.num_tlas,
|
||||
cmd_buffer->state.rt.num_blas);
|
||||
marker->top.tlas_count,
|
||||
marker->top.blas_count);
|
||||
break;
|
||||
case VK_ACCELERATION_STRUCTURE_BUILD_STEP_BUILD_LEAVES:
|
||||
trace_intel_end_as_build_leaves(&cmd_buffer->trace);
|
||||
|
|
@ -110,7 +91,9 @@ end_debug_marker(VkCommandBuffer commandBuffer)
|
|||
trace_intel_end_as_ploc_build_internal(&cmd_buffer->trace);
|
||||
break;
|
||||
case VK_ACCELERATION_STRUCTURE_BUILD_STEP_ENCODE:
|
||||
trace_intel_end_as_encode(&cmd_buffer->trace, cmd_buffer->state.rt.num_leaves, cmd_buffer->state.rt.num_ir_nodes);
|
||||
trace_intel_end_as_encode(&cmd_buffer->trace,
|
||||
marker->encode.leaf_node_count,
|
||||
marker->encode.internal_node_count);
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE("Invalid build step");
|
||||
|
|
|
|||
|
|
@ -445,33 +445,51 @@ vk_fill_geometry_data(VkAccelerationStructureTypeKHR type, uint32_t first_id, ui
|
|||
|
||||
void
|
||||
vk_accel_struct_cmd_begin_debug_marker(VkCommandBuffer commandBuffer,
|
||||
enum vk_acceleration_structure_build_step step,
|
||||
const char *format, ...)
|
||||
struct vk_acceleration_structure_build_marker *marker)
|
||||
{
|
||||
VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
|
||||
struct vk_device *device = cmd_buffer->base.device;
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, format);
|
||||
|
||||
char *name;
|
||||
if (vasprintf(&name, format, ap) == -1) {
|
||||
va_end(ap);
|
||||
return;
|
||||
char name[256];
|
||||
switch (marker->step) {
|
||||
case VK_ACCELERATION_STRUCTURE_BUILD_STEP_TOP:
|
||||
snprintf(name, sizeof(name), "vkCmdBuildAccelerationStructuresKHR(blas_count=%u, tlas_count=%u)",
|
||||
marker->top.blas_count, marker->top.tlas_count);
|
||||
break;
|
||||
case VK_ACCELERATION_STRUCTURE_BUILD_STEP_BUILD_LEAVES:
|
||||
snprintf(name, sizeof(name), "build_leaves");
|
||||
break;
|
||||
case VK_ACCELERATION_STRUCTURE_BUILD_STEP_MORTON_GENERATE:
|
||||
snprintf(name, sizeof(name), "morton_generate");
|
||||
break;
|
||||
case VK_ACCELERATION_STRUCTURE_BUILD_STEP_MORTON_SORT:
|
||||
snprintf(name, sizeof(name), "morton_sort");
|
||||
break;
|
||||
case VK_ACCELERATION_STRUCTURE_BUILD_STEP_LBVH_BUILD_INTERNAL:
|
||||
snprintf(name, sizeof(name), "lbvh_build_internal");
|
||||
break;
|
||||
case VK_ACCELERATION_STRUCTURE_BUILD_STEP_PLOC_BUILD_INTERNAL:
|
||||
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);
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE("Invalid build step");
|
||||
}
|
||||
|
||||
va_end(ap);
|
||||
|
||||
VkDebugMarkerMarkerInfoEXT marker = {
|
||||
VkDebugMarkerMarkerInfoEXT marker_info = {
|
||||
.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT,
|
||||
.pMarkerName = name,
|
||||
};
|
||||
|
||||
device->dispatch_table.CmdDebugMarkerBeginEXT(commandBuffer, &marker);
|
||||
device->dispatch_table.CmdDebugMarkerBeginEXT(commandBuffer, &marker_info);
|
||||
}
|
||||
|
||||
void
|
||||
vk_accel_struct_cmd_end_debug_marker(VkCommandBuffer commandBuffer)
|
||||
vk_accel_struct_cmd_end_debug_marker(VkCommandBuffer commandBuffer,
|
||||
struct vk_acceleration_structure_build_marker *marker)
|
||||
{
|
||||
VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
|
||||
struct vk_device *device = cmd_buffer->base.device;
|
||||
|
|
@ -525,9 +543,10 @@ build_leaves(VkCommandBuffer commandBuffer,
|
|||
return result;
|
||||
|
||||
if (args->emit_markers) {
|
||||
device->as_build_ops->begin_debug_marker(commandBuffer,
|
||||
VK_ACCELERATION_STRUCTURE_BUILD_STEP_BUILD_LEAVES,
|
||||
"build_leaves");
|
||||
struct vk_acceleration_structure_build_marker marker = {
|
||||
.step = VK_ACCELERATION_STRUCTURE_BUILD_STEP_BUILD_LEAVES,
|
||||
};
|
||||
device->as_build_ops->begin_debug_marker(commandBuffer, &marker);
|
||||
}
|
||||
|
||||
const struct vk_device_dispatch_table *disp = &device->dispatch_table;
|
||||
|
|
@ -565,8 +584,12 @@ build_leaves(VkCommandBuffer commandBuffer,
|
|||
}
|
||||
}
|
||||
|
||||
if (args->emit_markers)
|
||||
device->as_build_ops->end_debug_marker(commandBuffer);
|
||||
if (args->emit_markers) {
|
||||
struct vk_acceleration_structure_build_marker marker = {
|
||||
.step = VK_ACCELERATION_STRUCTURE_BUILD_STEP_BUILD_LEAVES,
|
||||
};
|
||||
device->as_build_ops->end_debug_marker(commandBuffer, &marker);
|
||||
}
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
|
@ -595,9 +618,10 @@ morton_generate(VkCommandBuffer commandBuffer, struct vk_device *device,
|
|||
return result;
|
||||
|
||||
if (args->emit_markers) {
|
||||
device->as_build_ops->begin_debug_marker(commandBuffer,
|
||||
VK_ACCELERATION_STRUCTURE_BUILD_STEP_MORTON_GENERATE,
|
||||
"morton_generate");
|
||||
struct vk_acceleration_structure_build_marker marker = {
|
||||
.step = VK_ACCELERATION_STRUCTURE_BUILD_STEP_MORTON_GENERATE,
|
||||
};
|
||||
device->as_build_ops->begin_debug_marker(commandBuffer, &marker);
|
||||
}
|
||||
|
||||
const struct vk_device_dispatch_table *disp = &device->dispatch_table;
|
||||
|
|
@ -618,8 +642,12 @@ morton_generate(VkCommandBuffer commandBuffer, struct vk_device *device,
|
|||
device->cmd_dispatch_unaligned(commandBuffer, bvh_states[i].vk.leaf_node_count, 1, 1);
|
||||
}
|
||||
|
||||
if (args->emit_markers)
|
||||
device->as_build_ops->end_debug_marker(commandBuffer);
|
||||
if (args->emit_markers) {
|
||||
struct vk_acceleration_structure_build_marker marker = {
|
||||
.step = VK_ACCELERATION_STRUCTURE_BUILD_STEP_MORTON_GENERATE,
|
||||
};
|
||||
device->as_build_ops->end_debug_marker(commandBuffer, &marker);
|
||||
}
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
|
@ -633,9 +661,10 @@ morton_sort(VkCommandBuffer commandBuffer, struct vk_device *device,
|
|||
const struct vk_device_dispatch_table *disp = &device->dispatch_table;
|
||||
|
||||
if (args->emit_markers) {
|
||||
device->as_build_ops->begin_debug_marker(commandBuffer,
|
||||
VK_ACCELERATION_STRUCTURE_BUILD_STEP_MORTON_SORT,
|
||||
"morton_sort");
|
||||
struct vk_acceleration_structure_build_marker marker = {
|
||||
.step = VK_ACCELERATION_STRUCTURE_BUILD_STEP_MORTON_SORT,
|
||||
};
|
||||
device->as_build_ops->begin_debug_marker(commandBuffer, &marker);
|
||||
}
|
||||
|
||||
/* Copyright 2019 The Fuchsia Authors. */
|
||||
|
|
@ -858,8 +887,12 @@ morton_sort(VkCommandBuffer commandBuffer, struct vk_device *device,
|
|||
is_even ^= true;
|
||||
}
|
||||
|
||||
if (args->emit_markers)
|
||||
device->as_build_ops->end_debug_marker(commandBuffer);
|
||||
if (args->emit_markers) {
|
||||
struct vk_acceleration_structure_build_marker marker = {
|
||||
.step = VK_ACCELERATION_STRUCTURE_BUILD_STEP_MORTON_SORT,
|
||||
};
|
||||
device->as_build_ops->end_debug_marker(commandBuffer, &marker);
|
||||
}
|
||||
}
|
||||
|
||||
static VkResult
|
||||
|
|
@ -889,9 +922,10 @@ lbvh_build_internal(VkCommandBuffer commandBuffer,
|
|||
return result;
|
||||
|
||||
if (args->emit_markers) {
|
||||
device->as_build_ops->begin_debug_marker(commandBuffer,
|
||||
VK_ACCELERATION_STRUCTURE_BUILD_STEP_LBVH_BUILD_INTERNAL,
|
||||
"lbvh_build_internal");
|
||||
struct vk_acceleration_structure_build_marker marker = {
|
||||
.step = VK_ACCELERATION_STRUCTURE_BUILD_STEP_LBVH_BUILD_INTERNAL,
|
||||
};
|
||||
device->as_build_ops->begin_debug_marker(commandBuffer, &marker);
|
||||
}
|
||||
|
||||
const struct vk_device_dispatch_table *disp = &device->dispatch_table;
|
||||
|
|
@ -951,8 +985,12 @@ lbvh_build_internal(VkCommandBuffer commandBuffer,
|
|||
device->cmd_dispatch_unaligned(commandBuffer, bvh_states[i].internal_node_count, 1, 1);
|
||||
}
|
||||
|
||||
if (args->emit_markers)
|
||||
device->as_build_ops->end_debug_marker(commandBuffer);
|
||||
if (args->emit_markers) {
|
||||
struct vk_acceleration_structure_build_marker marker = {
|
||||
.step = VK_ACCELERATION_STRUCTURE_BUILD_STEP_LBVH_BUILD_INTERNAL,
|
||||
};
|
||||
device->as_build_ops->end_debug_marker(commandBuffer, &marker);
|
||||
}
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
|
@ -983,9 +1021,10 @@ ploc_build_internal(VkCommandBuffer commandBuffer,
|
|||
return result;
|
||||
|
||||
if (args->emit_markers) {
|
||||
device->as_build_ops->begin_debug_marker(commandBuffer,
|
||||
VK_ACCELERATION_STRUCTURE_BUILD_STEP_PLOC_BUILD_INTERNAL,
|
||||
"ploc_build_internal");
|
||||
struct vk_acceleration_structure_build_marker marker = {
|
||||
.step = VK_ACCELERATION_STRUCTURE_BUILD_STEP_PLOC_BUILD_INTERNAL,
|
||||
};
|
||||
device->as_build_ops->begin_debug_marker(commandBuffer, &marker);
|
||||
}
|
||||
|
||||
const struct vk_device_dispatch_table *disp = &device->dispatch_table;
|
||||
|
|
@ -1016,8 +1055,12 @@ ploc_build_internal(VkCommandBuffer commandBuffer,
|
|||
disp->CmdDispatch(commandBuffer, MAX2(DIV_ROUND_UP(bvh_states[i].vk.leaf_node_count, PLOC_WORKGROUP_SIZE), 1), 1, 1);
|
||||
}
|
||||
|
||||
if (args->emit_markers)
|
||||
device->as_build_ops->end_debug_marker(commandBuffer);
|
||||
if (args->emit_markers) {
|
||||
struct vk_acceleration_structure_build_marker marker = {
|
||||
.step = VK_ACCELERATION_STRUCTURE_BUILD_STEP_PLOC_BUILD_INTERNAL,
|
||||
};
|
||||
device->as_build_ops->end_debug_marker(commandBuffer, &marker);
|
||||
}
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
|
@ -1038,25 +1081,23 @@ vk_cmd_build_acceleration_structures(VkCommandBuffer commandBuffer,
|
|||
|
||||
struct bvh_state *bvh_states = calloc(infoCount, sizeof(struct bvh_state));
|
||||
|
||||
struct vk_acceleration_structure_build_marker top_marker = {
|
||||
.step = VK_ACCELERATION_STRUCTURE_BUILD_STEP_TOP,
|
||||
};
|
||||
if (args->emit_markers) {
|
||||
uint32_t num_of_blas = 0;
|
||||
uint32_t num_of_tlas = 0;
|
||||
for (uint32_t i = 0; i < infoCount; ++i) {
|
||||
switch (pInfos[i].type) {
|
||||
case VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR:
|
||||
num_of_tlas++;
|
||||
top_marker.top.tlas_count++;
|
||||
break;
|
||||
case VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR:
|
||||
num_of_blas++;
|
||||
top_marker.top.blas_count++;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
ops->begin_debug_marker(commandBuffer,
|
||||
VK_ACCELERATION_STRUCTURE_BUILD_STEP_TOP,
|
||||
"vkCmdBuildAccelerationStructuresKHR() TLAS(%u) BLAS(%u)",
|
||||
num_of_tlas, num_of_blas);
|
||||
ops->begin_debug_marker(commandBuffer, &top_marker);
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < infoCount; ++i) {
|
||||
|
|
@ -1193,19 +1234,17 @@ vk_cmd_build_acceleration_structures(VkCommandBuffer commandBuffer,
|
|||
vk_barrier_compute_w_to_indirect_compute_r(commandBuffer);
|
||||
}
|
||||
|
||||
/* Calculate number of leaves and internal nodes to encode */
|
||||
uint32_t num_leaves = 0;
|
||||
uint32_t num_internal_node = 0;
|
||||
for ( uint32_t i = 0; i < infoCount; i++) {
|
||||
num_leaves += bvh_states[i].vk.leaf_node_count;
|
||||
num_internal_node += bvh_states[i].internal_node_count;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
if (args->emit_markers)
|
||||
device->as_build_ops->begin_debug_marker(commandBuffer,
|
||||
VK_ACCELERATION_STRUCTURE_BUILD_STEP_ENCODE,
|
||||
"encode_leaves=%u encode_ir_node=%u",
|
||||
num_leaves, num_internal_node);
|
||||
device->as_build_ops->begin_debug_marker(commandBuffer, &encode_marker);
|
||||
}
|
||||
|
||||
for (unsigned pass = 0; pass < ARRAY_SIZE(ops->encode_as); pass++) {
|
||||
if (!ops->encode_as[pass] && !ops->update_as[pass])
|
||||
|
|
@ -1255,10 +1294,10 @@ vk_cmd_build_acceleration_structures(VkCommandBuffer commandBuffer,
|
|||
}
|
||||
|
||||
if (args->emit_markers)
|
||||
device->as_build_ops->end_debug_marker(commandBuffer);
|
||||
device->as_build_ops->end_debug_marker(commandBuffer, &encode_marker);
|
||||
|
||||
if (args->emit_markers)
|
||||
device->as_build_ops->end_debug_marker(commandBuffer);
|
||||
device->as_build_ops->end_debug_marker(commandBuffer, &top_marker);
|
||||
|
||||
free(bvh_states);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,6 +46,20 @@ enum vk_acceleration_structure_build_step {
|
|||
VK_ACCELERATION_STRUCTURE_BUILD_STEP_ENCODE,
|
||||
};
|
||||
|
||||
struct vk_acceleration_structure_build_marker {
|
||||
enum vk_acceleration_structure_build_step step;
|
||||
union {
|
||||
struct {
|
||||
uint32_t blas_count;
|
||||
uint32_t tlas_count;
|
||||
} top;
|
||||
struct {
|
||||
uint32_t leaf_node_count;
|
||||
uint32_t internal_node_count;
|
||||
} encode;
|
||||
};
|
||||
};
|
||||
|
||||
struct vk_acceleration_structure {
|
||||
struct vk_object_base base;
|
||||
|
||||
|
|
@ -109,9 +123,9 @@ struct vk_acceleration_structure_build_state {
|
|||
|
||||
struct vk_acceleration_structure_build_ops {
|
||||
void (*begin_debug_marker)(VkCommandBuffer commandBuffer,
|
||||
enum vk_acceleration_structure_build_step step,
|
||||
const char *format, ...);
|
||||
void (*end_debug_marker)(VkCommandBuffer commandBuffer);
|
||||
struct vk_acceleration_structure_build_marker *marker);
|
||||
void (*end_debug_marker)(VkCommandBuffer commandBuffer,
|
||||
struct vk_acceleration_structure_build_marker *marker);
|
||||
|
||||
void (*get_build_config)(VkDevice device, struct vk_acceleration_structure_build_state *state);
|
||||
|
||||
|
|
@ -187,10 +201,10 @@ vk_fill_geometry_data(VkAccelerationStructureTypeKHR type, uint32_t first_id, ui
|
|||
const VkAccelerationStructureBuildRangeInfoKHR *build_range_info);
|
||||
|
||||
void vk_accel_struct_cmd_begin_debug_marker(VkCommandBuffer commandBuffer,
|
||||
enum vk_acceleration_structure_build_step step,
|
||||
const char *format, ...);
|
||||
struct vk_acceleration_structure_build_marker *marker);
|
||||
|
||||
void vk_accel_struct_cmd_end_debug_marker(VkCommandBuffer commandBuffer);
|
||||
void vk_accel_struct_cmd_end_debug_marker(VkCommandBuffer commandBuffer,
|
||||
struct vk_acceleration_structure_build_marker *marker);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue