Mesa (main): radv: Add CPU copying of acceleration structures.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Oct 1 14:13:37 UTC 2021
Module: Mesa
Branch: main
Commit: c7e0a8a6f7e0146b2830cc4ae3c4865dda63c6b6
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c7e0a8a6f7e0146b2830cc4ae3c4865dda63c6b6
Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date: Mon Sep 13 01:31:43 2021 +0200
radv: Add CPU copying of acceleration structures.
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12840>
---
src/amd/vulkan/radv_acceleration_structure.c | 29 ++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/src/amd/vulkan/radv_acceleration_structure.c b/src/amd/vulkan/radv_acceleration_structure.c
index 0ae82c07f9c..7231accff2c 100644
--- a/src/amd/vulkan/radv_acceleration_structure.c
+++ b/src/amd/vulkan/radv_acceleration_structure.c
@@ -669,6 +669,35 @@ radv_BuildAccelerationStructuresKHR(
return result;
}
+VkResult
+radv_CopyAccelerationStructureKHR(VkDevice _device, VkDeferredOperationKHR deferredOperation,
+ const VkCopyAccelerationStructureInfoKHR *pInfo)
+{
+ RADV_FROM_HANDLE(radv_device, device, _device);
+ RADV_FROM_HANDLE(radv_acceleration_structure, src_struct, pInfo->src);
+ RADV_FROM_HANDLE(radv_acceleration_structure, dst_struct, pInfo->dst);
+
+ char *src_ptr = (char *)device->ws->buffer_map(src_struct->bo);
+ if (!src_ptr)
+ return VK_ERROR_OUT_OF_HOST_MEMORY;
+
+ char *dst_ptr = (char *)device->ws->buffer_map(dst_struct->bo);
+ if (!dst_ptr) {
+ device->ws->buffer_unmap(src_struct->bo);
+ return VK_ERROR_OUT_OF_HOST_MEMORY;
+ }
+
+ src_ptr += src_struct->mem_offset;
+ dst_ptr += dst_struct->mem_offset;
+
+ const struct radv_accel_struct_header *header = (const void *)src_ptr;
+ memcpy(dst_ptr, src_ptr, header->compacted_size);
+
+ device->ws->buffer_unmap(src_struct->bo);
+ device->ws->buffer_unmap(dst_struct->bo);
+ return VK_SUCCESS;
+}
+
static nir_ssa_def *
get_indices(nir_builder *b, nir_ssa_def *addr, nir_ssa_def *type, nir_ssa_def *id)
{
More information about the mesa-commit
mailing list