Module: Mesa
Branch: main
Commit: b0fd43f1f71cc47a0e8c71b8cbf27e79f38d568c
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b0fd43f1f71cc47a0e8c71b8cbf27e79f38d568c

Author: Konstantin Seurer <[email protected]>
Date:   Fri Jan 20 19:40:25 2023 +0100

radv: Move the geometry infos before the BVH

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20818>

---

 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;

Reply via email to