Mesa (main): radv: Fix acceleration structure size queries

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jul 12 12:57:18 UTC 2022


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

Author: Konstantin Seurer <konstantin.seurer at gmail.com>
Date:   Sat Jul  9 22:20:58 2022 +0200

radv: Fix acceleration structure size queries

>From looking at the CTS,
VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR
refers to the serialization size and not to the
actual, current size.

Fixes the following CTS:
dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.buffer.size
dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.memory.size
dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.buffer.size
dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.memory.size

Fixes: 5d56c2c ("radv: Add accel struct queries for maintenance1")
Signed-off-by: Konstantin Seurer <konstantin.seurer at gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17444>

---

 src/amd/ci/radv-navi21-aco-fails.txt         |  4 ---
 src/amd/ci/radv-navi22-aco-fails.txt         |  4 ---
 src/amd/ci/radv-vangogh-aco-fails.txt        |  4 ---
 src/amd/vulkan/radv_acceleration_structure.c | 44 +++++++++++++---------------
 4 files changed, 21 insertions(+), 35 deletions(-)

diff --git a/src/amd/ci/radv-navi21-aco-fails.txt b/src/amd/ci/radv-navi21-aco-fails.txt
index fc577664064..ddf125936e8 100644
--- a/src/amd/ci/radv-navi21-aco-fails.txt
+++ b/src/amd/ci/radv-navi21-aco-fails.txt
@@ -17,7 +17,3 @@ dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.st
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.access_sbt_read,Crash
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_all_transfer,Crash
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_as_copy_bit,Crash
-dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.buffer.size,Fail
-dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.memory.size,Fail
-dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.buffer.size,Fail
-dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.memory.size,Fail
diff --git a/src/amd/ci/radv-navi22-aco-fails.txt b/src/amd/ci/radv-navi22-aco-fails.txt
index 1104eb4a4fa..c4d1ce4f6ae 100644
--- a/src/amd/ci/radv-navi22-aco-fails.txt
+++ b/src/amd/ci/radv-navi22-aco-fails.txt
@@ -18,7 +18,3 @@ dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.st
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.access_sbt_read,Crash
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_all_transfer,Crash
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_as_copy_bit,Crash
-dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.buffer.size,Fail
-dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.memory.size,Fail
-dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.buffer.size,Fail
-dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.memory.size,Fail
diff --git a/src/amd/ci/radv-vangogh-aco-fails.txt b/src/amd/ci/radv-vangogh-aco-fails.txt
index 6c10c89e3fe..deae8157626 100644
--- a/src/amd/ci/radv-vangogh-aco-fails.txt
+++ b/src/amd/ci/radv-vangogh-aco-fails.txt
@@ -21,7 +21,3 @@ dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.st
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.access_sbt_read,Crash
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_all_transfer,Crash
 dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_as_copy_bit,Crash
-dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.buffer.size,Fail
-dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.memory.size,Fail
-dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.buffer.size,Fail
-dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.memory.size,Fail
diff --git a/src/amd/vulkan/radv_acceleration_structure.c b/src/amd/vulkan/radv_acceleration_structure.c
index 0ab407ba289..6a6b8f95914 100644
--- a/src/amd/vulkan/radv_acceleration_structure.c
+++ b/src/amd/vulkan/radv_acceleration_structure.c
@@ -215,7 +215,7 @@ radv_WriteAccelerationStructuresPropertiesKHR(
             value = header->instance_count;
             break;
          case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR:
-            value = accel->size;
+            value = header->size;
             break;
          default:
             unreachable("Unhandled acceleration structure query");
@@ -627,6 +627,24 @@ optimize_bvh(const char *base_ptr, uint32_t *node_ids, uint32_t node_count)
    free(entries);
 }
 
+static void
+fill_accel_struct_header(struct radv_accel_struct_header *header)
+{
+   /* 16 bytes per invocation, 64 invocations per workgroup */
+   header->copy_dispatch_size[0] = DIV_ROUND_UP(header->compacted_size, 16 * 64);
+   header->copy_dispatch_size[1] = 1;
+   header->copy_dispatch_size[2] = 1;
+
+   header->serialization_size =
+      header->compacted_size + align(sizeof(struct radv_accel_struct_serialization_header) +
+                                        sizeof(uint64_t) * header->instance_count,
+                                     128);
+
+   header->size = header->serialization_size -
+                  sizeof(struct radv_accel_struct_serialization_header) -
+                  sizeof(uint64_t) * header->instance_count;
+}
+
 static VkResult
 build_bvh(struct radv_device *device, const VkAccelerationStructureBuildGeometryInfoKHR *info,
           const VkAccelerationStructureBuildRangeInfoKHR *ranges)
@@ -751,17 +769,7 @@ build_bvh(struct radv_device *device, const VkAccelerationStructureBuildGeometry
    header->instance_count = instance_count;
    header->compacted_size = (char *)ctx.curr_ptr - base_ptr;
 
-   /* 16 bytes per invocation, 64 invocations per workgroup */
-   header->copy_dispatch_size[0] = DIV_ROUND_UP(header->compacted_size, 16 * 64);
-   header->copy_dispatch_size[1] = 1;
-   header->copy_dispatch_size[2] = 1;
-
-   header->serialization_size =
-      header->compacted_size + align(sizeof(struct radv_accel_struct_serialization_header) +
-                                        sizeof(uint64_t) * header->instance_count,
-                                     128);
-
-   header->size = accel->size;
+   fill_accel_struct_header(header);
 
 fail:
    device->ws->buffer_unmap(accel->bo);
@@ -2279,17 +2287,7 @@ radv_CmdBuildAccelerationStructuresKHR(
       header.instance_count = bvh_states[i].instance_count;
       header.compacted_size = bvh_states[i].node_offset;
 
-      /* 16 bytes per invocation, 64 invocations per workgroup */
-      header.copy_dispatch_size[0] = DIV_ROUND_UP(header.compacted_size, 16 * 64);
-      header.copy_dispatch_size[1] = 1;
-      header.copy_dispatch_size[2] = 1;
-
-      header.serialization_size =
-         header.compacted_size + align(sizeof(struct radv_accel_struct_serialization_header) +
-                                          sizeof(uint64_t) * header.instance_count,
-                                       128);
-
-      header.size = accel_struct->size;
+      fill_accel_struct_header(&header);
 
       radv_update_buffer_cp(cmd_buffer,
                             radv_buffer_get_va(accel_struct->bo) + accel_struct->mem_offset + base,



More information about the mesa-commit mailing list