Further fixes in support for VK_KHR_ray_tracing
diff --git a/src/Doxyfile b/src/Doxyfile index fafad66..3efbdb9 100644 --- a/src/Doxyfile +++ b/src/Doxyfile
@@ -2197,7 +2197,7 @@ # definition found in the source code. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -EXPAND_AS_DEFINED = VMA_DECORATE_RAY_TRACING VMA_DECORATE_RAY_TRACING_CONSTANT VMA_DECORATE_RAY_TRACING_STRING +EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will # remove all references to function-like macros that are alone on a line, have
diff --git a/src/vk_mem_alloc.h b/src/vk_mem_alloc.h index 761f5cf..4a39e0b 100644 --- a/src/vk_mem_alloc.h +++ b/src/vk_mem_alloc.h
@@ -1935,12 +1935,6 @@ #define VMA_CALL_POST #endif -#ifndef VMA_DECORATE_RAY_TRACING - #define VMA_DECORATE_RAY_TRACING(identifier) identifier##KHR - #define VMA_DECORATE_RAY_TRACING_CONSTANT(identifier) identifier##_KHR - #define VMA_DECORATE_RAY_TRACING_STRING(str) str "KHR" -#endif - /** \struct VmaAllocator \brief Represents main object of this library initialized. @@ -2116,10 +2110,10 @@ #if VMA_MEMORY_BUDGET || VMA_VULKAN_VERSION >= 1001000 PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR; #endif - VMA_DECORATE_RAY_TRACING(PFN_vkCreateAccelerationStructure) VMA_DECORATE_RAY_TRACING(vkCreateAccelerationStructure); - VMA_DECORATE_RAY_TRACING(PFN_vkDestroyAccelerationStructure) VMA_DECORATE_RAY_TRACING(vkDestroyAccelerationStructure); - VMA_DECORATE_RAY_TRACING(PFN_vkGetAccelerationStructureMemoryRequirements) VMA_DECORATE_RAY_TRACING(vkGetAccelerationStructureMemoryRequirements); - VMA_DECORATE_RAY_TRACING(PFN_vkBindAccelerationStructureMemory) VMA_DECORATE_RAY_TRACING(vkBindAccelerationStructureMemory); + PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR; + PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR; + PFN_vkGetAccelerationStructureMemoryRequirementsKHR vkGetAccelerationStructureMemoryRequirementsKHR; + PFN_vkBindAccelerationStructureMemoryKHR vkBindAccelerationStructureMemoryKHR; } VmaVulkanFunctions; /// Flags to be used in VmaRecordSettings::flags. @@ -3672,9 +3666,10 @@ */ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateAccelerationStructure( VmaAllocator allocator, - const VMA_DECORATE_RAY_TRACING(VkAccelerationStructureCreateInfo)* pAccelerationStructureCreateInfo, + const VkAccelerationStructureCreateInfoKHR* pAccelerationStructureCreateInfo, + VkAccelerationStructureBuildTypeKHR buildType, const VmaAllocationCreateInfo* pAllocationCreateInfo, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructure)* pAccelerationStructure, + VkAccelerationStructureKHR* pAccelerationStructure, VmaAllocation* pAllocation, VmaAllocationInfo* pAllocationInfo); @@ -3687,14 +3682,15 @@ */ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyAccelerationStructure( VmaAllocator allocator, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructure) accelerationStructrure, + VkAccelerationStructureKHR accelerationStructrure, VmaAllocation allocation); /** \brief Creates a buffer suitable for build or update of ray tracing acceleration structure. The function is similar to vmaCreateBuffer(), but it automatically calculates required size based on given acceleration structure parameters. -`type` must be `VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR` + +`pMemReqInfo->type` must be `VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR` or `VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR`. `pBufferCreateInfo->size` can be zero. If its value not zero, the size of the @@ -3705,8 +3701,7 @@ */ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateAccelerationStructureScratchBuffer( VmaAllocator allocator, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructureMemoryRequirementsType) type, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructure) accelerationStructure, + const VkAccelerationStructureMemoryRequirementsInfoKHR* pMemReqInfo, const VkBufferCreateInfo* pBufferCreateInfo, const VmaAllocationCreateInfo* pAllocationCreateInfo, VkBuffer* pBuffer, @@ -6480,7 +6475,7 @@ const VmaAllocator hAllocator, const VmaAllocation hAllocation, VkDeviceSize allocationLocalOffset, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructure) hAccelerationStructure, + VkAccelerationStructureKHR hAccelerationStructure, const void* pNext); private: @@ -7456,8 +7451,7 @@ bool& requiresDedicatedAllocation, bool& prefersDedicatedAllocation) const; void GetAccelerationStructureMemoryRequirements( - VMA_DECORATE_RAY_TRACING(VkAccelerationStructureMemoryRequirementsType) type, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructure) hAccelerationStructure, + const VkAccelerationStructureMemoryRequirementsInfoKHR* memReqInfo, VkMemoryRequirements& outMemReq) const; // Main allocation function. @@ -7542,7 +7536,7 @@ VkResult BindVulkanAccelerationStructure( VkDeviceMemory memory, VkDeviceSize memoryOffset, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructure) accelerationStructure, + VkAccelerationStructureKHR accelerationStructure, const void* pNext); VkResult Map(VmaAllocation hAllocation, void** ppData); @@ -7561,7 +7555,7 @@ VkResult BindAccelerationStructureMemory( VmaAllocation hAllocation, VkDeviceSize allocationLocalOffset, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructure) hAccelerationStructure, + VkAccelerationStructureKHR hAccelerationStructure, const void* pNext); void FlushOrInvalidateAllocation( @@ -12029,7 +12023,7 @@ const VmaAllocator hAllocator, const VmaAllocation hAllocation, VkDeviceSize allocationLocalOffset, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructure) hAccelerationStructure, + VkAccelerationStructureKHR hAccelerationStructure, const void* pNext) { VMA_ASSERT(hAllocation->GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK && @@ -15452,14 +15446,14 @@ } } #endif // #if VMA_MEMORY_BUDGET - m_VulkanFunctions.VMA_DECORATE_RAY_TRACING(vkCreateAccelerationStructure) = - (VMA_DECORATE_RAY_TRACING(PFN_vkCreateAccelerationStructure))vkGetDeviceProcAddr(m_hDevice, VMA_DECORATE_RAY_TRACING_STRING("vkCreateAccelerationStructure")); - m_VulkanFunctions.VMA_DECORATE_RAY_TRACING(vkDestroyAccelerationStructure) = - (PFN_vkDestroyAccelerationStructureNV)vkGetDeviceProcAddr(m_hDevice, VMA_DECORATE_RAY_TRACING_STRING("vkDestroyAccelerationStructure")); - m_VulkanFunctions.VMA_DECORATE_RAY_TRACING(vkGetAccelerationStructureMemoryRequirements) = - (PFN_vkGetAccelerationStructureMemoryRequirementsNV)vkGetDeviceProcAddr(m_hDevice, VMA_DECORATE_RAY_TRACING_STRING("vkGetAccelerationStructureMemoryRequirements")); - m_VulkanFunctions.VMA_DECORATE_RAY_TRACING(vkBindAccelerationStructureMemory) = - (PFN_vkBindAccelerationStructureMemoryNV)vkGetDeviceProcAddr(m_hDevice, VMA_DECORATE_RAY_TRACING_STRING("vkBindAccelerationStructureMemory")); + m_VulkanFunctions.vkCreateAccelerationStructureKHR = + (PFN_vkCreateAccelerationStructureKHR)vkGetDeviceProcAddr(m_hDevice, "vkCreateAccelerationStructureKHR"); + m_VulkanFunctions.vkDestroyAccelerationStructureKHR = + (PFN_vkDestroyAccelerationStructureNV)vkGetDeviceProcAddr(m_hDevice, "vkDestroyAccelerationStructureKHR"); + m_VulkanFunctions.vkGetAccelerationStructureMemoryRequirementsKHR = + (PFN_vkGetAccelerationStructureMemoryRequirementsNV)vkGetDeviceProcAddr(m_hDevice, "vkGetAccelerationStructureMemoryRequirementsKHR"); + m_VulkanFunctions.vkBindAccelerationStructureMemory = + (PFN_vkBindAccelerationStructureMemoryNV)vkGetDeviceProcAddr(m_hDevice, "vkBindAccelerationStructureMemoryKHR"); #define VMA_COPY_IF_NOT_NULL(funcName) \ if(pVulkanFunctions->funcName != VMA_NULL) m_VulkanFunctions.funcName = pVulkanFunctions->funcName; @@ -15494,10 +15488,10 @@ #if VMA_MEMORY_BUDGET VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceMemoryProperties2KHR); #endif - VMA_COPY_IF_NOT_NULL(VMA_DECORATE_RAY_TRACING(vkCreateAccelerationStructure)); - VMA_COPY_IF_NOT_NULL(VMA_DECORATE_RAY_TRACING(vkDestroyAccelerationStructure)); - VMA_COPY_IF_NOT_NULL(VMA_DECORATE_RAY_TRACING(vkGetAccelerationStructureMemoryRequirements)); - VMA_COPY_IF_NOT_NULL(VMA_DECORATE_RAY_TRACING(vkBindAccelerationStructureMemory)); + VMA_COPY_IF_NOT_NULL(vkCreateAccelerationStructureKHR); + VMA_COPY_IF_NOT_NULL(vkDestroyAccelerationStructureKHR); + VMA_COPY_IF_NOT_NULL(vkGetAccelerationStructureMemoryRequirementsKHR); + VMA_COPY_IF_NOT_NULL(vkBindAccelerationStructureMemoryKHR); } #undef VMA_COPY_IF_NOT_NULL @@ -15539,10 +15533,10 @@ VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR != VMA_NULL); } #endif - VMA_ASSERT(m_VulkanFunctions.VMA_DECORATE_RAY_TRACING(vkCreateAccelerationStructure) != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.VMA_DECORATE_RAY_TRACING(vkDestroyAccelerationStructure) != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.VMA_DECORATE_RAY_TRACING(vkGetAccelerationStructureMemoryRequirements) != VMA_NULL); - VMA_ASSERT(m_VulkanFunctions.VMA_DECORATE_RAY_TRACING(vkBindAccelerationStructureMemory) != VMA_NULL); + VMA_ASSERT(m_VulkanFunctions.vkCreateAccelerationStructureKHR != VMA_NULL); + VMA_ASSERT(m_VulkanFunctions.vkDestroyAccelerationStructureKHR != VMA_NULL); + VMA_ASSERT(m_VulkanFunctions.vkGetAccelerationStructureMemoryRequirementsKHR != VMA_NULL); + VMA_ASSERT(m_VulkanFunctions.vkBindAccelerationStructureMemoryKHR != VMA_NULL); } VkDeviceSize VmaAllocator_T::CalcPreferredBlockSize(uint32_t memTypeIndex) @@ -15922,17 +15916,12 @@ } void VmaAllocator_T::GetAccelerationStructureMemoryRequirements( - VMA_DECORATE_RAY_TRACING(VkAccelerationStructureMemoryRequirementsType) type, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructure) hAccelerationStructure, + const VkAccelerationStructureMemoryRequirementsInfoKHR* memReqInfo, VkMemoryRequirements& outMemReq) const { - VMA_DECORATE_RAY_TRACING(VkAccelerationStructureMemoryRequirementsInfo) memReqInfo = { VMA_DECORATE_RAY_TRACING_CONSTANT(VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO) }; - memReqInfo.type = VMA_DECORATE_RAY_TRACING_CONSTANT(VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT); - memReqInfo.accelerationStructure = hAccelerationStructure; - VkMemoryRequirements2 memReq2 = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 }; - (*m_VulkanFunctions.VMA_DECORATE_RAY_TRACING(vkGetAccelerationStructureMemoryRequirements))(m_hDevice, &memReqInfo, &memReq2); + (*m_VulkanFunctions.vkGetAccelerationStructureMemoryRequirementsKHR)(m_hDevice, memReqInfo, &memReq2); outMemReq = memReq2.memoryRequirements; } @@ -16710,15 +16699,15 @@ VkResult VmaAllocator_T::BindVulkanAccelerationStructure( VkDeviceMemory memory, VkDeviceSize memoryOffset, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructure) accelerationStructure, + VkAccelerationStructureKHR accelerationStructure, const void* pNext) { - VMA_DECORATE_RAY_TRACING(VkBindAccelerationStructureMemoryInfo) bindInfo = { VMA_DECORATE_RAY_TRACING_CONSTANT(VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO) }; + VkBindAccelerationStructureMemoryInfoKHR bindInfo = { VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_KHR }; bindInfo.pNext = pNext; bindInfo.accelerationStructure = accelerationStructure; bindInfo.memory = memory; bindInfo.memoryOffset = memoryOffset; - return (*m_VulkanFunctions.VMA_DECORATE_RAY_TRACING(vkBindAccelerationStructureMemory))(m_hDevice, 1, &bindInfo); + return (*m_VulkanFunctions.vkBindAccelerationStructureMemoryKHR)(m_hDevice, 1, &bindInfo); } VkResult VmaAllocator_T::Map(VmaAllocation hAllocation, void** ppData) @@ -16822,7 +16811,7 @@ VkResult VmaAllocator_T::BindAccelerationStructureMemory( VmaAllocation hAllocation, VkDeviceSize allocationLocalOffset, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructure) hAccelerationStructure, + VkAccelerationStructureKHR hAccelerationStructure, const void* pNext) { VkResult res = VK_SUCCESS; @@ -18638,9 +18627,10 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateAccelerationStructure( VmaAllocator allocator, - const VMA_DECORATE_RAY_TRACING(VkAccelerationStructureCreateInfo)* pAccelerationStructureCreateInfo, + const VkAccelerationStructureCreateInfoKHR* pAccelerationStructureCreateInfo, + VkAccelerationStructureBuildTypeKHR buildType, const VmaAllocationCreateInfo* pAllocationCreateInfo, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructure)* pAccelerationStructure, + VkAccelerationStructureKHR* pAccelerationStructure, VmaAllocation* pAllocation, VmaAllocationInfo* pAllocationInfo) { @@ -18650,11 +18640,11 @@ VMA_DEBUG_GLOBAL_MUTEX_LOCK - *pAccelerationStructure = VK_NULL_HANDLE; + *pAccelerationStructure = VK_NULL_HANDLE; *pAllocation = VK_NULL_HANDLE; // 1. Create VkAccelerationStructureKHR. - VkResult res = (*allocator->GetVulkanFunctions().VMA_DECORATE_RAY_TRACING(vkCreateAccelerationStructure))( + VkResult res = (*allocator->GetVulkanFunctions().vkCreateAccelerationStructureKHR)( allocator->m_hDevice, pAccelerationStructureCreateInfo, allocator->GetAllocationCallbacks(), @@ -18662,12 +18652,16 @@ if(res >= 0) { // 2. vkGetAccelerationStructureMemoryRequirements. - VkMemoryRequirements vkMemReq = {}; const bool requiresDedicatedAllocation = false; const bool prefersDedicatedAllocation = false; - allocator->GetAccelerationStructureMemoryRequirements( - VMA_DECORATE_RAY_TRACING_CONSTANT(VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT), - *pAccelerationStructure, vkMemReq); + + VkAccelerationStructureMemoryRequirementsInfoKHR memReqInfo = { VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_KHR }; + memReqInfo.type = VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR; + memReqInfo.buildType = buildType; + memReqInfo.accelerationStructure = *pAccelerationStructure; + + VkMemoryRequirements vkMemReq = {}; + allocator->GetAccelerationStructureMemoryRequirements(&memReqInfo, vkMemReq); // 3. Allocate memory using allocator. res = allocator->AllocateMemory( @@ -18710,11 +18704,11 @@ 1, // allocationCount pAllocation); *pAllocation = VK_NULL_HANDLE; - (*allocator->GetVulkanFunctions().VMA_DECORATE_RAY_TRACING(vkDestroyAccelerationStructure))(allocator->m_hDevice, *pAccelerationStructure, allocator->GetAllocationCallbacks()); + (*allocator->GetVulkanFunctions().vkDestroyAccelerationStructureKHR)(allocator->m_hDevice, *pAccelerationStructure, allocator->GetAllocationCallbacks()); *pAccelerationStructure = VK_NULL_HANDLE; return res; } - (*allocator->GetVulkanFunctions().VMA_DECORATE_RAY_TRACING(vkDestroyAccelerationStructure))(allocator->m_hDevice, *pAccelerationStructure, allocator->GetAllocationCallbacks()); + (*allocator->GetVulkanFunctions().vkDestroyAccelerationStructureKHR)(allocator->m_hDevice, *pAccelerationStructure, allocator->GetAllocationCallbacks()); *pAccelerationStructure = VK_NULL_HANDLE; return res; } @@ -18723,7 +18717,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyAccelerationStructure( VmaAllocator allocator, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructure) accelerationStructure, + VkAccelerationStructureKHR accelerationStructure, VmaAllocation allocation) { VMA_ASSERT(allocator); @@ -18746,7 +18740,7 @@ if(accelerationStructure != VK_NULL_HANDLE) { - (*allocator->GetVulkanFunctions().VMA_DECORATE_RAY_TRACING(vkDestroyAccelerationStructure))(allocator->m_hDevice, accelerationStructure, allocator->GetAllocationCallbacks()); + (*allocator->GetVulkanFunctions().vkDestroyAccelerationStructureKHR)(allocator->m_hDevice, accelerationStructure, allocator->GetAllocationCallbacks()); } if(allocation != VK_NULL_HANDLE) { @@ -18758,24 +18752,23 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateAccelerationStructureScratchBuffer( VmaAllocator allocator, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructureMemoryRequirementsType) type, - VMA_DECORATE_RAY_TRACING(VkAccelerationStructure) accelerationStructure, + const VkAccelerationStructureMemoryRequirementsInfoKHR* pMemReqInfo, const VkBufferCreateInfo* pBufferCreateInfo, const VmaAllocationCreateInfo* pAllocationCreateInfo, VkBuffer* pBuffer, VmaAllocation* pAllocation, VmaAllocationInfo* pAllocationInfo) { - VMA_ASSERT(allocator && accelerationStructure != VK_NULL_HANDLE && pBufferCreateInfo && pAllocationCreateInfo && pBuffer && pAllocation); - VMA_ASSERT(type == VMA_DECORATE_RAY_TRACING_CONSTANT(VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH) || - type == VMA_DECORATE_RAY_TRACING_CONSTANT(VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH)); + VMA_ASSERT(allocator && pMemReqInfo && accelerationStructure != VK_NULL_HANDLE && pBufferCreateInfo && pAllocationCreateInfo && pBuffer && pAllocation); + VMA_ASSERT(pMemReqInfo->type == VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR || + pMemReqInfo->type == VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR); VMA_DEBUG_LOG("vmaCreateAccelerationStructureScratchBuffer"); VMA_DEBUG_GLOBAL_MUTEX_LOCK VkMemoryRequirements memReq = {}; - allocator->GetAccelerationStructureMemoryRequirements(type, accelerationStructure, memReq); + allocator->GetAccelerationStructureMemoryRequirements(pMemReqInfo, memReq); VkBufferCreateInfo bufCreateInfoCopy = *pBufferCreateInfo; bufCreateInfoCopy.size = VMA_MAX(bufCreateInfoCopy.size, memReq.size);