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