From c7e0a8a6f7e0146b2830cc4ae3c4865dda63c6b6 Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Mon, 13 Sep 2021 01:31:43 +0200 Subject: [PATCH] radv: Add CPU copying of acceleration structures. Reviewed-by: Samuel Pitoiset Part-of: --- 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 0ae82c0..7231acc 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) { -- 2.7.4