From 217dc750e7bc3ee72d615455b69a8aae42ae68b8 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 14 Feb 2025 08:20:15 +0100 Subject: [PATCH] vulkan: add support for vkCreateAccelerationStructure2KHR() Signed-off-by: Samuel Pitoiset Part-of: --- .../runtime/vk_acceleration_structure.c | 22 +++++++++++++++++++ .../runtime/vk_acceleration_structure.h | 9 ++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/vulkan/runtime/vk_acceleration_structure.c b/src/vulkan/runtime/vk_acceleration_structure.c index a4bfef1d4d7..0e477cc0d40 100644 --- a/src/vulkan/runtime/vk_acceleration_structure.c +++ b/src/vulkan/runtime/vk_acceleration_structure.c @@ -93,6 +93,28 @@ vk_common_CreateAccelerationStructureKHR(VkDevice _device, return VK_SUCCESS; } +VKAPI_ATTR VkResult VKAPI_CALL +vk_common_CreateAccelerationStructure2KHR(VkDevice _device, + const VkAccelerationStructureCreateInfo2KHR *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkAccelerationStructureKHR *pAccelerationStructure) +{ + VK_FROM_HANDLE(vk_device, device, _device); + + struct vk_acceleration_structure *accel_struct = vk_object_zalloc( + device, pAllocator, sizeof(struct vk_acceleration_structure), + VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR); + + if (!accel_struct) + return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); + + accel_struct->addr = pCreateInfo->addressRange.address; + accel_struct->size = pCreateInfo->addressRange.size; + + *pAccelerationStructure = vk_acceleration_structure_to_handle(accel_struct); + return VK_SUCCESS; +} + VKAPI_ATTR void VKAPI_CALL vk_common_DestroyAccelerationStructureKHR(VkDevice _device, VkAccelerationStructureKHR accelerationStructure, diff --git a/src/vulkan/runtime/vk_acceleration_structure.h b/src/vulkan/runtime/vk_acceleration_structure.h index 3d27538b6b4..2e7a1058f17 100644 --- a/src/vulkan/runtime/vk_acceleration_structure.h +++ b/src/vulkan/runtime/vk_acceleration_structure.h @@ -69,6 +69,7 @@ struct vk_acceleration_structure { struct vk_buffer *buffer; + uint64_t addr; uint64_t offset; uint64_t size; }; @@ -76,8 +77,12 @@ struct vk_acceleration_structure { static inline VkDeviceAddress vk_acceleration_structure_get_va(const struct vk_acceleration_structure *accel_struct) { - assert(accel_struct->buffer != NULL); - return vk_buffer_address(accel_struct->buffer, accel_struct->offset); + if (accel_struct->buffer) { + return vk_buffer_address(accel_struct->buffer, accel_struct->offset); + } else { + assert(accel_struct->addr != 0); + return accel_struct->addr; + } } VK_DEFINE_NONDISP_HANDLE_CASTS(vk_acceleration_structure, base, VkAccelerationStructureKHR,