From b0fd43f1f71cc47a0e8c71b8cbf27e79f38d568c Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Fri, 20 Jan 2023 19:40:25 +0100 Subject: [PATCH] radv: Move the geometry infos before the BVH Part-of: --- src/amd/vulkan/radv_acceleration_structure.c | 11 ++++++----- src/amd/vulkan/radv_rra.c | 4 +--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/amd/vulkan/radv_acceleration_structure.c b/src/amd/vulkan/radv_acceleration_structure.c index 1914d63f9ea..604746a2036 100644 --- a/src/amd/vulkan/radv_acceleration_structure.c +++ b/src/amd/vulkan/radv_acceleration_structure.c @@ -85,6 +85,7 @@ struct build_config { }; struct acceleration_structure_layout { + uint32_t geometry_info_offset; uint32_t bvh_offset; uint32_t size; }; @@ -170,6 +171,9 @@ get_build_layout(struct radv_device *device, uint32_t leaf_count, uint32_t offset = 0; offset += sizeof(struct radv_accel_struct_header); + accel_struct->geometry_info_offset = offset; + offset += sizeof(struct radv_accel_struct_geometry_info) * build_info->geometryCount; + /* Parent links, which have to go directly before bvh_offset as we index them using negative * offsets from there. */ offset += bvh_size / 64 * 4; @@ -179,7 +183,6 @@ get_build_layout(struct radv_device *device, uint32_t leaf_count, accel_struct->bvh_offset = offset; offset += bvh_size; - offset += sizeof(struct radv_accel_struct_geometry_info) * build_info->geometryCount; accel_struct->size = offset; } @@ -1088,11 +1091,9 @@ radv_CmdBuildAccelerationStructuresKHR( radv_update_buffer_cp(cmd_buffer, vk_acceleration_structure_get_va(accel_struct) + base, (const char *)&header + base, sizeof(header) - base); - VkDeviceSize geometry_infos_offset = header.compacted_size - geometry_infos_size; - radv_CmdUpdateBuffer(commandBuffer, accel_struct->buffer, - accel_struct->offset + geometry_infos_offset, geometry_infos_size, - geometry_infos); + accel_struct->offset + bvh_states[i].accel_struct.geometry_info_offset, + geometry_infos_size, geometry_infos); free(geometry_infos); } diff --git a/src/amd/vulkan/radv_rra.c b/src/amd/vulkan/radv_rra.c index d110ac35a96..8249178202c 100644 --- a/src/amd/vulkan/radv_rra.c +++ b/src/amd/vulkan/radv_rra.c @@ -726,9 +726,7 @@ rra_dump_acceleration_structure(struct radv_rra_accel_struct_data *accel_struct, bool is_tlas = header->instance_count > 0; - uint64_t geometry_infos_offset = - header->compacted_size - - header->geometry_count * sizeof(struct radv_accel_struct_geometry_info); + uint64_t geometry_infos_offset = sizeof(struct radv_accel_struct_header); /* convert root node id to offset */ uint32_t src_root_offset = (RADV_BVH_ROOT_NODE & ~7) << 3;