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);