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