From 283207beb084ac2536ada7fe77d1e0d0eeb6a451 Mon Sep 17 00:00:00 2001 From: Adam Sawicki Date: Fri, 13 Oct 2017 17:54:47 +0200 Subject: [PATCH] Renamed VMA_ALLOCATOR_ flags to VMA_ALLOCATOR_CREATE_. Improved support for VK_KHR_dedicated_allocation. --- bin/VulkanSample_Release_2015.exe | Bin 100352 -> 100864 bytes src/vk_mem_alloc.h | 104 +++++++++++++++++++----------- 2 files changed, 67 insertions(+), 37 deletions(-) diff --git a/bin/VulkanSample_Release_2015.exe b/bin/VulkanSample_Release_2015.exe index ac61f75c482664fee170124e8673b35de9e29d90..e04c305f0442153244205c6e850f15e146822cab 100644 GIT binary patch delta 32026 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 diff --git a/src/vk_mem_alloc.h b/src/vk_mem_alloc.h index 47116a4..3fb231e 100644 --- a/src/vk_mem_alloc.h +++ b/src/vk_mem_alloc.h @@ -380,7 +380,7 @@ To do it, fill optional member VmaAllocatorCreateInfo::pHeapSizeLimit. - By default, all calls to functions that take `VmaAllocator` as first parameter are safe to call from multiple threads simultaneously because they are synchronized internally when needed. -- When the allocator is created with `VMA_ALLOCATOR_EXTERNALLY_SYNCHRONIZED_BIT` +- When the allocator is created with `VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT` flag, calls to functions that take such `VmaAllocator` object must be synchronized externally. - Access to a `VmaAllocation` object must be externally synchronized. For example, @@ -427,12 +427,12 @@ typedef struct VmaDeviceMemoryCallbacks { } VmaDeviceMemoryCallbacks; /// Flags for created VmaAllocator. -typedef enum VmaAllocatorFlagBits { +typedef enum VmaAllocatorCreateFlagBits { /** \brief Allocator and all objects created from it will not be synchronized internally, so you must guarantee they are used from only one thread at a time or synchronized externally by you. Using this flag may increase performance because internal mutexes are not used. */ - VMA_ALLOCATOR_EXTERNALLY_SYNCHRONIZED_BIT = 0x00000001, + VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT = 0x00000001, /** \brief Enables usage of VK_KHR_dedicated_allocation extension. Using this extenion will automatically allocate dedicated blocks of memory for @@ -460,11 +460,11 @@ validation layer. You can ignore them. > vkBindBufferMemory(): Binding memory to buffer 0x2d but vkGetBufferMemoryRequirements() has not been called on that buffer. */ - VMA_ALLOCATOR_KHR_DEDICATED_ALLOCATION_BIT = 0x00000002, + VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT = 0x00000002, - VMA_ALLOCATOR_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF -} VmaAllocatorFlagBits; -typedef VkFlags VmaAllocatorFlags; + VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VmaAllocatorCreateFlagBits; +typedef VkFlags VmaAllocatorCreateFlags; /** \brief Pointers to some Vulkan functions - a subset used by the library. @@ -492,8 +492,8 @@ typedef struct VmaVulkanFunctions { /// Description of a Allocator to be created. typedef struct VmaAllocatorCreateInfo { - /// Flags for created allocator. Use VmaAllocatorFlagBits enum. - VmaAllocatorFlags flags; + /// Flags for created allocator. Use VmaAllocatorCreateFlagBits enum. + VmaAllocatorCreateFlags flags; /// Vulkan physical device. /** It must be valid throughout whole lifetime of created allocator. */ VkPhysicalDevice physicalDevice; @@ -3521,16 +3521,19 @@ struct VmaAllocator_T void GetBufferMemoryRequirements( VkBuffer hBuffer, VkMemoryRequirements& memReq, - bool& dedicatedAllocation) const; + bool& requiresDedicatedAllocation, + bool& prefersDedicatedAllocation) const; void GetImageMemoryRequirements( VkImage hImage, VkMemoryRequirements& memReq, - bool& dedicatedAllocation) const; + bool& requiresDedicatedAllocation, + bool& prefersDedicatedAllocation) const; // Main allocation function. VkResult AllocateMemory( const VkMemoryRequirements& vkMemReq, - bool dedicatedAllocation, + bool requiresDedicatedAllocation, + bool prefersDedicatedAllocation, VkBuffer dedicatedBuffer, VkImage dedicatedImage, const VmaAllocationCreateInfo& createInfo, @@ -6220,8 +6223,8 @@ bool VmaDefragmentator::MoveMakesSense( // VmaAllocator_T VmaAllocator_T::VmaAllocator_T(const VmaAllocatorCreateInfo* pCreateInfo) : - m_UseMutex((pCreateInfo->flags & VMA_ALLOCATOR_EXTERNALLY_SYNCHRONIZED_BIT) == 0), - m_UseKhrDedicatedAllocation((pCreateInfo->flags & VMA_ALLOCATOR_KHR_DEDICATED_ALLOCATION_BIT) != 0), + m_UseMutex((pCreateInfo->flags & VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT) == 0), + m_UseKhrDedicatedAllocation((pCreateInfo->flags & VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT) != 0), m_PhysicalDevice(pCreateInfo->physicalDevice), m_hDevice(pCreateInfo->device), m_AllocationCallbacksSpecified(pCreateInfo->pAllocationCallbacks != VMA_NULL), @@ -6579,7 +6582,8 @@ VkResult VmaAllocator_T::AllocateDedicatedMemory( void VmaAllocator_T::GetBufferMemoryRequirements( VkBuffer hBuffer, VkMemoryRequirements& memReq, - bool& dedicatedAllocation) const + bool& requiresDedicatedAllocation, + bool& prefersDedicatedAllocation) const { if(m_UseKhrDedicatedAllocation) { @@ -6594,21 +6598,22 @@ void VmaAllocator_T::GetBufferMemoryRequirements( (*m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR)(m_hDevice, &memReqInfo, &memReq2); memReq = memReq2.memoryRequirements; - dedicatedAllocation = - (memDedicatedReq.requiresDedicatedAllocation != VK_FALSE) || - (memDedicatedReq.prefersDedicatedAllocation != VK_FALSE); + requiresDedicatedAllocation = (memDedicatedReq.requiresDedicatedAllocation != VK_FALSE); + prefersDedicatedAllocation = (memDedicatedReq.prefersDedicatedAllocation != VK_FALSE); } else { (*m_VulkanFunctions.vkGetBufferMemoryRequirements)(m_hDevice, hBuffer, &memReq); - dedicatedAllocation = false; + requiresDedicatedAllocation = false; + prefersDedicatedAllocation = false; } } void VmaAllocator_T::GetImageMemoryRequirements( VkImage hImage, VkMemoryRequirements& memReq, - bool& dedicatedAllocation) const + bool& requiresDedicatedAllocation, + bool& prefersDedicatedAllocation) const { if(m_UseKhrDedicatedAllocation) { @@ -6623,20 +6628,21 @@ void VmaAllocator_T::GetImageMemoryRequirements( (*m_VulkanFunctions.vkGetImageMemoryRequirements2KHR)(m_hDevice, &memReqInfo, &memReq2); memReq = memReq2.memoryRequirements; - dedicatedAllocation = - (memDedicatedReq.requiresDedicatedAllocation != VK_FALSE) || - (memDedicatedReq.prefersDedicatedAllocation != VK_FALSE); + requiresDedicatedAllocation = (memDedicatedReq.requiresDedicatedAllocation != VK_FALSE); + prefersDedicatedAllocation = (memDedicatedReq.prefersDedicatedAllocation != VK_FALSE); } else { (*m_VulkanFunctions.vkGetImageMemoryRequirements)(m_hDevice, hImage, &memReq); - dedicatedAllocation = false; + requiresDedicatedAllocation = false; + prefersDedicatedAllocation = false; } } VkResult VmaAllocator_T::AllocateMemory( const VkMemoryRequirements& vkMemReq, - bool dedicatedAllocation, + bool requiresDedicatedAllocation, + bool prefersDedicatedAllocation, VkBuffer dedicatedBuffer, VkImage dedicatedImage, const VmaAllocationCreateInfo& createInfo, @@ -6649,6 +6655,19 @@ VkResult VmaAllocator_T::AllocateMemory( VMA_ASSERT(0 && "Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT together with VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT makes no sense."); return VK_ERROR_OUT_OF_DEVICE_MEMORY; } + if(requiresDedicatedAllocation) + { + if((createInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) != 0) + { + VMA_ASSERT(0 && "VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT specified while dedicated allocation is required."); + return VK_ERROR_OUT_OF_DEVICE_MEMORY; + } + if(createInfo.pool != VK_NULL_HANDLE) + { + VMA_ASSERT(0 && "Pool specified while dedicated allocation is required."); + return VK_ERROR_OUT_OF_DEVICE_MEMORY; + } + } if((createInfo.pool != VK_NULL_HANDLE) && ((createInfo.flags & (VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT)) != 0)) { @@ -6676,7 +6695,7 @@ VkResult VmaAllocator_T::AllocateMemory( { res = AllocateMemoryOfType( vkMemReq, - dedicatedAllocation, + requiresDedicatedAllocation || prefersDedicatedAllocation, dedicatedBuffer, dedicatedImage, createInfo, @@ -6701,7 +6720,7 @@ VkResult VmaAllocator_T::AllocateMemory( { res = AllocateMemoryOfType( vkMemReq, - dedicatedAllocation, + requiresDedicatedAllocation || prefersDedicatedAllocation, dedicatedBuffer, dedicatedImage, createInfo, @@ -7364,12 +7383,15 @@ static VkResult AllocateMemoryForImage( VMA_ASSERT(allocator && (image != VK_NULL_HANDLE) && pAllocationCreateInfo && pAllocation); VkMemoryRequirements vkMemReq = {}; - bool dedicatedAllocation = false; - allocator->GetImageMemoryRequirements(image, vkMemReq, dedicatedAllocation); + bool requiresDedicatedAllocation = false; + bool prefersDedicatedAllocation = false; + allocator->GetImageMemoryRequirements(image, vkMemReq, + requiresDedicatedAllocation, prefersDedicatedAllocation); return allocator->AllocateMemory( vkMemReq, - dedicatedAllocation, + requiresDedicatedAllocation, + prefersDedicatedAllocation, VK_NULL_HANDLE, // dedicatedBuffer image, // dedicatedImage *pAllocationCreateInfo, @@ -7714,7 +7736,8 @@ VkResult vmaAllocateMemory( VkResult result = allocator->AllocateMemory( *pVkMemoryRequirements, - false, // dedicatedAllocation + false, // requiresDedicatedAllocation + false, // prefersDedicatedAllocation VK_NULL_HANDLE, // dedicatedBuffer VK_NULL_HANDLE, // dedicatedImage *pCreateInfo, @@ -7743,12 +7766,16 @@ VkResult vmaAllocateMemoryForBuffer( VMA_DEBUG_GLOBAL_MUTEX_LOCK VkMemoryRequirements vkMemReq = {}; - bool dedicatedAllocation = false; - allocator->GetBufferMemoryRequirements(buffer, vkMemReq, dedicatedAllocation); + bool requiresDedicatedAllocation = false; + bool prefersDedicatedAllocation = false; + allocator->GetBufferMemoryRequirements(buffer, vkMemReq, + requiresDedicatedAllocation, + prefersDedicatedAllocation); VkResult result = allocator->AllocateMemory( vkMemReq, - dedicatedAllocation, + requiresDedicatedAllocation, + prefersDedicatedAllocation, buffer, // dedicatedBuffer VK_NULL_HANDLE, // dedicatedImage *pCreateInfo, @@ -7930,13 +7957,16 @@ VkResult vmaCreateBuffer( { // 2. vkGetBufferMemoryRequirements. VkMemoryRequirements vkMemReq = {}; - bool dedicatedAllocation = false; - allocator->GetBufferMemoryRequirements(*pBuffer, vkMemReq, dedicatedAllocation); + bool requiresDedicatedAllocation = false; + bool prefersDedicatedAllocation = false; + allocator->GetBufferMemoryRequirements(*pBuffer, vkMemReq, + requiresDedicatedAllocation, prefersDedicatedAllocation); // 3. Allocate memory using allocator. res = allocator->AllocateMemory( vkMemReq, - dedicatedAllocation, + requiresDedicatedAllocation, + prefersDedicatedAllocation, *pBuffer, // dedicatedBuffer VK_NULL_HANDLE, // dedicatedImage *pAllocationCreateInfo,