Removed unused variable

Also updated and regenerated documentation.
Closes #188
diff --git a/docs/html/allocation_annotation.html b/docs/html/allocation_annotation.html
index 6e16aa6..cd4bf38 100644
--- a/docs/html/allocation_annotation.html
+++ b/docs/html/allocation_annotation.html
@@ -84,18 +84,18 @@
 <div class="line">VkBuffer buffer;</div>
 <div class="line"><a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation;</div>
 <div class="line"><a class="code" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &amp;bufferInfo, &amp;allocCreateInfo, &amp;buffer, &amp;allocation, <span class="keyword">nullptr</span>);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2900</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a8259e85c272683434f4abb4ddddffe19"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">VmaAllocationCreateInfo::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Custom general-purpose pointer that will be stored in VmaAllocation, can be read as VmaAllocationInfo...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2939</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2908</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2897</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a8259e85c272683434f4abb4ddddffe19"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">VmaAllocationCreateInfo::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Custom general-purpose pointer that will be stored in VmaAllocation, can be read as VmaAllocationInfo...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2936</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2905</div></div>
 <div class="ttc" id="astruct_vma_allocation_html"><div class="ttname"><a href="struct_vma_allocation.html">VmaAllocation</a></div><div class="ttdoc">Represents single memory allocation.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2742</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2739</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
 </div><!-- fragment --><p>The pointer may be later retrieved as <a class="el" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13" title="Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vma...">VmaAllocationInfo::pUserData</a>:</p>
 <div class="fragment"><div class="line"><a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> allocInfo;</div>
 <div class="line"><a class="code" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(allocator, allocation, &amp;allocInfo);</div>
 <div class="line">MyBufferMetadata* pMetadata = (MyBufferMetadata*)allocInfo.<a class="code" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">pUserData</a>;</div>
-<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3267</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html_adc507656149c04de7ed95d0042ba2a13"><div class="ttname"><a href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">VmaAllocationInfo::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vma...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3316</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3264</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html_adc507656149c04de7ed95d0042ba2a13"><div class="ttname"><a href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">VmaAllocationInfo::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vma...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3313</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a86dd08aba8633bfa4ad0df2e76481d8b"><div class="ttname"><a href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a></div><div class="ttdeci">void vmaGetAllocationInfo(VmaAllocator allocator, VmaAllocation allocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">Returns current information about specified allocation and atomically marks it as used in current fra...</div></div>
 </div><!-- fragment --><p>It can also be changed using function <a class="el" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a>.</p>
 <p>Values of (non-zero) allocations' <code>pUserData</code> are printed in JSON report created by <a class="el" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0" title="Builds and returns statistics as string in JSON format.">vmaBuildStatsString()</a>, in hexadecimal form.</p>
@@ -116,9 +116,9 @@
 <div class="line">VkImage image;</div>
 <div class="line"><a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation;</div>
 <div class="line"><a class="code" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a>(allocator, &amp;imageInfo, &amp;allocCreateInfo, &amp;image, &amp;allocation, <span class="keyword">nullptr</span>);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2902</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2899</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a02a94f25679275851a53e82eacbcfc73"><div class="ttname"><a href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a></div><div class="ttdeci">VkResult vmaCreateImage(VmaAllocator allocator, const VkImageCreateInfo *pImageCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkImage *pImage, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">Function similar to vmaCreateBuffer().</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2845</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2842</div></div>
 </div><!-- fragment --><p>The value of <code>pUserData</code> pointer of the allocation will be different than the one you passed when setting allocation's name - pointing to a buffer managed internally that holds copy of the string.</p>
 <div class="fragment"><div class="line"><a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> allocInfo;</div>
 <div class="line"><a class="code" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(allocator, allocation, &amp;allocInfo);</div>
diff --git a/docs/html/choosing_memory_type.html b/docs/html/choosing_memory_type.html
index 8cd2fae..6823a35 100644
--- a/docs/html/choosing_memory_type.html
+++ b/docs/html/choosing_memory_type.html
@@ -93,10 +93,10 @@
 <div class="line">VkBuffer buffer;</div>
 <div class="line"><a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation;</div>
 <div class="line"><a class="code" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &amp;bufferInfo, &amp;allocInfo, &amp;buffer, &amp;allocation, <span class="keyword">nullptr</span>);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2900</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2908</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2897</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2905</div></div>
 <div class="ttc" id="astruct_vma_allocation_html"><div class="ttname"><a href="struct_vma_allocation.html">VmaAllocation</a></div><div class="ttdoc">Represents single memory allocation.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2742</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2739</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
 </div><!-- fragment --><h1><a class="anchor" id="choosing_memory_type_required_preferred_flags"></a>
 Required and preferred flags</h1>
@@ -109,10 +109,10 @@
 <div class="line">VkBuffer buffer;</div>
 <div class="line"><a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation;</div>
 <div class="line"><a class="code" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &amp;bufferInfo, &amp;allocInfo, &amp;buffer, &amp;allocation, <span class="keyword">nullptr</span>);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a7fe8d81a1ad10b2a2faacacee5b15d6d"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">VmaAllocationCreateInfo::preferredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags preferredFlags</div><div class="ttdoc">Flags that preferably should be set in a memory type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2918</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a9166390303ff42d783305bc31c2b6b90"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">VmaAllocationCreateInfo::requiredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags requiredFlags</div><div class="ttdoc">Flags that must be set in a Memory Type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2913</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2902</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_MAPPED_BIT</div><div class="ttdoc">Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2819</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a7fe8d81a1ad10b2a2faacacee5b15d6d"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">VmaAllocationCreateInfo::preferredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags preferredFlags</div><div class="ttdoc">Flags that preferably should be set in a memory type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2915</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a9166390303ff42d783305bc31c2b6b90"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">VmaAllocationCreateInfo::requiredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags requiredFlags</div><div class="ttdoc">Flags that must be set in a Memory Type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2910</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2899</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_MAPPED_BIT</div><div class="ttdoc">Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2816</div></div>
 </div><!-- fragment --><p>A memory type is chosen that has all the required flags and as many preferred flags set as possible.</p>
 <p>If you use <a class="el" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910" title="Intended usage of memory.">VmaAllocationCreateInfo::usage</a>, it is just internally converted to a set of required and preferred flags.</p>
 <h1><a class="anchor" id="choosing_memory_type_explicit_memory_types"></a>
@@ -127,7 +127,7 @@
 <div class="line">VkBuffer buffer;</div>
 <div class="line"><a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation;</div>
 <div class="line"><a class="code" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &amp;bufferInfo, &amp;allocInfo, &amp;buffer, &amp;allocation, <span class="keyword">nullptr</span>);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a3bf940c0271d85d6ba32a4d820075055"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">VmaAllocationCreateInfo::memoryTypeBits</a></div><div class="ttdeci">uint32_t memoryTypeBits</div><div class="ttdoc">Bitmask containing one bit set for every memory type acceptable for this allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2926</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a3bf940c0271d85d6ba32a4d820075055"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">VmaAllocationCreateInfo::memoryTypeBits</a></div><div class="ttdeci">uint32_t memoryTypeBits</div><div class="ttdoc">Bitmask containing one bit set for every memory type acceptable for this allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2923</div></div>
 </div><!-- fragment --><h1><a class="anchor" id="choosing_memory_type_custom_memory_pools"></a>
 Custom memory pools</h1>
 <p>If you allocate from custom memory pool, all the ways of specifying memory requirements described above are not applicable and the aforementioned members of <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> structure are ignored. Memory type is selected explicitly when creating the pool and then used to make all the allocations from that pool. For further details, see <a class="el" href="custom_memory_pools.html">Custom memory pools</a>.</p>
diff --git a/docs/html/custom_memory_pools.html b/docs/html/custom_memory_pools.html
index 4e2c7f6..fd7a5a4 100644
--- a/docs/html/custom_memory_pools.html
+++ b/docs/html/custom_memory_pools.html
@@ -105,13 +105,13 @@
 <div class="line"><a class="code" href="struct_vma_allocation.html">VmaAllocation</a> alloc;</div>
 <div class="line"><a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> allocInfo;</div>
 <div class="line"><a class="code" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &amp;bufCreateInfo, &amp;allocCreateInfo, &amp;buf, &amp;alloc, &amp;allocInfo);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2900</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a6272c0555cfd1fe28bff1afeb6190150"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">VmaAllocationCreateInfo::pool</a></div><div class="ttdeci">VmaPool pool</div><div class="ttdoc">Pool that this allocation should be created in.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2932</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2897</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a6272c0555cfd1fe28bff1afeb6190150"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">VmaAllocationCreateInfo::pool</a></div><div class="ttdeci">VmaPool pool</div><div class="ttdoc">Pool that this allocation should be created in.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2929</div></div>
 <div class="ttc" id="astruct_vma_allocation_html"><div class="ttname"><a href="struct_vma_allocation.html">VmaAllocation</a></div><div class="ttdoc">Represents single memory allocation.</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3267</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html"><div class="ttname"><a href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a></div><div class="ttdoc">Describes parameter of created VmaPool.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3068</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html_a596fa76b685d3f1f688f84a709a5b319"><div class="ttname"><a href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">VmaPoolCreateInfo::memoryTypeIndex</a></div><div class="ttdeci">uint32_t memoryTypeIndex</div><div class="ttdoc">Vulkan memory type index to allocate this pool from.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3071</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html_ae41142f2834fcdc82baa4883c187b75c"><div class="ttname"><a href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">VmaPoolCreateInfo::maxBlockCount</a></div><div class="ttdeci">size_t maxBlockCount</div><div class="ttdoc">Maximum number of blocks that can be allocated in this pool. Optional.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3096</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3264</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html"><div class="ttname"><a href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a></div><div class="ttdoc">Describes parameter of created VmaPool.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3065</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html_a596fa76b685d3f1f688f84a709a5b319"><div class="ttname"><a href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">VmaPoolCreateInfo::memoryTypeIndex</a></div><div class="ttdeci">uint32_t memoryTypeIndex</div><div class="ttdoc">Vulkan memory type index to allocate this pool from.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3068</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html_ae41142f2834fcdc82baa4883c187b75c"><div class="ttname"><a href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">VmaPoolCreateInfo::maxBlockCount</a></div><div class="ttdeci">size_t maxBlockCount</div><div class="ttdoc">Maximum number of blocks that can be allocated in this pool. Optional.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3093</div></div>
 <div class="ttc" id="astruct_vma_pool_html"><div class="ttname"><a href="struct_vma_pool.html">VmaPool</a></div><div class="ttdoc">Represents custom memory pool.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a5c8770ded7c59c8caac6de0c2cb00b50"><div class="ttname"><a href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50">vmaCreatePool</a></div><div class="ttdeci">VkResult vmaCreatePool(VmaAllocator allocator, const VmaPoolCreateInfo *pCreateInfo, VmaPool *pPool)</div><div class="ttdoc">Allocates Vulkan device memory and creates VmaPool object.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
@@ -136,8 +136,8 @@
 <div class="line"><a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> poolCreateInfo = {};</div>
 <div class="line">poolCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a> = memTypeIndex;</div>
 <div class="line"><span class="comment">// ...</span></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2908</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2742</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2905</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2739</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ae790ab9ffaf7667fb8f62523e6897888"><div class="ttname"><a href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888">vmaFindMemoryTypeIndexForBufferInfo</a></div><div class="ttdeci">VkResult vmaFindMemoryTypeIndexForBufferInfo(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, uint32_t *pMemoryTypeIndex)</div><div class="ttdoc">Helps to find memoryTypeIndex, given VkBufferCreateInfo and VmaAllocationCreateInfo.</div></div>
 </div><!-- fragment --><p>When creating buffers/images allocated in that pool, provide following parameters:</p>
 <ul>
diff --git a/docs/html/defragmentation.html b/docs/html/defragmentation.html
index d9f1478..cfe6757 100644
--- a/docs/html/defragmentation.html
+++ b/docs/html/defragmentation.html
@@ -129,15 +129,15 @@
 <div class="line">        <a class="code" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a>(allocator, allocations[i], buffers[i]);</div>
 <div class="line">    }</div>
 <div class="line">}</div>
-<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3267</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3264</div></div>
 <div class="ttc" id="astruct_vma_allocator_html"><div class="ttname"><a href="struct_vma_allocator.html">VmaAllocator</a></div><div class="ttdoc">Represents main object of this library initialized.</div></div>
 <div class="ttc" id="astruct_vma_defragmentation_context_html"><div class="ttname"><a href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a></div><div class="ttdoc">Represents Opaque object that represents started defragmentation process.</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html"><div class="ttname"><a href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a></div><div class="ttdoc">Parameters for defragmentation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3666</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a3cf86ab32c1da779b4923d301a3056ba"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">VmaDefragmentationInfo2::allocationCount</a></div><div class="ttdeci">uint32_t allocationCount</div><div class="ttdoc">Number of allocations in pAllocations array.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3672</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a76d51a644dc7f5405d0cdd0025ecd0cc"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">VmaDefragmentationInfo2::pAllocationsChanged</a></div><div class="ttdeci">VkBool32 * pAllocationsChanged</div><div class="ttdoc">Optional, output. Pointer to array that will be filled with information whether the allocation at cer...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3687</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a94c2c7223d52878445a8cccce396b671"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">VmaDefragmentationInfo2::maxCpuAllocationsToMove</a></div><div class="ttdeci">uint32_t maxCpuAllocationsToMove</div><div class="ttdoc">Maximum number of allocations that can be moved to a different place using transfers on CPU side,...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3716</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_ab6d288f29d028156cf73542d630a2e32"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">VmaDefragmentationInfo2::pAllocations</a></div><div class="ttdeci">const VmaAllocation * pAllocations</div><div class="ttdoc">Pointer to array of allocations that can be defragmented.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3681</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_af78e1ea40c22d85137b65f6b384a4d0a"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">VmaDefragmentationInfo2::maxCpuBytesToMove</a></div><div class="ttdeci">VkDeviceSize maxCpuBytesToMove</div><div class="ttdoc">Maximum total numbers of bytes that can be copied while moving allocations to different places using ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3711</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html"><div class="ttname"><a href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a></div><div class="ttdoc">Parameters for defragmentation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3663</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a3cf86ab32c1da779b4923d301a3056ba"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">VmaDefragmentationInfo2::allocationCount</a></div><div class="ttdeci">uint32_t allocationCount</div><div class="ttdoc">Number of allocations in pAllocations array.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3669</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a76d51a644dc7f5405d0cdd0025ecd0cc"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">VmaDefragmentationInfo2::pAllocationsChanged</a></div><div class="ttdeci">VkBool32 * pAllocationsChanged</div><div class="ttdoc">Optional, output. Pointer to array that will be filled with information whether the allocation at cer...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3684</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a94c2c7223d52878445a8cccce396b671"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">VmaDefragmentationInfo2::maxCpuAllocationsToMove</a></div><div class="ttdeci">uint32_t maxCpuAllocationsToMove</div><div class="ttdoc">Maximum number of allocations that can be moved to a different place using transfers on CPU side,...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3713</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_ab6d288f29d028156cf73542d630a2e32"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">VmaDefragmentationInfo2::pAllocations</a></div><div class="ttdeci">const VmaAllocation * pAllocations</div><div class="ttdoc">Pointer to array of allocations that can be defragmented.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3678</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_af78e1ea40c22d85137b65f6b384a4d0a"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">VmaDefragmentationInfo2::maxCpuBytesToMove</a></div><div class="ttdeci">VkDeviceSize maxCpuBytesToMove</div><div class="ttdoc">Maximum total numbers of bytes that can be copied while moving allocations to different places using ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3708</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a36ba776fd7fd5cb1e9359fdc0d8e6e8a"><div class="ttname"><a href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a></div><div class="ttdeci">VkResult vmaDefragmentationBegin(VmaAllocator allocator, const VmaDefragmentationInfo2 *pInfo, VmaDefragmentationStats *pStats, VmaDefragmentationContext *pContext)</div><div class="ttdoc">Begins defragmentation process.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a6b0929b914b60cf2d45cac4bf3547470"><div class="ttname"><a href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a></div><div class="ttdeci">VkResult vmaBindBufferMemory(VmaAllocator allocator, VmaAllocation allocation, VkBuffer buffer)</div><div class="ttdoc">Binds buffer to allocation.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a86dd08aba8633bfa4ad0df2e76481d8b"><div class="ttname"><a href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a></div><div class="ttdeci">void vmaGetAllocationInfo(VmaAllocator allocator, VmaAllocation allocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">Returns current information about specified allocation and atomically marks it as used in current fra...</div></div>
@@ -203,9 +203,9 @@
 <div class="line">        <a class="code" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a>(allocator, allocations[i], buffers[i]);</div>
 <div class="line">    }</div>
 <div class="line">}</div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a40d53d33e71ba0b66f844ed63c05a3f6"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6">VmaDefragmentationInfo2::maxGpuAllocationsToMove</a></div><div class="ttdeci">uint32_t maxGpuAllocationsToMove</div><div class="ttdoc">Maximum number of allocations that can be moved to a different place using transfers on GPU side,...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3726</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a4ddbc898d0afe1518f863a3763628f08"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08">VmaDefragmentationInfo2::maxGpuBytesToMove</a></div><div class="ttdeci">VkDeviceSize maxGpuBytesToMove</div><div class="ttdoc">Maximum total numbers of bytes that can be copied while moving allocations to different places using ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3721</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a7f71f39590c5316771493d2333f9c1bd"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">VmaDefragmentationInfo2::commandBuffer</a></div><div class="ttdeci">VkCommandBuffer commandBuffer</div><div class="ttdoc">Optional. Command buffer where GPU copy commands will be posted.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3735</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a40d53d33e71ba0b66f844ed63c05a3f6"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6">VmaDefragmentationInfo2::maxGpuAllocationsToMove</a></div><div class="ttdeci">uint32_t maxGpuAllocationsToMove</div><div class="ttdoc">Maximum number of allocations that can be moved to a different place using transfers on GPU side,...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3723</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a4ddbc898d0afe1518f863a3763628f08"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08">VmaDefragmentationInfo2::maxGpuBytesToMove</a></div><div class="ttdeci">VkDeviceSize maxGpuBytesToMove</div><div class="ttdoc">Maximum total numbers of bytes that can be copied while moving allocations to different places using ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3718</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a7f71f39590c5316771493d2333f9c1bd"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">VmaDefragmentationInfo2::commandBuffer</a></div><div class="ttdeci">VkCommandBuffer commandBuffer</div><div class="ttdoc">Optional. Command buffer where GPU copy commands will be posted.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3732</div></div>
 </div><!-- fragment --><p>You can combine these two methods by specifying non-zero <code>maxGpu*</code> as well as <code>maxCpu*</code> parameters. The library automatically chooses best method to defragment each memory pool.</p>
 <p>You may try not to block your entire program to wait until defragmentation finishes, but do it in the background, as long as you carefully fullfill requirements described in function <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>.</p>
 <h1><a class="anchor" id="defragmentation_additional_notes"></a>
diff --git a/docs/html/general_considerations.html b/docs/html/general_considerations.html
index eba9e82..9083b5e 100644
--- a/docs/html/general_considerations.html
+++ b/docs/html/general_considerations.html
@@ -111,13 +111,11 @@
 Features not supported</h1>
 <p>Features deliberately excluded from the scope of this library:</p>
 <ul>
-<li>Data transfer. Uploading (streaming) and downloading data of buffers and images between CPU and GPU memory and related synchronization is responsibility of the user. Defining some "texture" object that would automatically stream its data from a staging copy in CPU memory to GPU memory would rather be a feature of another, higher-level library implemented on top of VMA.</li>
-<li>Allocations for imported/exported external memory. They tend to require explicit memory type index and dedicated allocation anyway, so they don't interact with main features of this library. Such special purpose allocations should be made manually, using <code>vkCreateBuffer()</code> and <code>vkAllocateMemory()</code>.</li>
-<li>Sub-allocation of parts of one large buffer. Although recommended as a good practice, it is the user's responsibility to implement such logic on top of VMA.</li>
-<li>Recreation of buffers and images. Although the library has functions for buffer and image creation (<a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>), you need to recreate these objects yourself after defragmentation. That's because the big structures <code>VkBufferCreateInfo</code>, <code>VkImageCreateInfo</code> are not stored in <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> object.</li>
-<li>Handling CPU memory allocation failures. When dynamically creating small C++ objects in CPU memory (not Vulkan memory), allocation failures are not checked and handled gracefully, because that would complicate code significantly and is usually not needed in desktop PC applications anyway. Success of an allocation is just checked with an assert.</li>
-<li>Code free of any compiler warnings. Maintaining the library to compile and work correctly on so many different platforms is hard enough. Being free of any warnings, on any version of any compiler, is simply not feasible.</li>
-<li>This is a C++ library with C interface. Bindings or ports to any other programming languages are welcomed as external projects and are not going to be included into this repository. </li>
+<li><b>Data transfer.</b> Uploading (streaming) and downloading data of buffers and images between CPU and GPU memory and related synchronization is responsibility of the user. Defining some "texture" object that would automatically stream its data from a staging copy in CPU memory to GPU memory would rather be a feature of another, higher-level library implemented on top of VMA.</li>
+<li><b>Recreation of buffers and images.</b> Although the library has functions for buffer and image creation (<a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>), you need to recreate these objects yourself after defragmentation. That's because the big structures <code>VkBufferCreateInfo</code>, <code>VkImageCreateInfo</code> are not stored in <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> object.</li>
+<li><b>Handling CPU memory allocation failures.</b> When dynamically creating small C++ objects in CPU memory (not Vulkan memory), allocation failures are not checked and handled gracefully, because that would complicate code significantly and is usually not needed in desktop PC applications anyway. Success of an allocation is just checked with an assert.</li>
+<li><b>Code free of any compiler warnings.</b> Maintaining the library to compile and work correctly on so many different platforms is hard enough. Being free of any warnings, on any version of any compiler, is simply not feasible. There are many preprocessor macros that make some variables unused, function parameters unreferenced, or conditional expressions constant in some configurations. The code of this library should not be bigger or more complicated just to silence these warnings. It is recommended to disable such warnings instead.</li>
+<li>This is a C++ library with C interface. <b>Bindings or ports to any other programming languages</b> are welcome as external projects but are not going to be included into this repository. </li>
 </ul>
 </div></div><!-- contents -->
 </div><!-- PageDoc -->
diff --git a/docs/html/lost_allocations.html b/docs/html/lost_allocations.html
index d6b3435..8c91a04 100644
--- a/docs/html/lost_allocations.html
+++ b/docs/html/lost_allocations.html
@@ -117,16 +117,16 @@
 <div class="line"> </div>
 <div class="line">    <a class="code" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &amp;bufCreateInfo, &amp;allocCreateInfo, &amp;m_Buf, &amp;m_Alloc, <span class="keyword">nullptr</span>);</div>
 <div class="line">}</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2900</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2908</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2902</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2897</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2905</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2899</div></div>
 <div class="ttc" id="astruct_vma_allocation_html"><div class="ttname"><a href="struct_vma_allocation.html">VmaAllocation</a></div><div class="ttdoc">Represents single memory allocation.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a0d9f4e4ba5bf9aab1f1c746387753d77"><div class="ttname"><a href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a></div><div class="ttdeci">void vmaDestroyBuffer(VmaAllocator allocator, VkBuffer buffer, VmaAllocation allocation)</div><div class="ttdoc">Destroys Vulkan buffer and frees allocated memory.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a43d8ba9673c846f049089a5029d5c73a"><div class="ttname"><a href="vk__mem__alloc_8h.html#a43d8ba9673c846f049089a5029d5c73a">vmaTouchAllocation</a></div><div class="ttdeci">VkBool32 vmaTouchAllocation(VmaAllocator allocator, VmaAllocation allocation)</div><div class="ttdoc">Returns VK_TRUE if allocation is not lost and atomically marks it as used in current frame.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2742</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2739</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2">VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2832</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2839</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2">VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2829</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2836</div></div>
 </div><!-- fragment --><p>When using lost allocations, you may see some Vulkan validation layer warnings about overlapping regions of memory bound to different kinds of buffers and images. This is still valid as long as you implement proper handling of lost allocations (like in the example above) and don't use them.</p>
 <p>You can create an allocation that is already in lost state from the beginning using function <a class="el" href="vk__mem__alloc_8h.html#ae5c9657d9e94756269145b01c05d16f1" title="Creates new allocation that is in lost state from the beginning.">vmaCreateLostAllocation()</a>. It may be useful if you need a "dummy" allocation that is not null.</p>
 <p>You can call function <a class="el" href="vk__mem__alloc_8h.html#a736bd6cbda886f36c891727e73bd4024" title="Marks all allocations in given pool as lost if they are not used in current frame or VmaPoolCreateInf...">vmaMakePoolAllocationsLost()</a> to set all eligible allocations in a specified custom pool to lost state. Allocations that have been "touched" in current frame or <a class="el" href="struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa" title="Maximum number of additional frames that are in use at the same time as current frame.">VmaPoolCreateInfo::frameInUseCount</a> frames back cannot become lost.</p>
diff --git a/docs/html/memory_mapping.html b/docs/html/memory_mapping.html
index 7302c69..5c78863 100644
--- a/docs/html/memory_mapping.html
+++ b/docs/html/memory_mapping.html
@@ -116,14 +116,14 @@
 <div class="line"> </div>
 <div class="line"><span class="comment">// Buffer is already mapped. You can access its memory.</span></div>
 <div class="line">memcpy(allocInfo.<a class="code" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a>, &amp;constantBufferData, <span class="keyword">sizeof</span>(constantBufferData));</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2900</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2908</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2902</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3267</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html_a5eeffbe2d2f30f53370ff14aefbadbe2"><div class="ttname"><a href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">VmaAllocationInfo::pMappedData</a></div><div class="ttdeci">void * pMappedData</div><div class="ttdoc">Pointer to the beginning of this allocation as mapped data.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3311</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_CPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2752</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2897</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2905</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2899</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3264</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html_a5eeffbe2d2f30f53370ff14aefbadbe2"><div class="ttname"><a href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">VmaAllocationInfo::pMappedData</a></div><div class="ttdeci">void * pMappedData</div><div class="ttdoc">Pointer to the beginning of this allocation as mapped data.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3308</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_CPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2749</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_MAPPED_BIT</div><div class="ttdoc">Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2819</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_MAPPED_BIT</div><div class="ttdoc">Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2816</div></div>
 </div><!-- fragment --><p>There are some exceptions though, when you should consider mapping memory only for a short period of time:</p>
 <ul>
 <li>When operating system is Windows 7 or 8.x (Windows 10 is not affected because it uses WDDM2), device is discrete AMD GPU, and memory type is the special 256 MiB pool of <code>DEVICE_LOCAL + HOST_VISIBLE</code> memory (selected when you use <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a>), then whenever a memory block allocated from this memory type stays mapped for the time of any call to <code>vkQueueSubmit()</code> or <code>vkQueuePresentKHR()</code>, this block is migrated by WDDM to system RAM, which degrades performance. It doesn't matter if that particular memory block is actually used by the command buffer being submitted.</li>
@@ -167,10 +167,10 @@
 <div class="line">    <span class="comment">// Allocation ended up in non-mappable memory.</span></div>
 <div class="line">    <span class="comment">// You need to create CPU-side buffer in VMA_MEMORY_USAGE_CPU_ONLY and make a transfer.</span></div>
 <div class="line">}</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a7fe8d81a1ad10b2a2faacacee5b15d6d"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">VmaAllocationCreateInfo::preferredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags preferredFlags</div><div class="ttdoc">Flags that preferably should be set in a memory type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2918</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html_a7f6b0aa58c135e488e6b40a388dad9d5"><div class="ttname"><a href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">VmaAllocationInfo::memoryType</a></div><div class="ttdeci">uint32_t memoryType</div><div class="ttdoc">Memory type index that this allocation was allocated from.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3272</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a7fe8d81a1ad10b2a2faacacee5b15d6d"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">VmaAllocationCreateInfo::preferredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags preferredFlags</div><div class="ttdoc">Flags that preferably should be set in a memory type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2915</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html_a7f6b0aa58c135e488e6b40a388dad9d5"><div class="ttname"><a href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">VmaAllocationInfo::memoryType</a></div><div class="ttdeci">uint32_t memoryType</div><div class="ttdoc">Memory type index that this allocation was allocated from.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3269</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a8701444752eb5de4464adb5a2b514bca"><div class="ttname"><a href="vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca">vmaGetMemoryTypeProperties</a></div><div class="ttdeci">void vmaGetMemoryTypeProperties(VmaAllocator allocator, uint32_t memoryTypeIndex, VkMemoryPropertyFlags *pFlags)</div><div class="ttdoc">Given Memory Type Index, returns Property Flags of this memory type.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2742</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2739</div></div>
 </div><!-- fragment --><p>You can even use <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> flag while creating allocations that are not necessarily <code>HOST_VISIBLE</code> (e.g. using <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>). If the allocation ends up in memory type that is <code>HOST_VISIBLE</code>, it will be persistently mapped and you can use it directly. If not, the flag is just ignored. Example:</p>
 <div class="fragment"><div class="line">VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };</div>
 <div class="line">bufCreateInfo.size = <span class="keyword">sizeof</span>(ConstantBuffer);</div>
diff --git a/docs/html/quick_start.html b/docs/html/quick_start.html
index 4affdca..c362d0d 100644
--- a/docs/html/quick_start.html
+++ b/docs/html/quick_start.html
@@ -104,11 +104,11 @@
 <div class="line"> </div>
 <div class="line"><a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator;</div>
 <div class="line"><a class="code" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a>(&amp;allocatorInfo, &amp;allocator);</div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html"><div class="ttname"><a href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a></div><div class="ttdoc">Description of a Allocator to be created.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2422</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_a08230f04ae6ccf8a78150a9e829a7156"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156">VmaAllocatorCreateInfo::physicalDevice</a></div><div class="ttdeci">VkPhysicalDevice physicalDevice</div><div class="ttdoc">Vulkan physical device.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2427</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_a70dd42e29b1df1d1b9b61532ae0b370b"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a70dd42e29b1df1d1b9b61532ae0b370b">VmaAllocatorCreateInfo::instance</a></div><div class="ttdeci">VkInstance instance</div><div class="ttdoc">Handle to Vulkan instance object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2496</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_ad924ddd77b04039c88d0c09b0ffcd500"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500">VmaAllocatorCreateInfo::device</a></div><div class="ttdeci">VkDevice device</div><div class="ttdoc">Vulkan device.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2430</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_ae0ffc55139b54520a6bb704b29ffc285"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">VmaAllocatorCreateInfo::vulkanApiVersion</a></div><div class="ttdeci">uint32_t vulkanApiVersion</div><div class="ttdoc">Optional. The highest version of Vulkan that the application is designed to use.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2505</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html"><div class="ttname"><a href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a></div><div class="ttdoc">Description of a Allocator to be created.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2419</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_a08230f04ae6ccf8a78150a9e829a7156"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156">VmaAllocatorCreateInfo::physicalDevice</a></div><div class="ttdeci">VkPhysicalDevice physicalDevice</div><div class="ttdoc">Vulkan physical device.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2424</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_a70dd42e29b1df1d1b9b61532ae0b370b"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a70dd42e29b1df1d1b9b61532ae0b370b">VmaAllocatorCreateInfo::instance</a></div><div class="ttdeci">VkInstance instance</div><div class="ttdoc">Handle to Vulkan instance object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2493</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_ad924ddd77b04039c88d0c09b0ffcd500"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500">VmaAllocatorCreateInfo::device</a></div><div class="ttdeci">VkDevice device</div><div class="ttdoc">Vulkan device.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2427</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_ae0ffc55139b54520a6bb704b29ffc285"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">VmaAllocatorCreateInfo::vulkanApiVersion</a></div><div class="ttdeci">uint32_t vulkanApiVersion</div><div class="ttdoc">Optional. The highest version of Vulkan that the application is designed to use.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2502</div></div>
 <div class="ttc" id="astruct_vma_allocator_html"><div class="ttname"><a href="struct_vma_allocator.html">VmaAllocator</a></div><div class="ttdoc">Represents main object of this library initialized.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a200692051ddb34240248234f5f4c17bb"><div class="ttname"><a href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a></div><div class="ttdeci">VkResult vmaCreateAllocator(const VmaAllocatorCreateInfo *pCreateInfo, VmaAllocator *pAllocator)</div><div class="ttdoc">Creates Allocator object.</div></div>
 </div><!-- fragment --><p>Only members <code>physicalDevice</code>, <code>device</code>, <code>instance</code> are required. However, you should inform the library which Vulkan version do you use by setting <a class="el" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285" title="Optional. The highest version of Vulkan that the application is designed to use.">VmaAllocatorCreateInfo::vulkanApiVersion</a> and which extensions did you enable by setting <a class="el" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346" title="Flags for created allocator. Use VmaAllocatorCreateFlagBits enum.">VmaAllocatorCreateInfo::flags</a> (like <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</a> for VK_KHR_buffer_device_address). Otherwise, VMA would use only features of Vulkan 1.0 core with no extensions.</p>
@@ -130,10 +130,10 @@
 <div class="line">VkBuffer buffer;</div>
 <div class="line"><a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation;</div>
 <div class="line"><a class="code" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &amp;bufferInfo, &amp;allocInfo, &amp;buffer, &amp;allocation, <span class="keyword">nullptr</span>);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2900</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2908</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2897</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2905</div></div>
 <div class="ttc" id="astruct_vma_allocation_html"><div class="ttname"><a href="struct_vma_allocation.html">VmaAllocation</a></div><div class="ttdoc">Represents single memory allocation.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2742</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2739</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
 </div><!-- fragment --><p>Don't forget to destroy your objects when no longer needed:</p>
 <div class="fragment"><div class="line"><a class="code" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a>(allocator, buffer, allocation);</div>
diff --git a/docs/html/resource_aliasing.html b/docs/html/resource_aliasing.html
index 08b05f0..a6c52b5 100644
--- a/docs/html/resource_aliasing.html
+++ b/docs/html/resource_aliasing.html
@@ -137,12 +137,12 @@
 <div class="line"><a class="code" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a>(allocator, alloc);</div>
 <div class="line">vkDestroyImage(allocator, img2, <span class="keyword">nullptr</span>);</div>
 <div class="line">vkDestroyImage(allocator, img1, <span class="keyword">nullptr</span>);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2900</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2908</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2897</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2905</div></div>
 <div class="ttc" id="astruct_vma_allocation_html"><div class="ttname"><a href="struct_vma_allocation.html">VmaAllocation</a></div><div class="ttdoc">Represents single memory allocation.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a3d3ca45799923aa5d138e9e5f9eb2da5"><div class="ttname"><a href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a></div><div class="ttdeci">VkResult vmaBindImageMemory(VmaAllocator allocator, VmaAllocation allocation, VkImage image)</div><div class="ttdoc">Binds image to allocation.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a5fea5518972ae9094b1526cbcb19b05f"><div class="ttname"><a href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a></div><div class="ttdeci">void vmaFreeMemory(VmaAllocator allocator, const VmaAllocation allocation)</div><div class="ttdoc">Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2742</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2739</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_abf28077dbf82d0908b8acbe8ee8dd9b8"><div class="ttname"><a href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8">vmaAllocateMemory</a></div><div class="ttdeci">VkResult vmaAllocateMemory(VmaAllocator allocator, const VkMemoryRequirements *pVkMemoryRequirements, const VmaAllocationCreateInfo *pCreateInfo, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">General purpose memory allocation.</div></div>
 </div><!-- fragment --><p>Remember that using resources that alias in memory requires proper synchronization. You need to issue a memory barrier to make sure commands that use <code>img1</code> and <code>img2</code> don't overlap on GPU timeline. You also need to treat a resource after aliasing as uninitialized - containing garbage data. For example, if you use <code>img1</code> and then want to use <code>img2</code>, you need to issue an image memory barrier for <code>img2</code> with <code>oldLayout</code> = <code>VK_IMAGE_LAYOUT_UNDEFINED</code>.</p>
 <p>Additional considerations:</p>
diff --git a/docs/html/vk__mem__alloc_8h_source.html b/docs/html/vk__mem__alloc_8h_source.html
index 3578c9e..fe61ac8 100644
--- a/docs/html/vk__mem__alloc_8h_source.html
+++ b/docs/html/vk__mem__alloc_8h_source.html
@@ -94,904 +94,907 @@
 <div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#ifndef AMD_VULKAN_MEMORY_ALLOCATOR_H</span></div>
 <div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#define AMD_VULKAN_MEMORY_ALLOCATOR_H</span></div>
 <div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; </div>
-<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
-<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
-<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; </div>
-<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;<span class="comment">/*</span></div>
-<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;<span class="comment">Define this macro to 0/1 to disable/enable support for recording functionality,</span></div>
-<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;<span class="comment">available through VmaAllocatorCreateInfo::pRecordSettings.</span></div>
-<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;<span class="comment">*/</span></div>
-<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160;<span class="preprocessor">#ifndef VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l02029"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c"> 2029</a></span>&#160;<span class="preprocessor">    #define VMA_RECORDING_ENABLED 0</span></div>
-<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; </div>
-<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;<span class="preprocessor">#if !defined(NOMINMAX) &amp;&amp; defined(VMA_IMPLEMENTATION)</span></div>
-<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;<span class="preprocessor">    #define NOMINMAX </span><span class="comment">// For windows.h</span></div>
-<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; </div>
-<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;<span class="preprocessor">#if defined(__ANDROID__) &amp;&amp; defined(VK_NO_PROTOTYPES) &amp;&amp; VMA_STATIC_VULKAN_FUNCTIONS</span></div>
-<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;    <span class="keyword">extern</span> PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;</div>
-<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160;    <span class="keyword">extern</span> PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;</div>
-<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;    <span class="keyword">extern</span> PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties;</div>
-<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;    <span class="keyword">extern</span> PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties;</div>
-<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;    <span class="keyword">extern</span> PFN_vkAllocateMemory vkAllocateMemory;</div>
-<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;    <span class="keyword">extern</span> PFN_vkFreeMemory vkFreeMemory;</div>
-<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;    <span class="keyword">extern</span> PFN_vkMapMemory vkMapMemory;</div>
-<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;    <span class="keyword">extern</span> PFN_vkUnmapMemory vkUnmapMemory;</div>
-<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;    <span class="keyword">extern</span> PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges;</div>
-<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160;    <span class="keyword">extern</span> PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges;</div>
-<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;    <span class="keyword">extern</span> PFN_vkBindBufferMemory vkBindBufferMemory;</div>
-<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;    <span class="keyword">extern</span> PFN_vkBindImageMemory vkBindImageMemory;</div>
-<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;    <span class="keyword">extern</span> PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;</div>
-<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;    <span class="keyword">extern</span> PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements;</div>
-<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;    <span class="keyword">extern</span> PFN_vkCreateBuffer vkCreateBuffer;</div>
-<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;    <span class="keyword">extern</span> PFN_vkDestroyBuffer vkDestroyBuffer;</div>
-<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;    <span class="keyword">extern</span> PFN_vkCreateImage vkCreateImage;</div>
-<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;    <span class="keyword">extern</span> PFN_vkDestroyImage vkDestroyImage;</div>
-<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;    <span class="keyword">extern</span> PFN_vkCmdCopyBuffer vkCmdCopyBuffer;</div>
-<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;<span class="preprocessor">    #if VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;        <span class="keyword">extern</span> PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2;</div>
-<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;        <span class="keyword">extern</span> PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2;</div>
-<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;        <span class="keyword">extern</span> PFN_vkBindBufferMemory2 vkBindBufferMemory2;</div>
-<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;        <span class="keyword">extern</span> PFN_vkBindImageMemory2 vkBindImageMemory2;</div>
-<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;        <span class="keyword">extern</span> PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2;</div>
-<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;<span class="preprocessor">    #endif </span><span class="comment">// #if VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if defined(__ANDROID__) &amp;&amp; VMA_STATIC_VULKAN_FUNCTIONS &amp;&amp; VK_NO_PROTOTYPES</span></div>
-<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; </div>
-<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160;<span class="preprocessor">#ifndef VULKAN_H_</span></div>
-<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;<span class="preprocessor">    #include &lt;vulkan/vulkan.h&gt;</span></div>
-<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; </div>
-<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160;<span class="comment">// Define this macro to declare maximum supported Vulkan version in format AAABBBCCC,</span></div>
-<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160;<span class="comment">// where AAA = major, BBB = minor, CCC = patch.</span></div>
-<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;<span class="comment">// If you want to use version &gt; 1.0, it still needs to be enabled via VmaAllocatorCreateInfo::vulkanApiVersion.</span></div>
-<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;<span class="preprocessor">#if !defined(VMA_VULKAN_VERSION)</span></div>
-<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;<span class="preprocessor">    #if defined(VK_VERSION_1_2)</span></div>
-<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;<span class="preprocessor">        #define VMA_VULKAN_VERSION 1002000</span></div>
-<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160;<span class="preprocessor">    #elif defined(VK_VERSION_1_1)</span></div>
-<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;<span class="preprocessor">        #define VMA_VULKAN_VERSION 1001000</span></div>
-<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l02078"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a1a2407c283893638cc039bb31fcd74b6"> 2078</a></span>&#160;<span class="preprocessor">        #define VMA_VULKAN_VERSION 1000000</span></div>
-<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; </div>
-<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;<span class="preprocessor">#if !defined(VMA_DEDICATED_ALLOCATION)</span></div>
-<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;<span class="preprocessor">    #if VK_KHR_get_memory_requirements2 &amp;&amp; VK_KHR_dedicated_allocation</span></div>
-<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;<span class="preprocessor">        #define VMA_DEDICATED_ALLOCATION 1</span></div>
-<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l02086"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4"> 2086</a></span>&#160;<span class="preprocessor">        #define VMA_DEDICATED_ALLOCATION 0</span></div>
-<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; </div>
-<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160;<span class="preprocessor">#if !defined(VMA_BIND_MEMORY2)</span></div>
-<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;<span class="preprocessor">    #if VK_KHR_bind_memory2</span></div>
-<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;<span class="preprocessor">        #define VMA_BIND_MEMORY2 1</span></div>
-<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l02094"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a88bef97f86d70a34a4c0746e09a2680d"> 2094</a></span>&#160;<span class="preprocessor">        #define VMA_BIND_MEMORY2 0</span></div>
-<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; </div>
-<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;<span class="preprocessor">#if !defined(VMA_MEMORY_BUDGET)</span></div>
-<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;<span class="preprocessor">    #if VK_EXT_memory_budget &amp;&amp; (VK_KHR_get_physical_device_properties2 || VMA_VULKAN_VERSION &gt;= 1001000)</span></div>
-<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;<span class="preprocessor">        #define VMA_MEMORY_BUDGET 1</span></div>
-<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l02102"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a05decf1cf4ebf767beba7acca6c1ec3a"> 2102</a></span>&#160;<span class="preprocessor">        #define VMA_MEMORY_BUDGET 0</span></div>
-<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; </div>
-<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;<span class="comment">// Defined to 1 when VK_KHR_buffer_device_address device extension or equivalent core Vulkan 1.2 feature is defined in its headers.</span></div>
-<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160;<span class="preprocessor">#if !defined(VMA_BUFFER_DEVICE_ADDRESS)</span></div>
-<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;<span class="preprocessor">    #if VK_KHR_buffer_device_address || VMA_VULKAN_VERSION &gt;= 1002000</span></div>
-<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;<span class="preprocessor">        #define VMA_BUFFER_DEVICE_ADDRESS 1</span></div>
-<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l02111"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a7f9d5e71b70dd1a137c303a8a8262c10"> 2111</a></span>&#160;<span class="preprocessor">        #define VMA_BUFFER_DEVICE_ADDRESS 0</span></div>
-<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; </div>
-<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;<span class="comment">// Defined to 1 when VK_EXT_memory_priority device extension is defined in Vulkan headers.</span></div>
-<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;<span class="preprocessor">#if !defined(VMA_MEMORY_PRIORITY)</span></div>
-<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160;<span class="preprocessor">    #if VK_EXT_memory_priority</span></div>
-<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;<span class="preprocessor">        #define VMA_MEMORY_PRIORITY 1</span></div>
-<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l02120"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a81af8a3a87e34bbb493848143cde43e4"> 2120</a></span>&#160;<span class="preprocessor">        #define VMA_MEMORY_PRIORITY 0</span></div>
-<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; </div>
-<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160;<span class="comment">// Defined to 1 when VK_KHR_external_memory device extension is defined in Vulkan headers.</span></div>
-<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160;<span class="preprocessor">#if !defined(VMA_EXTERNAL_MEMORY)</span></div>
-<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;<span class="preprocessor">    #if VK_KHR_external_memory</span></div>
-<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;<span class="preprocessor">        #define VMA_EXTERNAL_MEMORY 1</span></div>
-<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;<span class="preprocessor">        #define VMA_EXTERNAL_MEMORY 0</span></div>
-<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160; </div>
-<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;<span class="comment">// Define these macros to decorate all public functions with additional code,</span></div>
-<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;<span class="comment">// before and after returned type, appropriately. This may be useful for</span></div>
-<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;<span class="comment">// exporting the functions when compiling VMA as a separate library. Example:</span></div>
-<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;<span class="comment">// #define VMA_CALL_PRE  __declspec(dllexport)</span></div>
-<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;<span class="comment">// #define VMA_CALL_POST __cdecl</span></div>
-<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;<span class="preprocessor">#ifndef VMA_CALL_PRE</span></div>
-<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;<span class="preprocessor">    #define VMA_CALL_PRE</span></div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160; </div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160;<span class="comment">Define this macro to 0/1 to disable/enable support for recording functionality,</span></div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160;<span class="comment">available through VmaAllocatorCreateInfo::pRecordSettings.</span></div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;<span class="preprocessor">#ifndef VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l02026"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c"> 2026</a></span>&#160;<span class="preprocessor">    #define VMA_RECORDING_ENABLED 0</span></div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; </div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;<span class="preprocessor">#if !defined(NOMINMAX) &amp;&amp; defined(VMA_IMPLEMENTATION)</span></div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;<span class="preprocessor">    #define NOMINMAX </span><span class="comment">// For windows.h</span></div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; </div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;<span class="preprocessor">#if defined(__ANDROID__) &amp;&amp; defined(VK_NO_PROTOTYPES) &amp;&amp; VMA_STATIC_VULKAN_FUNCTIONS</span></div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;    <span class="keyword">extern</span> PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;</div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;    <span class="keyword">extern</span> PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;    <span class="keyword">extern</span> PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties;</div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;    <span class="keyword">extern</span> PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties;</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160;    <span class="keyword">extern</span> PFN_vkAllocateMemory vkAllocateMemory;</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;    <span class="keyword">extern</span> PFN_vkFreeMemory vkFreeMemory;</div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;    <span class="keyword">extern</span> PFN_vkMapMemory vkMapMemory;</div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;    <span class="keyword">extern</span> PFN_vkUnmapMemory vkUnmapMemory;</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;    <span class="keyword">extern</span> PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges;</div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;    <span class="keyword">extern</span> PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges;</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;    <span class="keyword">extern</span> PFN_vkBindBufferMemory vkBindBufferMemory;</div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;    <span class="keyword">extern</span> PFN_vkBindImageMemory vkBindImageMemory;</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160;    <span class="keyword">extern</span> PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;    <span class="keyword">extern</span> PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements;</div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;    <span class="keyword">extern</span> PFN_vkCreateBuffer vkCreateBuffer;</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;    <span class="keyword">extern</span> PFN_vkDestroyBuffer vkDestroyBuffer;</div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;    <span class="keyword">extern</span> PFN_vkCreateImage vkCreateImage;</div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;    <span class="keyword">extern</span> PFN_vkDestroyImage vkDestroyImage;</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;    <span class="keyword">extern</span> PFN_vkCmdCopyBuffer vkCmdCopyBuffer;</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;<span class="preprocessor">    #if VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;        <span class="keyword">extern</span> PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2;</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;        <span class="keyword">extern</span> PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2;</div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;        <span class="keyword">extern</span> PFN_vkBindBufferMemory2 vkBindBufferMemory2;</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;        <span class="keyword">extern</span> PFN_vkBindImageMemory2 vkBindImageMemory2;</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;        <span class="keyword">extern</span> PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2;</div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;<span class="preprocessor">    #endif </span><span class="comment">// #if VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if defined(__ANDROID__) &amp;&amp; VMA_STATIC_VULKAN_FUNCTIONS &amp;&amp; VK_NO_PROTOTYPES</span></div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160; </div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;<span class="preprocessor">#ifndef VULKAN_H_</span></div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;<span class="preprocessor">    #include &lt;vulkan/vulkan.h&gt;</span></div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; </div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;<span class="comment">// Define this macro to declare maximum supported Vulkan version in format AAABBBCCC,</span></div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;<span class="comment">// where AAA = major, BBB = minor, CCC = patch.</span></div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160;<span class="comment">// If you want to use version &gt; 1.0, it still needs to be enabled via VmaAllocatorCreateInfo::vulkanApiVersion.</span></div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160;<span class="preprocessor">#if !defined(VMA_VULKAN_VERSION)</span></div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160;<span class="preprocessor">    #if defined(VK_VERSION_1_2)</span></div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;<span class="preprocessor">        #define VMA_VULKAN_VERSION 1002000</span></div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;<span class="preprocessor">    #elif defined(VK_VERSION_1_1)</span></div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;<span class="preprocessor">        #define VMA_VULKAN_VERSION 1001000</span></div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l02075"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a1a2407c283893638cc039bb31fcd74b6"> 2075</a></span>&#160;<span class="preprocessor">        #define VMA_VULKAN_VERSION 1000000</span></div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; </div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160;<span class="preprocessor">#if !defined(VMA_DEDICATED_ALLOCATION)</span></div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;<span class="preprocessor">    #if VK_KHR_get_memory_requirements2 &amp;&amp; VK_KHR_dedicated_allocation</span></div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160;<span class="preprocessor">        #define VMA_DEDICATED_ALLOCATION 1</span></div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l02083"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4"> 2083</a></span>&#160;<span class="preprocessor">        #define VMA_DEDICATED_ALLOCATION 0</span></div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; </div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160;<span class="preprocessor">#if !defined(VMA_BIND_MEMORY2)</span></div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;<span class="preprocessor">    #if VK_KHR_bind_memory2</span></div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;<span class="preprocessor">        #define VMA_BIND_MEMORY2 1</span></div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l02091"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a88bef97f86d70a34a4c0746e09a2680d"> 2091</a></span>&#160;<span class="preprocessor">        #define VMA_BIND_MEMORY2 0</span></div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; </div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;<span class="preprocessor">#if !defined(VMA_MEMORY_BUDGET)</span></div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;<span class="preprocessor">    #if VK_EXT_memory_budget &amp;&amp; (VK_KHR_get_physical_device_properties2 || VMA_VULKAN_VERSION &gt;= 1001000)</span></div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160;<span class="preprocessor">        #define VMA_MEMORY_BUDGET 1</span></div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l02099"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a05decf1cf4ebf767beba7acca6c1ec3a"> 2099</a></span>&#160;<span class="preprocessor">        #define VMA_MEMORY_BUDGET 0</span></div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; </div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;<span class="comment">// Defined to 1 when VK_KHR_buffer_device_address device extension or equivalent core Vulkan 1.2 feature is defined in its headers.</span></div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;<span class="preprocessor">#if !defined(VMA_BUFFER_DEVICE_ADDRESS)</span></div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;<span class="preprocessor">    #if VK_KHR_buffer_device_address || VMA_VULKAN_VERSION &gt;= 1002000</span></div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;<span class="preprocessor">        #define VMA_BUFFER_DEVICE_ADDRESS 1</span></div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l02108"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a7f9d5e71b70dd1a137c303a8a8262c10"> 2108</a></span>&#160;<span class="preprocessor">        #define VMA_BUFFER_DEVICE_ADDRESS 0</span></div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; </div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;<span class="comment">// Defined to 1 when VK_EXT_memory_priority device extension is defined in Vulkan headers.</span></div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;<span class="preprocessor">#if !defined(VMA_MEMORY_PRIORITY)</span></div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;<span class="preprocessor">    #if VK_EXT_memory_priority</span></div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;<span class="preprocessor">        #define VMA_MEMORY_PRIORITY 1</span></div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l02117"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a81af8a3a87e34bbb493848143cde43e4"> 2117</a></span>&#160;<span class="preprocessor">        #define VMA_MEMORY_PRIORITY 0</span></div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; </div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;<span class="comment">// Defined to 1 when VK_KHR_external_memory device extension is defined in Vulkan headers.</span></div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;<span class="preprocessor">#if !defined(VMA_EXTERNAL_MEMORY)</span></div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160;<span class="preprocessor">    #if VK_KHR_external_memory</span></div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160;<span class="preprocessor">        #define VMA_EXTERNAL_MEMORY 1</span></div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;<span class="preprocessor">        #define VMA_EXTERNAL_MEMORY 0</span></div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160; </div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;<span class="comment">// Define these macros to decorate all public functions with additional code,</span></div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;<span class="comment">// before and after returned type, appropriately. This may be useful for</span></div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;<span class="comment">// exporting the functions when compiling VMA as a separate library. Example:</span></div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;<span class="comment">// #define VMA_CALL_PRE  __declspec(dllexport)</span></div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;<span class="comment">// #define VMA_CALL_POST __cdecl</span></div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;<span class="preprocessor">#ifndef VMA_CALL_PRE</span></div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;<span class="preprocessor">    #define VMA_CALL_PRE</span></div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;<span class="preprocessor">#ifndef VMA_CALL_POST</span></div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;<span class="preprocessor">    #define VMA_CALL_POST</span></div>
 <div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;<span class="preprocessor">#ifndef VMA_CALL_POST</span></div>
-<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160;<span class="preprocessor">    #define VMA_CALL_POST</span></div>
-<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160; </div>
-<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160;<span class="comment">// Define this macro to decorate pointers with an attribute specifying the</span></div>
-<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;<span class="comment">// length of the array they point to if they are not null.</span></div>
-<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;<span class="comment">//</span></div>
-<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;<span class="comment">// The length may be one of</span></div>
-<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;<span class="comment">// - The name of another parameter in the argument list where the pointer is declared</span></div>
-<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;<span class="comment">// - The name of another member in the struct where the pointer is declared</span></div>
-<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;<span class="comment">// - The name of a member of a struct type, meaning the value of that member in</span></div>
-<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;<span class="comment">//   the context of the call. For example</span></div>
-<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;<span class="comment">//   VMA_LEN_IF_NOT_NULL(&quot;VkPhysicalDeviceMemoryProperties::memoryHeapCount&quot;),</span></div>
-<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;<span class="comment">//   this means the number of memory heaps available in the device associated</span></div>
-<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;<span class="comment">//   with the VmaAllocator being dealt with.</span></div>
-<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;<span class="preprocessor">#ifndef VMA_LEN_IF_NOT_NULL</span></div>
-<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;<span class="preprocessor">    #define VMA_LEN_IF_NOT_NULL(len)</span></div>
-<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160; </div>
-<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;<span class="comment">// The VMA_NULLABLE macro is defined to be _Nullable when compiling with Clang.</span></div>
-<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;<span class="comment">// see: https://clang.llvm.org/docs/AttributeReference.html#nullable</span></div>
-<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160;<span class="preprocessor">#ifndef VMA_NULLABLE</span></div>
-<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;<span class="preprocessor">    #ifdef __clang__</span></div>
-<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;<span class="preprocessor">        #define VMA_NULLABLE _Nullable</span></div>
-<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160;<span class="preprocessor">        #define VMA_NULLABLE</span></div>
-<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160; </div>
-<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;<span class="comment">// The VMA_NOT_NULL macro is defined to be _Nonnull when compiling with Clang.</span></div>
-<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;<span class="comment">// see: https://clang.llvm.org/docs/AttributeReference.html#nonnull</span></div>
-<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;<span class="preprocessor">#ifndef VMA_NOT_NULL</span></div>
-<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;<span class="preprocessor">    #ifdef __clang__</span></div>
-<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;<span class="preprocessor">        #define VMA_NOT_NULL _Nonnull</span></div>
-<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160;<span class="preprocessor">        #define VMA_NOT_NULL</span></div>
-<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160; </div>
-<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;<span class="comment">// If non-dispatchable handles are represented as pointers then we can give</span></div>
-<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;<span class="comment">// then nullability annotations</span></div>
-<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;<span class="preprocessor">#ifndef VMA_NOT_NULL_NON_DISPATCHABLE</span></div>
-<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;<span class="preprocessor">    #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) &amp;&amp; !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)</span></div>
-<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;<span class="preprocessor">        #define VMA_NOT_NULL_NON_DISPATCHABLE VMA_NOT_NULL</span></div>
-<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;<span class="preprocessor">        #define VMA_NOT_NULL_NON_DISPATCHABLE</span></div>
-<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160; </div>
-<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160;<span class="preprocessor">#ifndef VMA_NULLABLE_NON_DISPATCHABLE</span></div>
-<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160;<span class="preprocessor">    #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) &amp;&amp; !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)</span></div>
-<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;<span class="preprocessor">        #define VMA_NULLABLE_NON_DISPATCHABLE VMA_NULLABLE</span></div>
-<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160;<span class="preprocessor">        #define VMA_NULLABLE_NON_DISPATCHABLE</span></div>
-<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160; </div>
-<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160;VK_DEFINE_HANDLE(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a>)</div>
-<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; </div>
-<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;<span class="keyword">typedef</span> void (VKAPI_PTR *<a class="code" href="vk__mem__alloc_8h.html#a7e1ed85f7799600b03ad51a77acc21f3">PFN_vmaAllocateDeviceMemoryFunction</a>)(</div>
-<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL                    allocator,</div>
-<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160;    uint32_t                                     memoryType,</div>
-<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160;    VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE memory,</div>
-<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160;    VkDeviceSize                                 size,</div>
-<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE                           pUserData);</div>
-<div class="line"><a name="l02217"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b"> 2217</a></span>&#160;<span class="keyword">typedef</span> void (VKAPI_PTR *<a class="code" href="vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b">PFN_vmaFreeDeviceMemoryFunction</a>)(</div>
-<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL                    allocator,</div>
-<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160;    uint32_t                                     memoryType,</div>
-<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;    VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE memory,</div>
-<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160;    VkDeviceSize                                 size,</div>
-<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE                           pUserData);</div>
-<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160; </div>
-<div class="line"><a name="l02231"></a><span class="lineno"><a class="line" href="struct_vma_device_memory_callbacks.html"> 2231</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a> {</div>
-<div class="line"><a name="l02233"></a><span class="lineno"><a class="line" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb"> 2233</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a7e1ed85f7799600b03ad51a77acc21f3">PFN_vmaAllocateDeviceMemoryFunction</a> VMA_NULLABLE <a class="code" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">pfnAllocate</a>;</div>
-<div class="line"><a name="l02235"></a><span class="lineno"><a class="line" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c"> 2235</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b">PFN_vmaFreeDeviceMemoryFunction</a> VMA_NULLABLE <a class="code" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">pfnFree</a>;</div>
-<div class="line"><a name="l02237"></a><span class="lineno"><a class="line" href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6"> 2237</a></span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE <a class="code" href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6">pUserData</a>;</div>
-<div class="line"><a name="l02238"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a77692d3c8770ea8882d573206bd27b2b"> 2238</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a77692d3c8770ea8882d573206bd27b2b">VmaDeviceMemoryCallbacks</a>;</div>
-<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160; </div>
-<div class="line"><a name="l02241"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c"> 2241</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a> {</div>
-<div class="line"><a name="l02246"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d"> 2246</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</a> = 0x00000001,</div>
-<div class="line"><a name="l02271"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878"> 2271</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a> = 0x00000002,</div>
-<div class="line"><a name="l02286"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee"> 2286</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a> = 0x00000004,</div>
-<div class="line"><a name="l02298"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0"> 2298</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</a> = 0x00000008,</div>
-<div class="line"><a name="l02316"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f"> 2316</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT</a> = 0x00000010,</div>
-<div class="line"><a name="l02334"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089"> 2334</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</a> = 0x00000020,</div>
-<div class="line"><a name="l02351"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a"> 2351</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</a> = 0x00000040,</div>
-<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160; </div>
-<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c">VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF</div>
-<div class="line"><a name="l02354"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c"> 2354</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a>;</div>
-<div class="line"><a name="l02355"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d"> 2355</a></span>&#160;<span class="keyword">typedef</span> VkFlags <a class="code" href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a>;</div>
-<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160; </div>
-<div class="line"><a name="l02361"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html"> 2361</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a> {</div>
-<div class="line"><a name="l02362"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a77b7a74082823e865dd6546623468f96"> 2362</a></span>&#160;    PFN_vkGetPhysicalDeviceProperties VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a77b7a74082823e865dd6546623468f96">vkGetPhysicalDeviceProperties</a>;</div>
-<div class="line"><a name="l02363"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a60d25c33bba06bb8592e6875cbaa9830"> 2363</a></span>&#160;    PFN_vkGetPhysicalDeviceMemoryProperties VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a60d25c33bba06bb8592e6875cbaa9830">vkGetPhysicalDeviceMemoryProperties</a>;</div>
-<div class="line"><a name="l02364"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a2943bf99dfd784a0e8f599d987e22e6c"> 2364</a></span>&#160;    PFN_vkAllocateMemory VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a2943bf99dfd784a0e8f599d987e22e6c">vkAllocateMemory</a>;</div>
-<div class="line"><a name="l02365"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a4c658701778564d62034255b5dda91b4"> 2365</a></span>&#160;    PFN_vkFreeMemory VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a4c658701778564d62034255b5dda91b4">vkFreeMemory</a>;</div>
-<div class="line"><a name="l02366"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#ab5c1f38dea3a2cf00dc9eb4f57218c49"> 2366</a></span>&#160;    PFN_vkMapMemory VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#ab5c1f38dea3a2cf00dc9eb4f57218c49">vkMapMemory</a>;</div>
-<div class="line"><a name="l02367"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#acc798589736f0becb317fc2196c1d8b9"> 2367</a></span>&#160;    PFN_vkUnmapMemory VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#acc798589736f0becb317fc2196c1d8b9">vkUnmapMemory</a>;</div>
-<div class="line"><a name="l02368"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a33c322f4c4ad2810f8a9c97a277572f9"> 2368</a></span>&#160;    PFN_vkFlushMappedMemoryRanges VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a33c322f4c4ad2810f8a9c97a277572f9">vkFlushMappedMemoryRanges</a>;</div>
-<div class="line"><a name="l02369"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a5c1093bc32386a8060c37c9f282078a1"> 2369</a></span>&#160;    PFN_vkInvalidateMappedMemoryRanges VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a5c1093bc32386a8060c37c9f282078a1">vkInvalidateMappedMemoryRanges</a>;</div>
-<div class="line"><a name="l02370"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a94fc4f3a605d9880bb3c0ba2c2fc80b2"> 2370</a></span>&#160;    PFN_vkBindBufferMemory VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a94fc4f3a605d9880bb3c0ba2c2fc80b2">vkBindBufferMemory</a>;</div>
-<div class="line"><a name="l02371"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a1338d96a128a5ade648b8d934907c637"> 2371</a></span>&#160;    PFN_vkBindImageMemory VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a1338d96a128a5ade648b8d934907c637">vkBindImageMemory</a>;</div>
-<div class="line"><a name="l02372"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a5b92901df89a4194b0d12f6071d4d143"> 2372</a></span>&#160;    PFN_vkGetBufferMemoryRequirements VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a5b92901df89a4194b0d12f6071d4d143">vkGetBufferMemoryRequirements</a>;</div>
-<div class="line"><a name="l02373"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a475f6f49f8debe4d10800592606d53f4"> 2373</a></span>&#160;    PFN_vkGetImageMemoryRequirements VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a475f6f49f8debe4d10800592606d53f4">vkGetImageMemoryRequirements</a>;</div>
-<div class="line"><a name="l02374"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#ae8084315a25006271a2edfc3a447519f"> 2374</a></span>&#160;    PFN_vkCreateBuffer VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#ae8084315a25006271a2edfc3a447519f">vkCreateBuffer</a>;</div>
-<div class="line"><a name="l02375"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a7e054606faddb07f0e8556f3ed317d45"> 2375</a></span>&#160;    PFN_vkDestroyBuffer VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a7e054606faddb07f0e8556f3ed317d45">vkDestroyBuffer</a>;</div>
-<div class="line"><a name="l02376"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a23ebe70be515b9b5010a1d691200e325"> 2376</a></span>&#160;    PFN_vkCreateImage VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a23ebe70be515b9b5010a1d691200e325">vkCreateImage</a>;</div>
-<div class="line"><a name="l02377"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a90b898227039b1dcb3520f6e91f09ffa"> 2377</a></span>&#160;    PFN_vkDestroyImage VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a90b898227039b1dcb3520f6e91f09ffa">vkDestroyImage</a>;</div>
-<div class="line"><a name="l02378"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#ae5c0db8c89a3b82593dc16aa6a49fa3a"> 2378</a></span>&#160;    PFN_vkCmdCopyBuffer VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#ae5c0db8c89a3b82593dc16aa6a49fa3a">vkCmdCopyBuffer</a>;</div>
-<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160;    PFN_vkGetBufferMemoryRequirements2KHR VMA_NULLABLE vkGetBufferMemoryRequirements2KHR;</div>
-<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;    PFN_vkGetImageMemoryRequirements2KHR VMA_NULLABLE vkGetImageMemoryRequirements2KHR;</div>
-<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160;<span class="preprocessor">#if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160;    PFN_vkBindBufferMemory2KHR VMA_NULLABLE vkBindBufferMemory2KHR;</div>
-<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160;    PFN_vkBindImageMemory2KHR VMA_NULLABLE vkBindImageMemory2KHR;</div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160; </div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160;<span class="comment">// Define this macro to decorate pointers with an attribute specifying the</span></div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160;<span class="comment">// length of the array they point to if they are not null.</span></div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;<span class="comment">//</span></div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160;<span class="comment">// The length may be one of</span></div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;<span class="comment">// - The name of another parameter in the argument list where the pointer is declared</span></div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;<span class="comment">// - The name of another member in the struct where the pointer is declared</span></div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;<span class="comment">// - The name of a member of a struct type, meaning the value of that member in</span></div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;<span class="comment">//   the context of the call. For example</span></div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;<span class="comment">//   VMA_LEN_IF_NOT_NULL(&quot;VkPhysicalDeviceMemoryProperties::memoryHeapCount&quot;),</span></div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;<span class="comment">//   this means the number of memory heaps available in the device associated</span></div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;<span class="comment">//   with the VmaAllocator being dealt with.</span></div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;<span class="preprocessor">#ifndef VMA_LEN_IF_NOT_NULL</span></div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;<span class="preprocessor">    #define VMA_LEN_IF_NOT_NULL(len)</span></div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160; </div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;<span class="comment">// The VMA_NULLABLE macro is defined to be _Nullable when compiling with Clang.</span></div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160;<span class="comment">// see: https://clang.llvm.org/docs/AttributeReference.html#nullable</span></div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160;<span class="preprocessor">#ifndef VMA_NULLABLE</span></div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;<span class="preprocessor">    #ifdef __clang__</span></div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;<span class="preprocessor">        #define VMA_NULLABLE _Nullable</span></div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;<span class="preprocessor">        #define VMA_NULLABLE</span></div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; </div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;<span class="comment">// The VMA_NOT_NULL macro is defined to be _Nonnull when compiling with Clang.</span></div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;<span class="comment">// see: https://clang.llvm.org/docs/AttributeReference.html#nonnull</span></div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;<span class="preprocessor">#ifndef VMA_NOT_NULL</span></div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;<span class="preprocessor">    #ifdef __clang__</span></div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;<span class="preprocessor">        #define VMA_NOT_NULL _Nonnull</span></div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;<span class="preprocessor">        #define VMA_NOT_NULL</span></div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; </div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160;<span class="comment">// If non-dispatchable handles are represented as pointers then we can give</span></div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160;<span class="comment">// then nullability annotations</span></div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;<span class="preprocessor">#ifndef VMA_NOT_NULL_NON_DISPATCHABLE</span></div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;<span class="preprocessor">    #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) &amp;&amp; !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)</span></div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;<span class="preprocessor">        #define VMA_NOT_NULL_NON_DISPATCHABLE VMA_NOT_NULL</span></div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;<span class="preprocessor">        #define VMA_NOT_NULL_NON_DISPATCHABLE</span></div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160; </div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160;<span class="preprocessor">#ifndef VMA_NULLABLE_NON_DISPATCHABLE</span></div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;<span class="preprocessor">    #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) &amp;&amp; !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)</span></div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160;<span class="preprocessor">        #define VMA_NULLABLE_NON_DISPATCHABLE VMA_NULLABLE</span></div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160;<span class="preprocessor">        #define VMA_NULLABLE_NON_DISPATCHABLE</span></div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160; </div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160;VK_DEFINE_HANDLE(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a>)</div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160; </div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160;<span class="keyword">typedef</span> void (VKAPI_PTR *<a class="code" href="vk__mem__alloc_8h.html#a7e1ed85f7799600b03ad51a77acc21f3">PFN_vmaAllocateDeviceMemoryFunction</a>)(</div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL                    allocator,</div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;    uint32_t                                     memoryType,</div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160;    VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE memory,</div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160;    VkDeviceSize                                 size,</div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE                           pUserData);</div>
+<div class="line"><a name="l02214"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b"> 2214</a></span>&#160;<span class="keyword">typedef</span> void (VKAPI_PTR *<a class="code" href="vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b">PFN_vmaFreeDeviceMemoryFunction</a>)(</div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL                    allocator,</div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;    uint32_t                                     memoryType,</div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;    VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE memory,</div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;    VkDeviceSize                                 size,</div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE                           pUserData);</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160; </div>
+<div class="line"><a name="l02228"></a><span class="lineno"><a class="line" href="struct_vma_device_memory_callbacks.html"> 2228</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a> {</div>
+<div class="line"><a name="l02230"></a><span class="lineno"><a class="line" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb"> 2230</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a7e1ed85f7799600b03ad51a77acc21f3">PFN_vmaAllocateDeviceMemoryFunction</a> VMA_NULLABLE <a class="code" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">pfnAllocate</a>;</div>
+<div class="line"><a name="l02232"></a><span class="lineno"><a class="line" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c"> 2232</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b">PFN_vmaFreeDeviceMemoryFunction</a> VMA_NULLABLE <a class="code" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">pfnFree</a>;</div>
+<div class="line"><a name="l02234"></a><span class="lineno"><a class="line" href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6"> 2234</a></span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE <a class="code" href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6">pUserData</a>;</div>
+<div class="line"><a name="l02235"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a77692d3c8770ea8882d573206bd27b2b"> 2235</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a77692d3c8770ea8882d573206bd27b2b">VmaDeviceMemoryCallbacks</a>;</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160; </div>
+<div class="line"><a name="l02238"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c"> 2238</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a> {</div>
+<div class="line"><a name="l02243"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d"> 2243</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</a> = 0x00000001,</div>
+<div class="line"><a name="l02268"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878"> 2268</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a> = 0x00000002,</div>
+<div class="line"><a name="l02283"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee"> 2283</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a> = 0x00000004,</div>
+<div class="line"><a name="l02295"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0"> 2295</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</a> = 0x00000008,</div>
+<div class="line"><a name="l02313"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f"> 2313</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT</a> = 0x00000010,</div>
+<div class="line"><a name="l02331"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089"> 2331</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</a> = 0x00000020,</div>
+<div class="line"><a name="l02348"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a"> 2348</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</a> = 0x00000040,</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160; </div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c">VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF</div>
+<div class="line"><a name="l02351"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c"> 2351</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a>;</div>
+<div class="line"><a name="l02352"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d"> 2352</a></span>&#160;<span class="keyword">typedef</span> VkFlags <a class="code" href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a>;</div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160; </div>
+<div class="line"><a name="l02358"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html"> 2358</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a> {</div>
+<div class="line"><a name="l02359"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a77b7a74082823e865dd6546623468f96"> 2359</a></span>&#160;    PFN_vkGetPhysicalDeviceProperties VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a77b7a74082823e865dd6546623468f96">vkGetPhysicalDeviceProperties</a>;</div>
+<div class="line"><a name="l02360"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a60d25c33bba06bb8592e6875cbaa9830"> 2360</a></span>&#160;    PFN_vkGetPhysicalDeviceMemoryProperties VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a60d25c33bba06bb8592e6875cbaa9830">vkGetPhysicalDeviceMemoryProperties</a>;</div>
+<div class="line"><a name="l02361"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a2943bf99dfd784a0e8f599d987e22e6c"> 2361</a></span>&#160;    PFN_vkAllocateMemory VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a2943bf99dfd784a0e8f599d987e22e6c">vkAllocateMemory</a>;</div>
+<div class="line"><a name="l02362"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a4c658701778564d62034255b5dda91b4"> 2362</a></span>&#160;    PFN_vkFreeMemory VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a4c658701778564d62034255b5dda91b4">vkFreeMemory</a>;</div>
+<div class="line"><a name="l02363"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#ab5c1f38dea3a2cf00dc9eb4f57218c49"> 2363</a></span>&#160;    PFN_vkMapMemory VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#ab5c1f38dea3a2cf00dc9eb4f57218c49">vkMapMemory</a>;</div>
+<div class="line"><a name="l02364"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#acc798589736f0becb317fc2196c1d8b9"> 2364</a></span>&#160;    PFN_vkUnmapMemory VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#acc798589736f0becb317fc2196c1d8b9">vkUnmapMemory</a>;</div>
+<div class="line"><a name="l02365"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a33c322f4c4ad2810f8a9c97a277572f9"> 2365</a></span>&#160;    PFN_vkFlushMappedMemoryRanges VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a33c322f4c4ad2810f8a9c97a277572f9">vkFlushMappedMemoryRanges</a>;</div>
+<div class="line"><a name="l02366"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a5c1093bc32386a8060c37c9f282078a1"> 2366</a></span>&#160;    PFN_vkInvalidateMappedMemoryRanges VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a5c1093bc32386a8060c37c9f282078a1">vkInvalidateMappedMemoryRanges</a>;</div>
+<div class="line"><a name="l02367"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a94fc4f3a605d9880bb3c0ba2c2fc80b2"> 2367</a></span>&#160;    PFN_vkBindBufferMemory VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a94fc4f3a605d9880bb3c0ba2c2fc80b2">vkBindBufferMemory</a>;</div>
+<div class="line"><a name="l02368"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a1338d96a128a5ade648b8d934907c637"> 2368</a></span>&#160;    PFN_vkBindImageMemory VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a1338d96a128a5ade648b8d934907c637">vkBindImageMemory</a>;</div>
+<div class="line"><a name="l02369"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a5b92901df89a4194b0d12f6071d4d143"> 2369</a></span>&#160;    PFN_vkGetBufferMemoryRequirements VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a5b92901df89a4194b0d12f6071d4d143">vkGetBufferMemoryRequirements</a>;</div>
+<div class="line"><a name="l02370"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a475f6f49f8debe4d10800592606d53f4"> 2370</a></span>&#160;    PFN_vkGetImageMemoryRequirements VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a475f6f49f8debe4d10800592606d53f4">vkGetImageMemoryRequirements</a>;</div>
+<div class="line"><a name="l02371"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#ae8084315a25006271a2edfc3a447519f"> 2371</a></span>&#160;    PFN_vkCreateBuffer VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#ae8084315a25006271a2edfc3a447519f">vkCreateBuffer</a>;</div>
+<div class="line"><a name="l02372"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a7e054606faddb07f0e8556f3ed317d45"> 2372</a></span>&#160;    PFN_vkDestroyBuffer VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a7e054606faddb07f0e8556f3ed317d45">vkDestroyBuffer</a>;</div>
+<div class="line"><a name="l02373"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a23ebe70be515b9b5010a1d691200e325"> 2373</a></span>&#160;    PFN_vkCreateImage VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a23ebe70be515b9b5010a1d691200e325">vkCreateImage</a>;</div>
+<div class="line"><a name="l02374"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#a90b898227039b1dcb3520f6e91f09ffa"> 2374</a></span>&#160;    PFN_vkDestroyImage VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#a90b898227039b1dcb3520f6e91f09ffa">vkDestroyImage</a>;</div>
+<div class="line"><a name="l02375"></a><span class="lineno"><a class="line" href="struct_vma_vulkan_functions.html#ae5c0db8c89a3b82593dc16aa6a49fa3a"> 2375</a></span>&#160;    PFN_vkCmdCopyBuffer VMA_NULLABLE <a class="code" href="struct_vma_vulkan_functions.html#ae5c0db8c89a3b82593dc16aa6a49fa3a">vkCmdCopyBuffer</a>;</div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160;    PFN_vkGetBufferMemoryRequirements2KHR VMA_NULLABLE vkGetBufferMemoryRequirements2KHR;</div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;    PFN_vkGetImageMemoryRequirements2KHR VMA_NULLABLE vkGetImageMemoryRequirements2KHR;</div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160;<span class="preprocessor">#if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;    PFN_vkBindBufferMemory2KHR VMA_NULLABLE vkBindBufferMemory2KHR;</div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160;    PFN_vkBindImageMemory2KHR VMA_NULLABLE vkBindImageMemory2KHR;</div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160;    PFN_vkGetPhysicalDeviceMemoryProperties2KHR VMA_NULLABLE vkGetPhysicalDeviceMemoryProperties2KHR;</div>
 <div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160;    PFN_vkGetPhysicalDeviceMemoryProperties2KHR VMA_NULLABLE vkGetPhysicalDeviceMemoryProperties2KHR;</div>
-<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02390"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#abb0a8e3b5040d847571cca6c7f9a8074"> 2390</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#abb0a8e3b5040d847571cca6c7f9a8074">VmaVulkanFunctions</a>;</div>
-<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160; </div>
-<div class="line"><a name="l02393"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2"> 2393</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2">VmaRecordFlagBits</a> {</div>
-<div class="line"><a name="l02399"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7"> 2399</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7">VMA_RECORD_FLUSH_AFTER_CALL_BIT</a> = 0x00000001,</div>
-<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160; </div>
-<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e">VMA_RECORD_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF</div>
-<div class="line"><a name="l02402"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e"> 2402</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2">VmaRecordFlagBits</a>;</div>
-<div class="line"><a name="l02403"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828"> 2403</a></span>&#160;<span class="keyword">typedef</span> VkFlags <a class="code" href="vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828">VmaRecordFlags</a>;</div>
-<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160; </div>
-<div class="line"><a name="l02406"></a><span class="lineno"><a class="line" href="struct_vma_record_settings.html"> 2406</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_record_settings.html">VmaRecordSettings</a></div>
-<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160;{</div>
-<div class="line"><a name="l02409"></a><span class="lineno"><a class="line" href="struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a"> 2409</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828">VmaRecordFlags</a> <a class="code" href="struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a">flags</a>;</div>
-<div class="line"><a name="l02417"></a><span class="lineno"><a class="line" href="struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d"> 2417</a></span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* VMA_NOT_NULL <a class="code" href="struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d">pFilePath</a>;</div>
-<div class="line"><a name="l02418"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a16e21c877101493fce582664cd8754fc"> 2418</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a16e21c877101493fce582664cd8754fc">VmaRecordSettings</a>;</div>
-<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160; </div>
-<div class="line"><a name="l02421"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html"> 2421</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a></div>
-<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160;{</div>
-<div class="line"><a name="l02424"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346"> 2424</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a> <a class="code" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">flags</a>;</div>
+<div class="line"><a name="l02387"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#abb0a8e3b5040d847571cca6c7f9a8074"> 2387</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#abb0a8e3b5040d847571cca6c7f9a8074">VmaVulkanFunctions</a>;</div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160; </div>
+<div class="line"><a name="l02390"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2"> 2390</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2">VmaRecordFlagBits</a> {</div>
+<div class="line"><a name="l02396"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7"> 2396</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7">VMA_RECORD_FLUSH_AFTER_CALL_BIT</a> = 0x00000001,</div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160; </div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e">VMA_RECORD_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF</div>
+<div class="line"><a name="l02399"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e"> 2399</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2">VmaRecordFlagBits</a>;</div>
+<div class="line"><a name="l02400"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828"> 2400</a></span>&#160;<span class="keyword">typedef</span> VkFlags <a class="code" href="vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828">VmaRecordFlags</a>;</div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160; </div>
+<div class="line"><a name="l02403"></a><span class="lineno"><a class="line" href="struct_vma_record_settings.html"> 2403</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_record_settings.html">VmaRecordSettings</a></div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160;{</div>
+<div class="line"><a name="l02406"></a><span class="lineno"><a class="line" href="struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a"> 2406</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828">VmaRecordFlags</a> <a class="code" href="struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a">flags</a>;</div>
+<div class="line"><a name="l02414"></a><span class="lineno"><a class="line" href="struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d"> 2414</a></span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* VMA_NOT_NULL <a class="code" href="struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d">pFilePath</a>;</div>
+<div class="line"><a name="l02415"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a16e21c877101493fce582664cd8754fc"> 2415</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a16e21c877101493fce582664cd8754fc">VmaRecordSettings</a>;</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160; </div>
+<div class="line"><a name="l02418"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html"> 2418</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a></div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160;{</div>
+<div class="line"><a name="l02421"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346"> 2421</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a> <a class="code" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">flags</a>;</div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160; </div>
+<div class="line"><a name="l02424"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156"> 2424</a></span>&#160;    VkPhysicalDevice VMA_NOT_NULL <a class="code" href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156">physicalDevice</a>;</div>
 <div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160; </div>
-<div class="line"><a name="l02427"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156"> 2427</a></span>&#160;    VkPhysicalDevice VMA_NOT_NULL <a class="code" href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156">physicalDevice</a>;</div>
+<div class="line"><a name="l02427"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500"> 2427</a></span>&#160;    VkDevice VMA_NOT_NULL <a class="code" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500">device</a>;</div>
 <div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160; </div>
-<div class="line"><a name="l02430"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500"> 2430</a></span>&#160;    VkDevice VMA_NOT_NULL <a class="code" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500">device</a>;</div>
+<div class="line"><a name="l02430"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a"> 2430</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a">preferredLargeHeapBlockSize</a>;</div>
 <div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160; </div>
-<div class="line"><a name="l02433"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a"> 2433</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a">preferredLargeHeapBlockSize</a>;</div>
+<div class="line"><a name="l02433"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d"> 2433</a></span>&#160;    <span class="keyword">const</span> VkAllocationCallbacks* VMA_NULLABLE <a class="code" href="struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d">pAllocationCallbacks</a>;</div>
 <div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160; </div>
-<div class="line"><a name="l02436"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d"> 2436</a></span>&#160;    <span class="keyword">const</span> VkAllocationCallbacks* VMA_NULLABLE <a class="code" href="struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d">pAllocationCallbacks</a>;</div>
-<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160; </div>
-<div class="line"><a name="l02439"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e"> 2439</a></span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a>* VMA_NULLABLE <a class="code" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e">pDeviceMemoryCallbacks</a>;</div>
-<div class="line"><a name="l02453"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a21ea188dd212b8171cb9ecbed4a2a3a7"> 2453</a></span>&#160;    uint32_t <a class="code" href="struct_vma_allocator_create_info.html#a21ea188dd212b8171cb9ecbed4a2a3a7">frameInUseCount</a>;</div>
-<div class="line"><a name="l02478"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b"> 2478</a></span>&#160;    <span class="keyword">const</span> VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(<span class="stringliteral">&quot;VkPhysicalDeviceMemoryProperties::memoryHeapCount&quot;</span>) <a class="code" href="struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b">pHeapSizeLimit</a>;</div>
-<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160; </div>
-<div class="line"><a name="l02484"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd"> 2484</a></span>&#160;    const <a class="code" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a>* VMA_NULLABLE <a class="code" href="struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd">pVulkanFunctions</a>;</div>
-<div class="line"><a name="l02491"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee"> 2491</a></span>&#160;    const <a class="code" href="struct_vma_record_settings.html">VmaRecordSettings</a>* VMA_NULLABLE <a class="code" href="struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee">pRecordSettings</a>;</div>
-<div class="line"><a name="l02496"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a70dd42e29b1df1d1b9b61532ae0b370b"> 2496</a></span>&#160;    VkInstance VMA_NOT_NULL <a class="code" href="struct_vma_allocator_create_info.html#a70dd42e29b1df1d1b9b61532ae0b370b">instance</a>;</div>
-<div class="line"><a name="l02505"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285"> 2505</a></span>&#160;    uint32_t <a class="code" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">vulkanApiVersion</a>;</div>
-<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160;<span class="preprocessor">#if VMA_EXTERNAL_MEMORY</span></div>
-<div class="line"><a name="l02516"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#ae8f0db05e5cb4c43d7713bf4a49a736b"> 2516</a></span>&#160;    <span class="keyword">const</span> VkExternalMemoryHandleTypeFlagsKHR* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(<span class="stringliteral">&quot;VkPhysicalDeviceMemoryProperties::memoryTypeCount&quot;</span>) <a class="code" href="struct_vma_allocator_create_info.html#ae8f0db05e5cb4c43d7713bf4a49a736b">pTypeExternalMemoryHandleTypes</a>;</div>
-<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_EXTERNAL_MEMORY</span></div>
-<div class="line"><a name="l02518"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aad9652301d33759b83e52d4f3605a14a"> 2518</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#aad9652301d33759b83e52d4f3605a14a">VmaAllocatorCreateInfo</a>;</div>
-<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160; </div>
-<div class="line"><a name="l02521"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb"> 2521</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a>(</div>
-<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a>* VMA_NOT_NULL pCreateInfo,</div>
-<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NULLABLE * VMA_NOT_NULL pAllocator);</div>
-<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160; </div>
-<div class="line"><a name="l02526"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d"> 2526</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d">vmaDestroyAllocator</a>(</div>
-<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NULLABLE allocator);</div>
-<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160; </div>
-<div class="line"><a name="l02531"></a><span class="lineno"><a class="line" href="struct_vma_allocator_info.html"> 2531</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a></div>
-<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160;{</div>
-<div class="line"><a name="l02537"></a><span class="lineno"><a class="line" href="struct_vma_allocator_info.html#a2ed6a4d2d3fea039d66a13f15d0ce5fe"> 2537</a></span>&#160;    VkInstance VMA_NOT_NULL <a class="code" href="struct_vma_allocator_info.html#a2ed6a4d2d3fea039d66a13f15d0ce5fe">instance</a>;</div>
-<div class="line"><a name="l02542"></a><span class="lineno"><a class="line" href="struct_vma_allocator_info.html#aba2b703f96e51d567717e1fb2935b47a"> 2542</a></span>&#160;    VkPhysicalDevice VMA_NOT_NULL <a class="code" href="struct_vma_allocator_info.html#aba2b703f96e51d567717e1fb2935b47a">physicalDevice</a>;</div>
-<div class="line"><a name="l02547"></a><span class="lineno"><a class="line" href="struct_vma_allocator_info.html#a012b4c485bf3b0ea8921352c5ee0c357"> 2547</a></span>&#160;    VkDevice VMA_NOT_NULL <a class="code" href="struct_vma_allocator_info.html#a012b4c485bf3b0ea8921352c5ee0c357">device</a>;</div>
-<div class="line"><a name="l02548"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a1988031b0223fdbd564250fa1edd942c"> 2548</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a1988031b0223fdbd564250fa1edd942c">VmaAllocatorInfo</a>;</div>
-<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160; </div>
-<div class="line"><a name="l02555"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#afa02231a791b37255720d566a52683e7"> 2555</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#afa02231a791b37255720d566a52683e7">vmaGetAllocatorInfo</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator, <a class="code" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a>* VMA_NOT_NULL pAllocatorInfo);</div>
-<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160; </div>
-<div class="line"><a name="l02561"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0"> 2561</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0">vmaGetPhysicalDeviceProperties</a>(</div>
-<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceProperties* VMA_NULLABLE * VMA_NOT_NULL ppPhysicalDeviceProperties);</div>
-<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160; </div>
-<div class="line"><a name="l02569"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19"> 2569</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19">vmaGetMemoryProperties</a>(</div>
-<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceMemoryProperties* VMA_NULLABLE * VMA_NOT_NULL ppPhysicalDeviceMemoryProperties);</div>
-<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160; </div>
-<div class="line"><a name="l02579"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca"> 2579</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca">vmaGetMemoryTypeProperties</a>(</div>
-<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160;    uint32_t memoryTypeIndex,</div>
-<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160;    VkMemoryPropertyFlags* VMA_NOT_NULL pFlags);</div>
-<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160; </div>
-<div class="line"><a name="l02592"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236"> 2592</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236">vmaSetCurrentFrameIndex</a>(</div>
-<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160;    uint32_t frameIndex);</div>
-<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160; </div>
-<div class="line"><a name="l02598"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html"> 2598</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a></div>
-<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160;{</div>
-<div class="line"><a name="l02601"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4"> 2601</a></span>&#160;    uint32_t <a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a>;</div>
-<div class="line"><a name="l02603"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff"> 2603</a></span>&#160;    uint32_t <a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a>;</div>
-<div class="line"><a name="l02605"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9"> 2605</a></span>&#160;    uint32_t <a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
-<div class="line"><a name="l02607"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a"> 2607</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a>;</div>
-<div class="line"><a name="l02609"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669"> 2609</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a>;</div>
-<div class="line"><a name="l02610"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#a1081a039964e566c672e7a2347f9e599"> 2610</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>, <a class="code" href="struct_vma_stat_info.html#a1081a039964e566c672e7a2347f9e599">allocationSizeAvg</a>, <a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a>;</div>
-<div class="line"><a name="l02611"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#a2f9b3452af90c9768a30b7fb6ae194fc"> 2611</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, <a class="code" href="struct_vma_stat_info.html#a2f9b3452af90c9768a30b7fb6ae194fc">unusedRangeSizeAvg</a>, <a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>;</div>
-<div class="line"><a name="l02612"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aec5b57e29c97b5d69c6d5654d60df878"> 2612</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#aec5b57e29c97b5d69c6d5654d60df878">VmaStatInfo</a>;</div>
-<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160; </div>
-<div class="line"><a name="l02615"></a><span class="lineno"><a class="line" href="struct_vma_stats.html"> 2615</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_stats.html">VmaStats</a></div>
-<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160;{</div>
-<div class="line"><a name="l02617"></a><span class="lineno"><a class="line" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331"> 2617</a></span>&#160;    <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> <a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[VK_MAX_MEMORY_TYPES];</div>
-<div class="line"><a name="l02618"></a><span class="lineno"><a class="line" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0"> 2618</a></span>&#160;    <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> <a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[VK_MAX_MEMORY_HEAPS];</div>
-<div class="line"><a name="l02619"></a><span class="lineno"><a class="line" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9"> 2619</a></span>&#160;    <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> <a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>;</div>
-<div class="line"><a name="l02620"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a21813b2efdf3836767a9058cd8a94034"> 2620</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a21813b2efdf3836767a9058cd8a94034">VmaStats</a>;</div>
-<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160; </div>
-<div class="line"><a name="l02631"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3"> 2631</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3">vmaCalculateStats</a>(</div>
-<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160;    <a class="code" href="struct_vma_stats.html">VmaStats</a>* VMA_NOT_NULL pStats);</div>
-<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160; </div>
-<div class="line"><a name="l02637"></a><span class="lineno"><a class="line" href="struct_vma_budget.html"> 2637</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_budget.html">VmaBudget</a></div>
-<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160;{</div>
-<div class="line"><a name="l02641"></a><span class="lineno"><a class="line" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0"> 2641</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">blockBytes</a>;</div>
-<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160; </div>
-<div class="line"><a name="l02652"></a><span class="lineno"><a class="line" href="struct_vma_budget.html#a7e2a6583ebd63e194951c542563804d8"> 2652</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_budget.html#a7e2a6583ebd63e194951c542563804d8">allocationBytes</a>;</div>
-<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160; </div>
-<div class="line"><a name="l02662"></a><span class="lineno"><a class="line" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6"> 2662</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a>;</div>
-<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>&#160; </div>
-<div class="line"><a name="l02673"></a><span class="lineno"><a class="line" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd"> 2673</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a>;</div>
-<div class="line"><a name="l02674"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa078667e71b1ef24e87a6a30d128381d"> 2674</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#aa078667e71b1ef24e87a6a30d128381d">VmaBudget</a>;</div>
-<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>&#160; </div>
-<div class="line"><a name="l02686"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aec0ed24ebea2d0099eed5f801daaefba"> 2686</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aec0ed24ebea2d0099eed5f801daaefba">vmaGetBudget</a>(</div>
-<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>&#160;    <a class="code" href="struct_vma_budget.html">VmaBudget</a>* VMA_NOT_NULL pBudget);</div>
-<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>&#160; </div>
-<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160;<span class="preprocessor">#ifndef VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l02691"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ae25f0d55fd91cb166f002b63244800e1"> 2691</a></span>&#160;<span class="preprocessor">#define VMA_STATS_STRING_ENABLED 1</span></div>
-<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>&#160; </div>
-<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>&#160; </div>
-<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>&#160; </div>
-<div class="line"><a name="l02699"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0"> 2699</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0">vmaBuildStatsString</a>(</div>
-<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>&#160;    <span class="keywordtype">char</span>* VMA_NULLABLE * VMA_NOT_NULL ppStatsString,</div>
-<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>&#160;    VkBool32 detailedMap);</div>
-<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>&#160; </div>
-<div class="line"><a name="l02704"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288"> 2704</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288">vmaFreeStatsString</a>(</div>
-<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160;    <span class="keywordtype">char</span>* VMA_NULLABLE pStatsString);</div>
-<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160; </div>
-<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160; </div>
-<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>&#160;VK_DEFINE_HANDLE(<a class="code" href="struct_vma_pool.html">VmaPool</a>)</div>
-<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>&#160; </div>
-<div class="line"><a name="l02720"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc"> 2720</a></span>&#160;typedef enum <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a></div>
-<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>&#160;{</div>
-<div class="line"><a name="l02725"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd"> 2725</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a> = 0,</div>
-<div class="line"><a name="l02742"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"> 2742</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a> = 1,</div>
-<div class="line"><a name="l02752"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5"> 2752</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a> = 2,</div>
-<div class="line"><a name="l02759"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67"> 2759</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a> = 3,</div>
-<div class="line"><a name="l02768"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27"> 2768</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a> = 4,</div>
-<div class="line"><a name="l02774"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500"> 2774</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500">VMA_MEMORY_USAGE_CPU_COPY</a> = 5,</div>
-<div class="line"><a name="l02782"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d"> 2782</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED</a> = 6,</div>
+<div class="line"><a name="l02436"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e"> 2436</a></span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a>* VMA_NULLABLE <a class="code" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e">pDeviceMemoryCallbacks</a>;</div>
+<div class="line"><a name="l02450"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a21ea188dd212b8171cb9ecbed4a2a3a7"> 2450</a></span>&#160;    uint32_t <a class="code" href="struct_vma_allocator_create_info.html#a21ea188dd212b8171cb9ecbed4a2a3a7">frameInUseCount</a>;</div>
+<div class="line"><a name="l02475"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b"> 2475</a></span>&#160;    <span class="keyword">const</span> VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(<span class="stringliteral">&quot;VkPhysicalDeviceMemoryProperties::memoryHeapCount&quot;</span>) <a class="code" href="struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b">pHeapSizeLimit</a>;</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160; </div>
+<div class="line"><a name="l02481"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd"> 2481</a></span>&#160;    const <a class="code" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a>* VMA_NULLABLE <a class="code" href="struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd">pVulkanFunctions</a>;</div>
+<div class="line"><a name="l02488"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee"> 2488</a></span>&#160;    const <a class="code" href="struct_vma_record_settings.html">VmaRecordSettings</a>* VMA_NULLABLE <a class="code" href="struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee">pRecordSettings</a>;</div>
+<div class="line"><a name="l02493"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#a70dd42e29b1df1d1b9b61532ae0b370b"> 2493</a></span>&#160;    VkInstance VMA_NOT_NULL <a class="code" href="struct_vma_allocator_create_info.html#a70dd42e29b1df1d1b9b61532ae0b370b">instance</a>;</div>
+<div class="line"><a name="l02502"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285"> 2502</a></span>&#160;    uint32_t <a class="code" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">vulkanApiVersion</a>;</div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>&#160;<span class="preprocessor">#if VMA_EXTERNAL_MEMORY</span></div>
+<div class="line"><a name="l02513"></a><span class="lineno"><a class="line" href="struct_vma_allocator_create_info.html#ae8f0db05e5cb4c43d7713bf4a49a736b"> 2513</a></span>&#160;    <span class="keyword">const</span> VkExternalMemoryHandleTypeFlagsKHR* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(<span class="stringliteral">&quot;VkPhysicalDeviceMemoryProperties::memoryTypeCount&quot;</span>) <a class="code" href="struct_vma_allocator_create_info.html#ae8f0db05e5cb4c43d7713bf4a49a736b">pTypeExternalMemoryHandleTypes</a>;</div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_EXTERNAL_MEMORY</span></div>
+<div class="line"><a name="l02515"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aad9652301d33759b83e52d4f3605a14a"> 2515</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#aad9652301d33759b83e52d4f3605a14a">VmaAllocatorCreateInfo</a>;</div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160; </div>
+<div class="line"><a name="l02518"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb"> 2518</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a>(</div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a>* VMA_NOT_NULL pCreateInfo,</div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NULLABLE * VMA_NOT_NULL pAllocator);</div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160; </div>
+<div class="line"><a name="l02523"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d"> 2523</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d">vmaDestroyAllocator</a>(</div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NULLABLE allocator);</div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160; </div>
+<div class="line"><a name="l02528"></a><span class="lineno"><a class="line" href="struct_vma_allocator_info.html"> 2528</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a></div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160;{</div>
+<div class="line"><a name="l02534"></a><span class="lineno"><a class="line" href="struct_vma_allocator_info.html#a2ed6a4d2d3fea039d66a13f15d0ce5fe"> 2534</a></span>&#160;    VkInstance VMA_NOT_NULL <a class="code" href="struct_vma_allocator_info.html#a2ed6a4d2d3fea039d66a13f15d0ce5fe">instance</a>;</div>
+<div class="line"><a name="l02539"></a><span class="lineno"><a class="line" href="struct_vma_allocator_info.html#aba2b703f96e51d567717e1fb2935b47a"> 2539</a></span>&#160;    VkPhysicalDevice VMA_NOT_NULL <a class="code" href="struct_vma_allocator_info.html#aba2b703f96e51d567717e1fb2935b47a">physicalDevice</a>;</div>
+<div class="line"><a name="l02544"></a><span class="lineno"><a class="line" href="struct_vma_allocator_info.html#a012b4c485bf3b0ea8921352c5ee0c357"> 2544</a></span>&#160;    VkDevice VMA_NOT_NULL <a class="code" href="struct_vma_allocator_info.html#a012b4c485bf3b0ea8921352c5ee0c357">device</a>;</div>
+<div class="line"><a name="l02545"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a1988031b0223fdbd564250fa1edd942c"> 2545</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a1988031b0223fdbd564250fa1edd942c">VmaAllocatorInfo</a>;</div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160; </div>
+<div class="line"><a name="l02552"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#afa02231a791b37255720d566a52683e7"> 2552</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#afa02231a791b37255720d566a52683e7">vmaGetAllocatorInfo</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator, <a class="code" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a>* VMA_NOT_NULL pAllocatorInfo);</div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160; </div>
+<div class="line"><a name="l02558"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0"> 2558</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0">vmaGetPhysicalDeviceProperties</a>(</div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceProperties* VMA_NULLABLE * VMA_NOT_NULL ppPhysicalDeviceProperties);</div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160; </div>
+<div class="line"><a name="l02566"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19"> 2566</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19">vmaGetMemoryProperties</a>(</div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceMemoryProperties* VMA_NULLABLE * VMA_NOT_NULL ppPhysicalDeviceMemoryProperties);</div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160; </div>
+<div class="line"><a name="l02576"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca"> 2576</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca">vmaGetMemoryTypeProperties</a>(</div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160;    uint32_t memoryTypeIndex,</div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160;    VkMemoryPropertyFlags* VMA_NOT_NULL pFlags);</div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160; </div>
+<div class="line"><a name="l02589"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236"> 2589</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236">vmaSetCurrentFrameIndex</a>(</div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160;    uint32_t frameIndex);</div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160; </div>
+<div class="line"><a name="l02595"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html"> 2595</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a></div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160;{</div>
+<div class="line"><a name="l02598"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4"> 2598</a></span>&#160;    uint32_t <a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a>;</div>
+<div class="line"><a name="l02600"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff"> 2600</a></span>&#160;    uint32_t <a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a>;</div>
+<div class="line"><a name="l02602"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9"> 2602</a></span>&#160;    uint32_t <a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
+<div class="line"><a name="l02604"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a"> 2604</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a>;</div>
+<div class="line"><a name="l02606"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669"> 2606</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a>;</div>
+<div class="line"><a name="l02607"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#a1081a039964e566c672e7a2347f9e599"> 2607</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>, <a class="code" href="struct_vma_stat_info.html#a1081a039964e566c672e7a2347f9e599">allocationSizeAvg</a>, <a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a>;</div>
+<div class="line"><a name="l02608"></a><span class="lineno"><a class="line" href="struct_vma_stat_info.html#a2f9b3452af90c9768a30b7fb6ae194fc"> 2608</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, <a class="code" href="struct_vma_stat_info.html#a2f9b3452af90c9768a30b7fb6ae194fc">unusedRangeSizeAvg</a>, <a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>;</div>
+<div class="line"><a name="l02609"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aec5b57e29c97b5d69c6d5654d60df878"> 2609</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#aec5b57e29c97b5d69c6d5654d60df878">VmaStatInfo</a>;</div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160; </div>
+<div class="line"><a name="l02612"></a><span class="lineno"><a class="line" href="struct_vma_stats.html"> 2612</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_stats.html">VmaStats</a></div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160;{</div>
+<div class="line"><a name="l02614"></a><span class="lineno"><a class="line" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331"> 2614</a></span>&#160;    <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> <a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[VK_MAX_MEMORY_TYPES];</div>
+<div class="line"><a name="l02615"></a><span class="lineno"><a class="line" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0"> 2615</a></span>&#160;    <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> <a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[VK_MAX_MEMORY_HEAPS];</div>
+<div class="line"><a name="l02616"></a><span class="lineno"><a class="line" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9"> 2616</a></span>&#160;    <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> <a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>;</div>
+<div class="line"><a name="l02617"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a21813b2efdf3836767a9058cd8a94034"> 2617</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a21813b2efdf3836767a9058cd8a94034">VmaStats</a>;</div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160; </div>
+<div class="line"><a name="l02628"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3"> 2628</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3">vmaCalculateStats</a>(</div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160;    <a class="code" href="struct_vma_stats.html">VmaStats</a>* VMA_NOT_NULL pStats);</div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160; </div>
+<div class="line"><a name="l02634"></a><span class="lineno"><a class="line" href="struct_vma_budget.html"> 2634</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_budget.html">VmaBudget</a></div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160;{</div>
+<div class="line"><a name="l02638"></a><span class="lineno"><a class="line" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0"> 2638</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">blockBytes</a>;</div>
+<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160; </div>
+<div class="line"><a name="l02649"></a><span class="lineno"><a class="line" href="struct_vma_budget.html#a7e2a6583ebd63e194951c542563804d8"> 2649</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_budget.html#a7e2a6583ebd63e194951c542563804d8">allocationBytes</a>;</div>
+<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160; </div>
+<div class="line"><a name="l02659"></a><span class="lineno"><a class="line" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6"> 2659</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a>;</div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>&#160; </div>
+<div class="line"><a name="l02670"></a><span class="lineno"><a class="line" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd"> 2670</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a>;</div>
+<div class="line"><a name="l02671"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa078667e71b1ef24e87a6a30d128381d"> 2671</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#aa078667e71b1ef24e87a6a30d128381d">VmaBudget</a>;</div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>&#160; </div>
+<div class="line"><a name="l02683"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aec0ed24ebea2d0099eed5f801daaefba"> 2683</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aec0ed24ebea2d0099eed5f801daaefba">vmaGetBudget</a>(</div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160;    <a class="code" href="struct_vma_budget.html">VmaBudget</a>* VMA_NOT_NULL pBudget);</div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>&#160; </div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160;<span class="preprocessor">#ifndef VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l02688"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ae25f0d55fd91cb166f002b63244800e1"> 2688</a></span>&#160;<span class="preprocessor">#define VMA_STATS_STRING_ENABLED 1</span></div>
+<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160; </div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160; </div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>&#160; </div>
+<div class="line"><a name="l02696"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0"> 2696</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0">vmaBuildStatsString</a>(</div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>&#160;    <span class="keywordtype">char</span>* VMA_NULLABLE * VMA_NOT_NULL ppStatsString,</div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>&#160;    VkBool32 detailedMap);</div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>&#160; </div>
+<div class="line"><a name="l02701"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288"> 2701</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288">vmaFreeStatsString</a>(</div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>&#160;    <span class="keywordtype">char</span>* VMA_NULLABLE pStatsString);</div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>&#160; </div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160; </div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>&#160;VK_DEFINE_HANDLE(<a class="code" href="struct_vma_pool.html">VmaPool</a>)</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>&#160; </div>
+<div class="line"><a name="l02717"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc"> 2717</a></span>&#160;typedef enum <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a></div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>&#160;{</div>
+<div class="line"><a name="l02722"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd"> 2722</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a> = 0,</div>
+<div class="line"><a name="l02739"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"> 2739</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a> = 1,</div>
+<div class="line"><a name="l02749"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5"> 2749</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a> = 2,</div>
+<div class="line"><a name="l02756"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67"> 2756</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a> = 3,</div>
+<div class="line"><a name="l02765"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27"> 2765</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a> = 4,</div>
+<div class="line"><a name="l02771"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500"> 2771</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500">VMA_MEMORY_USAGE_CPU_COPY</a> = 5,</div>
+<div class="line"><a name="l02779"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d"> 2779</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED</a> = 6,</div>
+<div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>&#160; </div>
+<div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e">VMA_MEMORY_USAGE_MAX_ENUM</a> = 0x7FFFFFFF</div>
+<div class="line"><a name="l02782"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e"> 2782</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a>;</div>
 <div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160; </div>
-<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e">VMA_MEMORY_USAGE_MAX_ENUM</a> = 0x7FFFFFFF</div>
-<div class="line"><a name="l02785"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e"> 2785</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a>;</div>
-<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>&#160; </div>
-<div class="line"><a name="l02788"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597"> 2788</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a> {</div>
-<div class="line"><a name="l02795"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f"> 2795</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a> = 0x00000001,</div>
-<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>&#160; </div>
-<div class="line"><a name="l02806"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff"> 2806</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a> = 0x00000002,</div>
-<div class="line"><a name="l02819"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"> 2819</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> = 0x00000004,</div>
-<div class="line"><a name="l02832"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2"> 2832</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2">VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</a> = 0x00000008,</div>
-<div class="line"><a name="l02839"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e"> 2839</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a> = 0x00000010,</div>
-<div class="line"><a name="l02845"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520"> 2845</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a> = 0x00000020,</div>
-<div class="line"><a name="l02850"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df"> 2850</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a> = 0x00000040,</div>
-<div class="line"><a name="l02856"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea"> 2856</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">VMA_ALLOCATION_CREATE_DONT_BIND_BIT</a> = 0x00000080,</div>
-<div class="line"><a name="l02860"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d"> 2860</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a> = 0x00000100,</div>
-<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160; </div>
-<div class="line"><a name="l02865"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d"> 2865</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a>  = 0x00010000,</div>
-<div class="line"><a name="l02869"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62"> 2869</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</a> = 0x00020000,</div>
-<div class="line"><a name="l02876"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777"> 2876</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a> = 0x00040000,</div>
-<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>&#160; </div>
-<div class="line"><a name="l02880"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d"> 2880</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT</a> = <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a>,</div>
-<div class="line"><a name="l02883"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d"> 2883</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</a> = <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a>,</div>
-<div class="line"><a name="l02886"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706"> 2886</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706">VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT</a> = <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</a>,</div>
-<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>&#160; </div>
-<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e">VMA_ALLOCATION_CREATE_STRATEGY_MASK</a> =</div>
-<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>&#160;        <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a> |</div>
-<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>&#160;        <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</a> |</div>
-<div class="line"><a name="l02893"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e"> 2893</a></span>&#160;        <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a>,</div>
-<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160; </div>
-<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882">VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF</div>
-<div class="line"><a name="l02896"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882"> 2896</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a>;</div>
-<div class="line"><a name="l02897"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817"> 2897</a></span>&#160;<span class="keyword">typedef</span> VkFlags <a class="code" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a>;</div>
-<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160; </div>
-<div class="line"><a name="l02899"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html"> 2899</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div>
-<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160;{</div>
-<div class="line"><a name="l02902"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b"> 2902</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a> <a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>;</div>
-<div class="line"><a name="l02908"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910"> 2908</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> <a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>;</div>
-<div class="line"><a name="l02913"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90"> 2913</a></span>&#160;    VkMemoryPropertyFlags <a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>;</div>
-<div class="line"><a name="l02918"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d"> 2918</a></span>&#160;    VkMemoryPropertyFlags <a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>;</div>
-<div class="line"><a name="l02926"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055"> 2926</a></span>&#160;    uint32_t <a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>;</div>
-<div class="line"><a name="l02932"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150"> 2932</a></span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NULLABLE <a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>;</div>
-<div class="line"><a name="l02939"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19"> 2939</a></span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE <a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>;</div>
-<div class="line"><a name="l02946"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7"> 2946</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7">priority</a>;</div>
-<div class="line"><a name="l02947"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a3bf110892ea2fb4649fedb68488d026a"> 2947</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a3bf110892ea2fb4649fedb68488d026a">VmaAllocationCreateInfo</a>;</div>
-<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>&#160; </div>
-<div class="line"><a name="l02965"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a"> 2965</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(</div>
-<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>&#160;    uint32_t memoryTypeBits,</div>
-<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pAllocationCreateInfo,</div>
-<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>&#160;    uint32_t* VMA_NOT_NULL pMemoryTypeIndex);</div>
-<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>&#160; </div>
-<div class="line"><a name="l02983"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888"> 2983</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888">vmaFindMemoryTypeIndexForBufferInfo</a>(</div>
-<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* VMA_NOT_NULL pBufferCreateInfo,</div>
-<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pAllocationCreateInfo,</div>
-<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>&#160;    uint32_t* VMA_NOT_NULL pMemoryTypeIndex);</div>
-<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160; </div>
-<div class="line"><a name="l03001"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472"> 3001</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472">vmaFindMemoryTypeIndexForImageInfo</a>(</div>
-<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo* VMA_NOT_NULL pImageCreateInfo,</div>
-<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pAllocationCreateInfo,</div>
-<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160;    uint32_t* VMA_NOT_NULL pMemoryTypeIndex);</div>
-<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160; </div>
-<div class="line"><a name="l03008"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7"> 3008</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a> {</div>
-<div class="line"><a name="l03026"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2"> 3026</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT</a> = 0x00000002,</div>
-<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160; </div>
-<div class="line"><a name="l03043"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726"> 3043</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> = 0x00000004,</div>
-<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>&#160; </div>
-<div class="line"><a name="l03054"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e"> 3054</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a> = 0x00000008,</div>
-<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160; </div>
-<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c">VMA_POOL_CREATE_ALGORITHM_MASK</a> =</div>
-<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160;        <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> |</div>
-<div class="line"><a name="l03060"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c"> 3060</a></span>&#160;        <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a>,</div>
-<div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160; </div>
-<div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec">VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF</div>
-<div class="line"><a name="l03063"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec"> 3063</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a>;</div>
-<div class="line"><a name="l03064"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a"> 3064</a></span>&#160;<span class="keyword">typedef</span> VkFlags <a class="code" href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a>;</div>
-<div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160; </div>
-<div class="line"><a name="l03068"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html"> 3068</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> {</div>
-<div class="line"><a name="l03071"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319"> 3071</a></span>&#160;    uint32_t <a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a>;</div>
-<div class="line"><a name="l03074"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446"> 3074</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a> <a class="code" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">flags</a>;</div>
-<div class="line"><a name="l03083"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676"> 3083</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676">blockSize</a>;</div>
-<div class="line"><a name="l03088"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae"> 3088</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae">minBlockCount</a>;</div>
-<div class="line"><a name="l03096"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c"> 3096</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a>;</div>
-<div class="line"><a name="l03110"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa"> 3110</a></span>&#160;    uint32_t <a class="code" href="struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa">frameInUseCount</a>;</div>
-<div class="line"><a name="l03116"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#a16e686c688f6725f119ebf6e24ab5274"> 3116</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="struct_vma_pool_create_info.html#a16e686c688f6725f119ebf6e24ab5274">priority</a>;</div>
-<div class="line"><a name="l03123"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#ade3eca546f0c6ab4e8fbf20eb6d854cb"> 3123</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_pool_create_info.html#ade3eca546f0c6ab4e8fbf20eb6d854cb">minAllocationAlignment</a>;</div>
-<div class="line"><a name="l03133"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#af0f8c58f51a2a7a0a389dc79565044d7"> 3133</a></span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE <a class="code" href="struct_vma_pool_create_info.html#af0f8c58f51a2a7a0a389dc79565044d7">pMemoryAllocateNext</a>;</div>
-<div class="line"><a name="l03134"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a1017aa83489c0eee8d2163d2bf253f67"> 3134</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a1017aa83489c0eee8d2163d2bf253f67">VmaPoolCreateInfo</a>;</div>
-<div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>&#160; </div>
-<div class="line"><a name="l03138"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html"> 3138</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a> {</div>
-<div class="line"><a name="l03141"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c"> 3141</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c">size</a>;</div>
-<div class="line"><a name="l03144"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8"> 3144</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a>;</div>
-<div class="line"><a name="l03147"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb"> 3147</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">allocationCount</a>;</div>
-<div class="line"><a name="l03150"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4"> 3150</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
-<div class="line"><a name="l03157"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b"> 3157</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>;</div>
-<div class="line"><a name="l03160"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#aa0b5cb45cef6f18571cefb03b9a230e7"> 3160</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_stats.html#aa0b5cb45cef6f18571cefb03b9a230e7">blockCount</a>;</div>
-<div class="line"><a name="l03161"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4759a2d9f99c19ba7627553c847132f1"> 3161</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a4759a2d9f99c19ba7627553c847132f1">VmaPoolStats</a>;</div>
-<div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160; </div>
-<div class="line"><a name="l03169"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50"> 3169</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50">vmaCreatePool</a>(</div>
-<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a>* VMA_NOT_NULL pCreateInfo,</div>
-<div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NULLABLE * VMA_NOT_NULL pPool);</div>
-<div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>&#160; </div>
-<div class="line"><a name="l03176"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1"> 3176</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1">vmaDestroyPool</a>(</div>
-<div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NULLABLE pool);</div>
-<div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>&#160; </div>
-<div class="line"><a name="l03186"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153"> 3186</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153">vmaGetPoolStats</a>(</div>
-<div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NOT_NULL pool,</div>
-<div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>&#160;    <a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>* VMA_NOT_NULL pPoolStats);</div>
-<div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>&#160; </div>
-<div class="line"><a name="l03197"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a736bd6cbda886f36c891727e73bd4024"> 3197</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a736bd6cbda886f36c891727e73bd4024">vmaMakePoolAllocationsLost</a>(</div>
-<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NOT_NULL pool,</div>
-<div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>&#160;    <span class="keywordtype">size_t</span>* VMA_NULLABLE pLostAllocationCount);</div>
-<div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>&#160; </div>
-<div class="line"><a name="l03216"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89"> 3216</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89">vmaCheckPoolCorruption</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator, <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NOT_NULL pool);</div>
-<div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>&#160; </div>
-<div class="line"><a name="l03224"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#af09b4e4eafdbee812e8d73ddf960f030"> 3224</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#af09b4e4eafdbee812e8d73ddf960f030">vmaGetPoolName</a>(</div>
-<div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NOT_NULL pool,</div>
-<div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* VMA_NULLABLE * VMA_NOT_NULL ppName);</div>
-<div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>&#160; </div>
-<div class="line"><a name="l03234"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58"> 3234</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58">vmaSetPoolName</a>(</div>
-<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NOT_NULL pool,</div>
-<div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* VMA_NULLABLE pName);</div>
-<div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>&#160; </div>
-<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>&#160;VK_DEFINE_HANDLE(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a>)</div>
-<div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>&#160; </div>
-<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>&#160; </div>
-<div class="line"><a name="l03267"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html"> 3267</a></span>&#160;typedef struct <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> {</div>
-<div class="line"><a name="l03272"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5"> 3272</a></span>&#160;    uint32_t <a class="code" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">memoryType</a>;</div>
-<div class="line"><a name="l03281"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67"> 3281</a></span>&#160;    VkDeviceMemory VMA_NULLABLE_NON_DISPATCHABLE <a class="code" href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67">deviceMemory</a>;</div>
-<div class="line"><a name="l03291"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268"> 3291</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">offset</a>;</div>
-<div class="line"><a name="l03302"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f"> 3302</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f">size</a>;</div>
-<div class="line"><a name="l03311"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2"> 3311</a></span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE <a class="code" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a>;</div>
-<div class="line"><a name="l03316"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13"> 3316</a></span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE <a class="code" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">pUserData</a>;</div>
-<div class="line"><a name="l03317"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a1cf7774606721026a68aabe3af2e5b50"> 3317</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a1cf7774606721026a68aabe3af2e5b50">VmaAllocationInfo</a>;</div>
-<div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>&#160; </div>
-<div class="line"><a name="l03329"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8"> 3329</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8">vmaAllocateMemory</a>(</div>
-<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements* VMA_NOT_NULL pVkMemoryRequirements,</div>
-<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pCreateInfo,</div>
-<div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL pAllocation,</div>
-<div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NULLABLE pAllocationInfo);</div>
-<div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>&#160; </div>
-<div class="line"><a name="l03355"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1"> 3355</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1">vmaAllocateMemoryPages</a>(</div>
-<div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03357"></a><span class="lineno"> 3357</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pVkMemoryRequirements,</div>
-<div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pCreateInfo,</div>
-<div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations,</div>
-<div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) pAllocationInfo);</div>
-<div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>&#160; </div>
-<div class="line"><a name="l03369"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b"> 3369</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer</a>(</div>
-<div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>&#160;    VkBuffer VMA_NOT_NULL_NON_DISPATCHABLE buffer,</div>
-<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pCreateInfo,</div>
-<div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL pAllocation,</div>
-<div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NULLABLE pAllocationInfo);</div>
-<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>&#160; </div>
-<div class="line"><a name="l03377"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb"> 3377</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb">vmaAllocateMemoryForImage</a>(</div>
-<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>&#160;    VkImage VMA_NOT_NULL_NON_DISPATCHABLE image,</div>
-<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pCreateInfo,</div>
-<div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL pAllocation,</div>
-<div class="line"><a name="l03382"></a><span class="lineno"> 3382</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NULLABLE pAllocationInfo);</div>
-<div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>&#160; </div>
-<div class="line"><a name="l03388"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f"> 3388</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a>(</div>
-<div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE allocation);</div>
-<div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>&#160; </div>
-<div class="line"><a name="l03402"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e"> 3402</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e">vmaFreeMemoryPages</a>(</div>
-<div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations);</div>
-<div class="line"><a name="l03406"></a><span class="lineno"> 3406</span>&#160; </div>
-<div class="line"><a name="l03423"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b"> 3423</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(</div>
-<div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
-<div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NOT_NULL pAllocationInfo);</div>
-<div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>&#160; </div>
-<div class="line"><a name="l03442"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a43d8ba9673c846f049089a5029d5c73a"> 3442</a></span>&#160;VMA_CALL_PRE VkBool32 VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a43d8ba9673c846f049089a5029d5c73a">vmaTouchAllocation</a>(</div>
-<div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation);</div>
-<div class="line"><a name="l03445"></a><span class="lineno"> 3445</span>&#160; </div>
-<div class="line"><a name="l03459"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f"> 3459</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f">vmaSetAllocationUserData</a>(</div>
-<div class="line"><a name="l03460"></a><span class="lineno"> 3460</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03461"></a><span class="lineno"> 3461</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
-<div class="line"><a name="l03462"></a><span class="lineno"> 3462</span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE pUserData);</div>
-<div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>&#160; </div>
-<div class="line"><a name="l03474"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ae5c9657d9e94756269145b01c05d16f1"> 3474</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae5c9657d9e94756269145b01c05d16f1">vmaCreateLostAllocation</a>(</div>
-<div class="line"><a name="l03475"></a><span class="lineno"> 3475</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL pAllocation);</div>
-<div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>&#160; </div>
-<div class="line"><a name="l03516"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069"> 3516</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069">vmaMapMemory</a>(</div>
-<div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
-<div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE * VMA_NOT_NULL ppData);</div>
-<div class="line"><a name="l03520"></a><span class="lineno"> 3520</span>&#160; </div>
-<div class="line"><a name="l03529"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45"> 3529</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a>(</div>
-<div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation);</div>
-<div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>&#160; </div>
-<div class="line"><a name="l03554"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f"> 3554</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f">vmaFlushAllocation</a>(</div>
-<div class="line"><a name="l03555"></a><span class="lineno"> 3555</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03556"></a><span class="lineno"> 3556</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
-<div class="line"><a name="l03557"></a><span class="lineno"> 3557</span>&#160;    VkDeviceSize offset,</div>
-<div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>&#160;    VkDeviceSize size);</div>
-<div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>&#160; </div>
-<div class="line"><a name="l03581"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae"> 3581</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae">vmaInvalidateAllocation</a>(</div>
-<div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
-<div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>&#160;    VkDeviceSize offset,</div>
-<div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>&#160;    VkDeviceSize size);</div>
-<div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>&#160; </div>
-<div class="line"><a name="l03601"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc"> 3601</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc">vmaFlushAllocations</a>(</div>
-<div class="line"><a name="l03602"></a><span class="lineno"> 3602</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03603"></a><span class="lineno"> 3603</span>&#160;    uint32_t allocationCount,</div>
-<div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL * VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) allocations,</div>
-<div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>&#160;    <span class="keyword">const</span> VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) offsets,</div>
-<div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>&#160;    <span class="keyword">const</span> VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) sizes);</div>
-<div class="line"><a name="l03607"></a><span class="lineno"> 3607</span>&#160; </div>
-<div class="line"><a name="l03622"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ab25b558d75f7378ec944a1522fdcc3c5"> 3622</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ab25b558d75f7378ec944a1522fdcc3c5">vmaInvalidateAllocations</a>(</div>
-<div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>&#160;    uint32_t allocationCount,</div>
-<div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL * VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) allocations,</div>
-<div class="line"><a name="l03626"></a><span class="lineno"> 3626</span>&#160;    <span class="keyword">const</span> VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) offsets,</div>
-<div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>&#160;    <span class="keyword">const</span> VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) sizes);</div>
-<div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>&#160; </div>
-<div class="line"><a name="l03645"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98"> 3645</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98">vmaCheckCorruption</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator, uint32_t memoryTypeBits);</div>
-<div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>&#160; </div>
-<div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>&#160;VK_DEFINE_HANDLE(<a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a>)</div>
-<div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>&#160; </div>
-<div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a> {</div>
-<div class="line"><a name="l03657"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33"> 3657</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a> = 0x1,</div>
-<div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97">VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF</div>
-<div class="line"><a name="l03659"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97"> 3659</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a>;</div>
-<div class="line"><a name="l03660"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d"> 3660</a></span>&#160;<span class="keyword">typedef</span> VkFlags <a class="code" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a>;</div>
-<div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>&#160; </div>
-<div class="line"><a name="l03666"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html"> 3666</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> {</div>
-<div class="line"><a name="l03669"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9"> 3669</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> <a class="code" href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">flags</a>;</div>
-<div class="line"><a name="l03672"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba"> 3672</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a>;</div>
-<div class="line"><a name="l03681"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32"> 3681</a></span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL * VMA_NULLABLE VMA_LEN_IF_NOT_NULL(<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a>) <a class="code" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">pAllocations</a>;</div>
-<div class="line"><a name="l03687"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc"> 3687</a></span>&#160;    VkBool32* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a>) <a class="code" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">pAllocationsChanged</a>;</div>
-<div class="line"><a name="l03690"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d"> 3690</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">poolCount</a>;</div>
-<div class="line"><a name="l03706"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b"> 3706</a></span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NOT_NULL * VMA_NULLABLE VMA_LEN_IF_NOT_NULL(<a class="code" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">poolCount</a>) <a class="code" href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b">pPools</a>;</div>
-<div class="line"><a name="l03711"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a"> 3711</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">maxCpuBytesToMove</a>;</div>
-<div class="line"><a name="l03716"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671"> 3716</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a>;</div>
-<div class="line"><a name="l03721"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08"> 3721</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08">maxGpuBytesToMove</a>;</div>
-<div class="line"><a name="l03726"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6"> 3726</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6">maxGpuAllocationsToMove</a>;</div>
-<div class="line"><a name="l03735"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd"> 3735</a></span>&#160;    VkCommandBuffer VMA_NULLABLE <a class="code" href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">commandBuffer</a>;</div>
-<div class="line"><a name="l03736"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad6daeffaa670ce6d11a203a6224c9937"> 3736</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#ad6daeffaa670ce6d11a203a6224c9937">VmaDefragmentationInfo2</a>;</div>
-<div class="line"><a name="l03737"></a><span class="lineno"> 3737</span>&#160; </div>
-<div class="line"><a name="l03738"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_pass_move_info.html"> 3738</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a> {</div>
-<div class="line"><a name="l03739"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_pass_move_info.html#ae885c861c2dd8d622e6c19e281d035cc"> 3739</a></span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL <a class="code" href="struct_vma_defragmentation_pass_move_info.html#ae885c861c2dd8d622e6c19e281d035cc">allocation</a>;</div>
-<div class="line"><a name="l03740"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_pass_move_info.html#a06eb0c8690aa0d3478a036753492e769"> 3740</a></span>&#160;    VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE <a class="code" href="struct_vma_defragmentation_pass_move_info.html#a06eb0c8690aa0d3478a036753492e769">memory</a>;</div>
-<div class="line"><a name="l03741"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6"> 3741</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6">offset</a>;</div>
-<div class="line"><a name="l03742"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad6799e8e2b1527abfc84d33bc44aeaf5"> 3742</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#ad6799e8e2b1527abfc84d33bc44aeaf5">VmaDefragmentationPassMoveInfo</a>;</div>
-<div class="line"><a name="l03743"></a><span class="lineno"> 3743</span>&#160; </div>
-<div class="line"><a name="l03748"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_pass_info.html"> 3748</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a> {</div>
-<div class="line"><a name="l03749"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c"> 3749</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c">moveCount</a>;</div>
-<div class="line"><a name="l03750"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_pass_info.html#acbd42d4a3357999da130a95cd99a3792"> 3750</a></span>&#160;    <a class="code" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a>* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(<a class="code" href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c">moveCount</a>) <a class="code" href="struct_vma_defragmentation_pass_info.html#acbd42d4a3357999da130a95cd99a3792">pMoves</a>;</div>
-<div class="line"><a name="l03751"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a72aebd522242d56abea67b4f47f6549e"> 3751</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a72aebd522242d56abea67b4f47f6549e">VmaDefragmentationPassInfo</a>;</div>
-<div class="line"><a name="l03752"></a><span class="lineno"> 3752</span>&#160; </div>
-<div class="line"><a name="l03757"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info.html"> 3757</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> {</div>
-<div class="line"><a name="l03762"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info.html#acb311c940a777270e67e1b81c5ab6a1d"> 3762</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_info.html#acb311c940a777270e67e1b81c5ab6a1d">maxBytesToMove</a>;</div>
-<div class="line"><a name="l03767"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info.html#aa7c7304e13c71f604c907196c4e28fbc"> 3767</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_info.html#aa7c7304e13c71f604c907196c4e28fbc">maxAllocationsToMove</a>;</div>
-<div class="line"><a name="l03768"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a2bf47f96bf92bed2a49461bd9af3acfa"> 3768</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a2bf47f96bf92bed2a49461bd9af3acfa">VmaDefragmentationInfo</a>;</div>
-<div class="line"><a name="l03769"></a><span class="lineno"> 3769</span>&#160; </div>
-<div class="line"><a name="l03771"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html"> 3771</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> {</div>
-<div class="line"><a name="l03773"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html#a36f9d5df2a10ba2a36b16e126d60572d"> 3773</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_stats.html#a36f9d5df2a10ba2a36b16e126d60572d">bytesMoved</a>;</div>
-<div class="line"><a name="l03775"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html#ab0cb9ac0dbc106c77e384ea676422f28"> 3775</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_stats.html#ab0cb9ac0dbc106c77e384ea676422f28">bytesFreed</a>;</div>
-<div class="line"><a name="l03777"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html#aefeabf130022008eadd75999478af3f9"> 3777</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_stats.html#aefeabf130022008eadd75999478af3f9">allocationsMoved</a>;</div>
-<div class="line"><a name="l03779"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html#a0113f1877904a5d1ee8f409216ff276b"> 3779</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_stats.html#a0113f1877904a5d1ee8f409216ff276b">deviceMemoryBlocksFreed</a>;</div>
-<div class="line"><a name="l03780"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad94034192259c2e34a4d1c5e27810403"> 3780</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#ad94034192259c2e34a4d1c5e27810403">VmaDefragmentationStats</a>;</div>
-<div class="line"><a name="l03781"></a><span class="lineno"> 3781</span>&#160; </div>
-<div class="line"><a name="l03811"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a"> 3811</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a>(</div>
-<div class="line"><a name="l03812"></a><span class="lineno"> 3812</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03813"></a><span class="lineno"> 3813</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a>* VMA_NOT_NULL pInfo,</div>
-<div class="line"><a name="l03814"></a><span class="lineno"> 3814</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* VMA_NULLABLE pStats,</div>
-<div class="line"><a name="l03815"></a><span class="lineno"> 3815</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> VMA_NULLABLE * VMA_NOT_NULL pContext);</div>
-<div class="line"><a name="l03816"></a><span class="lineno"> 3816</span>&#160; </div>
-<div class="line"><a name="l03822"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2"> 3822</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a>(</div>
-<div class="line"><a name="l03823"></a><span class="lineno"> 3823</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03824"></a><span class="lineno"> 3824</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> VMA_NULLABLE context);</div>
-<div class="line"><a name="l03825"></a><span class="lineno"> 3825</span>&#160; </div>
-<div class="line"><a name="l03826"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b"> 3826</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b">vmaBeginDefragmentationPass</a>(</div>
-<div class="line"><a name="l03827"></a><span class="lineno"> 3827</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03828"></a><span class="lineno"> 3828</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> VMA_NULLABLE context,</div>
-<div class="line"><a name="l03829"></a><span class="lineno"> 3829</span>&#160;    <a class="code" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a>* VMA_NOT_NULL pInfo</div>
-<div class="line"><a name="l03830"></a><span class="lineno"> 3830</span>&#160;);</div>
-<div class="line"><a name="l03831"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a1b9ffa538bed905af55c747cc48963bd"> 3831</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a1b9ffa538bed905af55c747cc48963bd">vmaEndDefragmentationPass</a>(</div>
-<div class="line"><a name="l03832"></a><span class="lineno"> 3832</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03833"></a><span class="lineno"> 3833</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> VMA_NULLABLE context</div>
-<div class="line"><a name="l03834"></a><span class="lineno"> 3834</span>&#160;);</div>
-<div class="line"><a name="l03835"></a><span class="lineno"> 3835</span>&#160; </div>
-<div class="line"><a name="l03876"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac"> 3876</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac">vmaDefragment</a>(</div>
-<div class="line"><a name="l03877"></a><span class="lineno"> 3877</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03878"></a><span class="lineno"> 3878</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL * VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations,</div>
-<div class="line"><a name="l03879"></a><span class="lineno"> 3879</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l03880"></a><span class="lineno"> 3880</span>&#160;    VkBool32* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) pAllocationsChanged,</div>
-<div class="line"><a name="l03881"></a><span class="lineno"> 3881</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a>* VMA_NULLABLE pDefragmentationInfo,</div>
-<div class="line"><a name="l03882"></a><span class="lineno"> 3882</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* VMA_NULLABLE pDefragmentationStats);</div>
-<div class="line"><a name="l03883"></a><span class="lineno"> 3883</span>&#160; </div>
-<div class="line"><a name="l03896"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470"> 3896</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a>(</div>
-<div class="line"><a name="l03897"></a><span class="lineno"> 3897</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03898"></a><span class="lineno"> 3898</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
-<div class="line"><a name="l03899"></a><span class="lineno"> 3899</span>&#160;    VkBuffer VMA_NOT_NULL_NON_DISPATCHABLE buffer);</div>
-<div class="line"><a name="l03900"></a><span class="lineno"> 3900</span>&#160; </div>
-<div class="line"><a name="l03911"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a"> 3911</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a">vmaBindBufferMemory2</a>(</div>
-<div class="line"><a name="l03912"></a><span class="lineno"> 3912</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03913"></a><span class="lineno"> 3913</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
-<div class="line"><a name="l03914"></a><span class="lineno"> 3914</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
-<div class="line"><a name="l03915"></a><span class="lineno"> 3915</span>&#160;    VkBuffer VMA_NOT_NULL_NON_DISPATCHABLE buffer,</div>
-<div class="line"><a name="l03916"></a><span class="lineno"> 3916</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* VMA_NULLABLE pNext);</div>
-<div class="line"><a name="l03917"></a><span class="lineno"> 3917</span>&#160; </div>
-<div class="line"><a name="l03930"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5"> 3930</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a>(</div>
-<div class="line"><a name="l03931"></a><span class="lineno"> 3931</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03932"></a><span class="lineno"> 3932</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
-<div class="line"><a name="l03933"></a><span class="lineno"> 3933</span>&#160;    VkImage VMA_NOT_NULL_NON_DISPATCHABLE image);</div>
-<div class="line"><a name="l03934"></a><span class="lineno"> 3934</span>&#160; </div>
-<div class="line"><a name="l03945"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc"> 3945</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc">vmaBindImageMemory2</a>(</div>
-<div class="line"><a name="l03946"></a><span class="lineno"> 3946</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03947"></a><span class="lineno"> 3947</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
-<div class="line"><a name="l03948"></a><span class="lineno"> 3948</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
-<div class="line"><a name="l03949"></a><span class="lineno"> 3949</span>&#160;    VkImage VMA_NOT_NULL_NON_DISPATCHABLE image,</div>
-<div class="line"><a name="l03950"></a><span class="lineno"> 3950</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* VMA_NULLABLE pNext);</div>
-<div class="line"><a name="l03951"></a><span class="lineno"> 3951</span>&#160; </div>
-<div class="line"><a name="l03982"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51"> 3982</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(</div>
-<div class="line"><a name="l03983"></a><span class="lineno"> 3983</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03984"></a><span class="lineno"> 3984</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* VMA_NOT_NULL pBufferCreateInfo,</div>
-<div class="line"><a name="l03985"></a><span class="lineno"> 3985</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pAllocationCreateInfo,</div>
-<div class="line"><a name="l03986"></a><span class="lineno"> 3986</span>&#160;    VkBuffer VMA_NULLABLE_NON_DISPATCHABLE * VMA_NOT_NULL pBuffer,</div>
-<div class="line"><a name="l03987"></a><span class="lineno"> 3987</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL pAllocation,</div>
-<div class="line"><a name="l03988"></a><span class="lineno"> 3988</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NULLABLE pAllocationInfo);</div>
-<div class="line"><a name="l03989"></a><span class="lineno"> 3989</span>&#160; </div>
-<div class="line"><a name="l03996"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834"> 3996</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834">vmaCreateBufferWithAlignment</a>(</div>
-<div class="line"><a name="l03997"></a><span class="lineno"> 3997</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l03998"></a><span class="lineno"> 3998</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* VMA_NOT_NULL pBufferCreateInfo,</div>
-<div class="line"><a name="l03999"></a><span class="lineno"> 3999</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pAllocationCreateInfo,</div>
-<div class="line"><a name="l04000"></a><span class="lineno"> 4000</span>&#160;    VkDeviceSize minAlignment,</div>
-<div class="line"><a name="l04001"></a><span class="lineno"> 4001</span>&#160;    VkBuffer VMA_NULLABLE_NON_DISPATCHABLE * VMA_NOT_NULL pBuffer,</div>
-<div class="line"><a name="l04002"></a><span class="lineno"> 4002</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL pAllocation,</div>
-<div class="line"><a name="l04003"></a><span class="lineno"> 4003</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NULLABLE pAllocationInfo);</div>
-<div class="line"><a name="l04004"></a><span class="lineno"> 4004</span>&#160; </div>
-<div class="line"><a name="l04016"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77"> 4016</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a>(</div>
-<div class="line"><a name="l04017"></a><span class="lineno"> 4017</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l04018"></a><span class="lineno"> 4018</span>&#160;    VkBuffer VMA_NULLABLE_NON_DISPATCHABLE buffer,</div>
-<div class="line"><a name="l04019"></a><span class="lineno"> 4019</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE allocation);</div>
-<div class="line"><a name="l04020"></a><span class="lineno"> 4020</span>&#160; </div>
-<div class="line"><a name="l04022"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73"> 4022</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a>(</div>
-<div class="line"><a name="l04023"></a><span class="lineno"> 4023</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l04024"></a><span class="lineno"> 4024</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo* VMA_NOT_NULL pImageCreateInfo,</div>
-<div class="line"><a name="l04025"></a><span class="lineno"> 4025</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pAllocationCreateInfo,</div>
-<div class="line"><a name="l04026"></a><span class="lineno"> 4026</span>&#160;    VkImage VMA_NULLABLE_NON_DISPATCHABLE * VMA_NOT_NULL pImage,</div>
-<div class="line"><a name="l04027"></a><span class="lineno"> 4027</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL pAllocation,</div>
-<div class="line"><a name="l04028"></a><span class="lineno"> 4028</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NULLABLE pAllocationInfo);</div>
-<div class="line"><a name="l04029"></a><span class="lineno"> 4029</span>&#160; </div>
-<div class="line"><a name="l04041"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e"> 4041</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e">vmaDestroyImage</a>(</div>
-<div class="line"><a name="l04042"></a><span class="lineno"> 4042</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
-<div class="line"><a name="l04043"></a><span class="lineno"> 4043</span>&#160;    VkImage VMA_NULLABLE_NON_DISPATCHABLE image,</div>
-<div class="line"><a name="l04044"></a><span class="lineno"> 4044</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE allocation);</div>
-<div class="line"><a name="l04045"></a><span class="lineno"> 4045</span>&#160; </div>
-<div class="line"><a name="l04046"></a><span class="lineno"> 4046</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
-<div class="line"><a name="l04047"></a><span class="lineno"> 4047</span>&#160;}</div>
-<div class="line"><a name="l04048"></a><span class="lineno"> 4048</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l04049"></a><span class="lineno"> 4049</span>&#160; </div>
-<div class="line"><a name="l04050"></a><span class="lineno"> 4050</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// AMD_VULKAN_MEMORY_ALLOCATOR_H</span></div>
-<div class="line"><a name="l04051"></a><span class="lineno"> 4051</span>&#160; </div>
-<div class="line"><a name="l04052"></a><span class="lineno"> 4052</span>&#160;<span class="comment">// For Visual Studio IntelliSense.</span></div>
-<div class="line"><a name="l04053"></a><span class="lineno"> 4053</span>&#160;<span class="preprocessor">#if defined(__cplusplus) &amp;&amp; defined(__INTELLISENSE__)</span></div>
-<div class="line"><a name="l04054"></a><span class="lineno"> 4054</span>&#160;<span class="preprocessor">#define VMA_IMPLEMENTATION</span></div>
-<div class="line"><a name="l04055"></a><span class="lineno"> 4055</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02785"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597"> 2785</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a> {</div>
+<div class="line"><a name="l02792"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f"> 2792</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a> = 0x00000001,</div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>&#160; </div>
+<div class="line"><a name="l02803"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff"> 2803</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a> = 0x00000002,</div>
+<div class="line"><a name="l02816"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"> 2816</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> = 0x00000004,</div>
+<div class="line"><a name="l02829"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2"> 2829</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2">VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</a> = 0x00000008,</div>
+<div class="line"><a name="l02836"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e"> 2836</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a> = 0x00000010,</div>
+<div class="line"><a name="l02842"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520"> 2842</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a> = 0x00000020,</div>
+<div class="line"><a name="l02847"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df"> 2847</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a> = 0x00000040,</div>
+<div class="line"><a name="l02853"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea"> 2853</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">VMA_ALLOCATION_CREATE_DONT_BIND_BIT</a> = 0x00000080,</div>
+<div class="line"><a name="l02857"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d"> 2857</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a> = 0x00000100,</div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160; </div>
+<div class="line"><a name="l02862"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d"> 2862</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a>  = 0x00010000,</div>
+<div class="line"><a name="l02866"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62"> 2866</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</a> = 0x00020000,</div>
+<div class="line"><a name="l02873"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777"> 2873</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a> = 0x00040000,</div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>&#160; </div>
+<div class="line"><a name="l02877"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d"> 2877</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT</a> = <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a>,</div>
+<div class="line"><a name="l02880"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d"> 2880</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</a> = <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a>,</div>
+<div class="line"><a name="l02883"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706"> 2883</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706">VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT</a> = <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</a>,</div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>&#160; </div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e">VMA_ALLOCATION_CREATE_STRATEGY_MASK</a> =</div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>&#160;        <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a> |</div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>&#160;        <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</a> |</div>
+<div class="line"><a name="l02890"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e"> 2890</a></span>&#160;        <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a>,</div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>&#160; </div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882">VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF</div>
+<div class="line"><a name="l02893"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882"> 2893</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a>;</div>
+<div class="line"><a name="l02894"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817"> 2894</a></span>&#160;<span class="keyword">typedef</span> VkFlags <a class="code" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a>;</div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160; </div>
+<div class="line"><a name="l02896"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html"> 2896</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160;{</div>
+<div class="line"><a name="l02899"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b"> 2899</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a> <a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>;</div>
+<div class="line"><a name="l02905"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910"> 2905</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> <a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>;</div>
+<div class="line"><a name="l02910"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90"> 2910</a></span>&#160;    VkMemoryPropertyFlags <a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>;</div>
+<div class="line"><a name="l02915"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d"> 2915</a></span>&#160;    VkMemoryPropertyFlags <a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>;</div>
+<div class="line"><a name="l02923"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055"> 2923</a></span>&#160;    uint32_t <a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>;</div>
+<div class="line"><a name="l02929"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150"> 2929</a></span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NULLABLE <a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>;</div>
+<div class="line"><a name="l02936"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19"> 2936</a></span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE <a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>;</div>
+<div class="line"><a name="l02943"></a><span class="lineno"><a class="line" href="struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7"> 2943</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7">priority</a>;</div>
+<div class="line"><a name="l02944"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a3bf110892ea2fb4649fedb68488d026a"> 2944</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a3bf110892ea2fb4649fedb68488d026a">VmaAllocationCreateInfo</a>;</div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>&#160; </div>
+<div class="line"><a name="l02962"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a"> 2962</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(</div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160;    uint32_t memoryTypeBits,</div>
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pAllocationCreateInfo,</div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>&#160;    uint32_t* VMA_NOT_NULL pMemoryTypeIndex);</div>
+<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>&#160; </div>
+<div class="line"><a name="l02980"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888"> 2980</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888">vmaFindMemoryTypeIndexForBufferInfo</a>(</div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* VMA_NOT_NULL pBufferCreateInfo,</div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pAllocationCreateInfo,</div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>&#160;    uint32_t* VMA_NOT_NULL pMemoryTypeIndex);</div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>&#160; </div>
+<div class="line"><a name="l02998"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472"> 2998</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472">vmaFindMemoryTypeIndexForImageInfo</a>(</div>
+<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo* VMA_NOT_NULL pImageCreateInfo,</div>
+<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pAllocationCreateInfo,</div>
+<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160;    uint32_t* VMA_NOT_NULL pMemoryTypeIndex);</div>
+<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>&#160; </div>
+<div class="line"><a name="l03005"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7"> 3005</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a> {</div>
+<div class="line"><a name="l03023"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2"> 3023</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT</a> = 0x00000002,</div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160; </div>
+<div class="line"><a name="l03040"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726"> 3040</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> = 0x00000004,</div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160; </div>
+<div class="line"><a name="l03051"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e"> 3051</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a> = 0x00000008,</div>
+<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160; </div>
+<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c">VMA_POOL_CREATE_ALGORITHM_MASK</a> =</div>
+<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160;        <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> |</div>
+<div class="line"><a name="l03057"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c"> 3057</a></span>&#160;        <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a>,</div>
+<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160; </div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec">VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF</div>
+<div class="line"><a name="l03060"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec"> 3060</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a>;</div>
+<div class="line"><a name="l03061"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a"> 3061</a></span>&#160;<span class="keyword">typedef</span> VkFlags <a class="code" href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a>;</div>
+<div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160; </div>
+<div class="line"><a name="l03065"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html"> 3065</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> {</div>
+<div class="line"><a name="l03068"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319"> 3068</a></span>&#160;    uint32_t <a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a>;</div>
+<div class="line"><a name="l03071"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446"> 3071</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a> <a class="code" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">flags</a>;</div>
+<div class="line"><a name="l03080"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676"> 3080</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676">blockSize</a>;</div>
+<div class="line"><a name="l03085"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae"> 3085</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae">minBlockCount</a>;</div>
+<div class="line"><a name="l03093"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c"> 3093</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a>;</div>
+<div class="line"><a name="l03107"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa"> 3107</a></span>&#160;    uint32_t <a class="code" href="struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa">frameInUseCount</a>;</div>
+<div class="line"><a name="l03113"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#a16e686c688f6725f119ebf6e24ab5274"> 3113</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="struct_vma_pool_create_info.html#a16e686c688f6725f119ebf6e24ab5274">priority</a>;</div>
+<div class="line"><a name="l03120"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#ade3eca546f0c6ab4e8fbf20eb6d854cb"> 3120</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_pool_create_info.html#ade3eca546f0c6ab4e8fbf20eb6d854cb">minAllocationAlignment</a>;</div>
+<div class="line"><a name="l03130"></a><span class="lineno"><a class="line" href="struct_vma_pool_create_info.html#af0f8c58f51a2a7a0a389dc79565044d7"> 3130</a></span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE <a class="code" href="struct_vma_pool_create_info.html#af0f8c58f51a2a7a0a389dc79565044d7">pMemoryAllocateNext</a>;</div>
+<div class="line"><a name="l03131"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a1017aa83489c0eee8d2163d2bf253f67"> 3131</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a1017aa83489c0eee8d2163d2bf253f67">VmaPoolCreateInfo</a>;</div>
+<div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>&#160; </div>
+<div class="line"><a name="l03135"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html"> 3135</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a> {</div>
+<div class="line"><a name="l03138"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c"> 3138</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c">size</a>;</div>
+<div class="line"><a name="l03141"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8"> 3141</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a>;</div>
+<div class="line"><a name="l03144"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb"> 3144</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">allocationCount</a>;</div>
+<div class="line"><a name="l03147"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4"> 3147</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
+<div class="line"><a name="l03154"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b"> 3154</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>;</div>
+<div class="line"><a name="l03157"></a><span class="lineno"><a class="line" href="struct_vma_pool_stats.html#aa0b5cb45cef6f18571cefb03b9a230e7"> 3157</a></span>&#160;    <span class="keywordtype">size_t</span> <a class="code" href="struct_vma_pool_stats.html#aa0b5cb45cef6f18571cefb03b9a230e7">blockCount</a>;</div>
+<div class="line"><a name="l03158"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a4759a2d9f99c19ba7627553c847132f1"> 3158</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a4759a2d9f99c19ba7627553c847132f1">VmaPoolStats</a>;</div>
+<div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>&#160; </div>
+<div class="line"><a name="l03166"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50"> 3166</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50">vmaCreatePool</a>(</div>
+<div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a>* VMA_NOT_NULL pCreateInfo,</div>
+<div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NULLABLE * VMA_NOT_NULL pPool);</div>
+<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>&#160; </div>
+<div class="line"><a name="l03173"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1"> 3173</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1">vmaDestroyPool</a>(</div>
+<div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NULLABLE pool);</div>
+<div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>&#160; </div>
+<div class="line"><a name="l03183"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153"> 3183</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153">vmaGetPoolStats</a>(</div>
+<div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NOT_NULL pool,</div>
+<div class="line"><a name="l03186"></a><span class="lineno"> 3186</span>&#160;    <a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>* VMA_NOT_NULL pPoolStats);</div>
+<div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>&#160; </div>
+<div class="line"><a name="l03194"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a736bd6cbda886f36c891727e73bd4024"> 3194</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a736bd6cbda886f36c891727e73bd4024">vmaMakePoolAllocationsLost</a>(</div>
+<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NOT_NULL pool,</div>
+<div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>&#160;    <span class="keywordtype">size_t</span>* VMA_NULLABLE pLostAllocationCount);</div>
+<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>&#160; </div>
+<div class="line"><a name="l03213"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89"> 3213</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89">vmaCheckPoolCorruption</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator, <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NOT_NULL pool);</div>
+<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>&#160; </div>
+<div class="line"><a name="l03221"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#af09b4e4eafdbee812e8d73ddf960f030"> 3221</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#af09b4e4eafdbee812e8d73ddf960f030">vmaGetPoolName</a>(</div>
+<div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NOT_NULL pool,</div>
+<div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* VMA_NULLABLE * VMA_NOT_NULL ppName);</div>
+<div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>&#160; </div>
+<div class="line"><a name="l03231"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58"> 3231</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58">vmaSetPoolName</a>(</div>
+<div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NOT_NULL pool,</div>
+<div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* VMA_NULLABLE pName);</div>
+<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>&#160; </div>
+<div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>&#160;VK_DEFINE_HANDLE(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a>)</div>
+<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>&#160; </div>
+<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>&#160; </div>
+<div class="line"><a name="l03264"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html"> 3264</a></span>&#160;typedef struct <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> {</div>
+<div class="line"><a name="l03269"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5"> 3269</a></span>&#160;    uint32_t <a class="code" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">memoryType</a>;</div>
+<div class="line"><a name="l03278"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67"> 3278</a></span>&#160;    VkDeviceMemory VMA_NULLABLE_NON_DISPATCHABLE <a class="code" href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67">deviceMemory</a>;</div>
+<div class="line"><a name="l03288"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268"> 3288</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">offset</a>;</div>
+<div class="line"><a name="l03299"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f"> 3299</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f">size</a>;</div>
+<div class="line"><a name="l03308"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2"> 3308</a></span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE <a class="code" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a>;</div>
+<div class="line"><a name="l03313"></a><span class="lineno"><a class="line" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13"> 3313</a></span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE <a class="code" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">pUserData</a>;</div>
+<div class="line"><a name="l03314"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a1cf7774606721026a68aabe3af2e5b50"> 3314</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a1cf7774606721026a68aabe3af2e5b50">VmaAllocationInfo</a>;</div>
+<div class="line"><a name="l03315"></a><span class="lineno"> 3315</span>&#160; </div>
+<div class="line"><a name="l03326"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8"> 3326</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8">vmaAllocateMemory</a>(</div>
+<div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements* VMA_NOT_NULL pVkMemoryRequirements,</div>
+<div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pCreateInfo,</div>
+<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL pAllocation,</div>
+<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NULLABLE pAllocationInfo);</div>
+<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>&#160; </div>
+<div class="line"><a name="l03352"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1"> 3352</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1">vmaAllocateMemoryPages</a>(</div>
+<div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pVkMemoryRequirements,</div>
+<div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pCreateInfo,</div>
+<div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l03357"></a><span class="lineno"> 3357</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations,</div>
+<div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) pAllocationInfo);</div>
+<div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>&#160; </div>
+<div class="line"><a name="l03366"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b"> 3366</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer</a>(</div>
+<div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>&#160;    VkBuffer VMA_NOT_NULL_NON_DISPATCHABLE buffer,</div>
+<div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pCreateInfo,</div>
+<div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL pAllocation,</div>
+<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NULLABLE pAllocationInfo);</div>
+<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>&#160; </div>
+<div class="line"><a name="l03374"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb"> 3374</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb">vmaAllocateMemoryForImage</a>(</div>
+<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>&#160;    VkImage VMA_NOT_NULL_NON_DISPATCHABLE image,</div>
+<div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pCreateInfo,</div>
+<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL pAllocation,</div>
+<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NULLABLE pAllocationInfo);</div>
+<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>&#160; </div>
+<div class="line"><a name="l03385"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f"> 3385</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a>(</div>
+<div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE allocation);</div>
+<div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>&#160; </div>
+<div class="line"><a name="l03399"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e"> 3399</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e">vmaFreeMemoryPages</a>(</div>
+<div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations);</div>
+<div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>&#160; </div>
+<div class="line"><a name="l03420"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b"> 3420</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(</div>
+<div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
+<div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NOT_NULL pAllocationInfo);</div>
+<div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>&#160; </div>
+<div class="line"><a name="l03439"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a43d8ba9673c846f049089a5029d5c73a"> 3439</a></span>&#160;VMA_CALL_PRE VkBool32 VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a43d8ba9673c846f049089a5029d5c73a">vmaTouchAllocation</a>(</div>
+<div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation);</div>
+<div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>&#160; </div>
+<div class="line"><a name="l03456"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f"> 3456</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f">vmaSetAllocationUserData</a>(</div>
+<div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
+<div class="line"><a name="l03459"></a><span class="lineno"> 3459</span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE pUserData);</div>
+<div class="line"><a name="l03460"></a><span class="lineno"> 3460</span>&#160; </div>
+<div class="line"><a name="l03471"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ae5c9657d9e94756269145b01c05d16f1"> 3471</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae5c9657d9e94756269145b01c05d16f1">vmaCreateLostAllocation</a>(</div>
+<div class="line"><a name="l03472"></a><span class="lineno"> 3472</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03473"></a><span class="lineno"> 3473</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL pAllocation);</div>
+<div class="line"><a name="l03474"></a><span class="lineno"> 3474</span>&#160; </div>
+<div class="line"><a name="l03513"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069"> 3513</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069">vmaMapMemory</a>(</div>
+<div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
+<div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>&#160;    <span class="keywordtype">void</span>* VMA_NULLABLE * VMA_NOT_NULL ppData);</div>
+<div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>&#160; </div>
+<div class="line"><a name="l03526"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45"> 3526</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a>(</div>
+<div class="line"><a name="l03527"></a><span class="lineno"> 3527</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation);</div>
+<div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>&#160; </div>
+<div class="line"><a name="l03551"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f"> 3551</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f">vmaFlushAllocation</a>(</div>
+<div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
+<div class="line"><a name="l03554"></a><span class="lineno"> 3554</span>&#160;    VkDeviceSize offset,</div>
+<div class="line"><a name="l03555"></a><span class="lineno"> 3555</span>&#160;    VkDeviceSize size);</div>
+<div class="line"><a name="l03556"></a><span class="lineno"> 3556</span>&#160; </div>
+<div class="line"><a name="l03578"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae"> 3578</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae">vmaInvalidateAllocation</a>(</div>
+<div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
+<div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>&#160;    VkDeviceSize offset,</div>
+<div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160;    VkDeviceSize size);</div>
+<div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>&#160; </div>
+<div class="line"><a name="l03598"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc"> 3598</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc">vmaFlushAllocations</a>(</div>
+<div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03600"></a><span class="lineno"> 3600</span>&#160;    uint32_t allocationCount,</div>
+<div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL * VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) allocations,</div>
+<div class="line"><a name="l03602"></a><span class="lineno"> 3602</span>&#160;    <span class="keyword">const</span> VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) offsets,</div>
+<div class="line"><a name="l03603"></a><span class="lineno"> 3603</span>&#160;    <span class="keyword">const</span> VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) sizes);</div>
+<div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>&#160; </div>
+<div class="line"><a name="l03619"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ab25b558d75f7378ec944a1522fdcc3c5"> 3619</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ab25b558d75f7378ec944a1522fdcc3c5">vmaInvalidateAllocations</a>(</div>
+<div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>&#160;    uint32_t allocationCount,</div>
+<div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL * VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) allocations,</div>
+<div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>&#160;    <span class="keyword">const</span> VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) offsets,</div>
+<div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>&#160;    <span class="keyword">const</span> VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) sizes);</div>
+<div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>&#160; </div>
+<div class="line"><a name="l03642"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98"> 3642</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98">vmaCheckCorruption</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator, uint32_t memoryTypeBits);</div>
+<div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>&#160; </div>
+<div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>&#160;VK_DEFINE_HANDLE(<a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a>)</div>
+<div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>&#160; </div>
+<div class="line"><a name="l03652"></a><span class="lineno"> 3652</span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a> {</div>
+<div class="line"><a name="l03654"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33"> 3654</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a> = 0x1,</div>
+<div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97">VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF</div>
+<div class="line"><a name="l03656"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97"> 3656</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a>;</div>
+<div class="line"><a name="l03657"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d"> 3657</a></span>&#160;<span class="keyword">typedef</span> VkFlags <a class="code" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a>;</div>
+<div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>&#160; </div>
+<div class="line"><a name="l03663"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html"> 3663</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> {</div>
+<div class="line"><a name="l03666"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9"> 3666</a></span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> <a class="code" href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">flags</a>;</div>
+<div class="line"><a name="l03669"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba"> 3669</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a>;</div>
+<div class="line"><a name="l03678"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32"> 3678</a></span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL * VMA_NULLABLE VMA_LEN_IF_NOT_NULL(<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a>) <a class="code" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">pAllocations</a>;</div>
+<div class="line"><a name="l03684"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc"> 3684</a></span>&#160;    VkBool32* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a>) <a class="code" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">pAllocationsChanged</a>;</div>
+<div class="line"><a name="l03687"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d"> 3687</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">poolCount</a>;</div>
+<div class="line"><a name="l03703"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b"> 3703</a></span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_pool.html">VmaPool</a> VMA_NOT_NULL * VMA_NULLABLE VMA_LEN_IF_NOT_NULL(<a class="code" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">poolCount</a>) <a class="code" href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b">pPools</a>;</div>
+<div class="line"><a name="l03708"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a"> 3708</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">maxCpuBytesToMove</a>;</div>
+<div class="line"><a name="l03713"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671"> 3713</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a>;</div>
+<div class="line"><a name="l03718"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08"> 3718</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08">maxGpuBytesToMove</a>;</div>
+<div class="line"><a name="l03723"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6"> 3723</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6">maxGpuAllocationsToMove</a>;</div>
+<div class="line"><a name="l03732"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd"> 3732</a></span>&#160;    VkCommandBuffer VMA_NULLABLE <a class="code" href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">commandBuffer</a>;</div>
+<div class="line"><a name="l03733"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad6daeffaa670ce6d11a203a6224c9937"> 3733</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#ad6daeffaa670ce6d11a203a6224c9937">VmaDefragmentationInfo2</a>;</div>
+<div class="line"><a name="l03734"></a><span class="lineno"> 3734</span>&#160; </div>
+<div class="line"><a name="l03735"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_pass_move_info.html"> 3735</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a> {</div>
+<div class="line"><a name="l03736"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_pass_move_info.html#ae885c861c2dd8d622e6c19e281d035cc"> 3736</a></span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL <a class="code" href="struct_vma_defragmentation_pass_move_info.html#ae885c861c2dd8d622e6c19e281d035cc">allocation</a>;</div>
+<div class="line"><a name="l03737"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_pass_move_info.html#a06eb0c8690aa0d3478a036753492e769"> 3737</a></span>&#160;    VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE <a class="code" href="struct_vma_defragmentation_pass_move_info.html#a06eb0c8690aa0d3478a036753492e769">memory</a>;</div>
+<div class="line"><a name="l03738"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6"> 3738</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6">offset</a>;</div>
+<div class="line"><a name="l03739"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad6799e8e2b1527abfc84d33bc44aeaf5"> 3739</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#ad6799e8e2b1527abfc84d33bc44aeaf5">VmaDefragmentationPassMoveInfo</a>;</div>
+<div class="line"><a name="l03740"></a><span class="lineno"> 3740</span>&#160; </div>
+<div class="line"><a name="l03745"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_pass_info.html"> 3745</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a> {</div>
+<div class="line"><a name="l03746"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c"> 3746</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c">moveCount</a>;</div>
+<div class="line"><a name="l03747"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_pass_info.html#acbd42d4a3357999da130a95cd99a3792"> 3747</a></span>&#160;    <a class="code" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a>* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(<a class="code" href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c">moveCount</a>) <a class="code" href="struct_vma_defragmentation_pass_info.html#acbd42d4a3357999da130a95cd99a3792">pMoves</a>;</div>
+<div class="line"><a name="l03748"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a72aebd522242d56abea67b4f47f6549e"> 3748</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a72aebd522242d56abea67b4f47f6549e">VmaDefragmentationPassInfo</a>;</div>
+<div class="line"><a name="l03749"></a><span class="lineno"> 3749</span>&#160; </div>
+<div class="line"><a name="l03754"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info.html"> 3754</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> {</div>
+<div class="line"><a name="l03759"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info.html#acb311c940a777270e67e1b81c5ab6a1d"> 3759</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_info.html#acb311c940a777270e67e1b81c5ab6a1d">maxBytesToMove</a>;</div>
+<div class="line"><a name="l03764"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_info.html#aa7c7304e13c71f604c907196c4e28fbc"> 3764</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_info.html#aa7c7304e13c71f604c907196c4e28fbc">maxAllocationsToMove</a>;</div>
+<div class="line"><a name="l03765"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a2bf47f96bf92bed2a49461bd9af3acfa"> 3765</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#a2bf47f96bf92bed2a49461bd9af3acfa">VmaDefragmentationInfo</a>;</div>
+<div class="line"><a name="l03766"></a><span class="lineno"> 3766</span>&#160; </div>
+<div class="line"><a name="l03768"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html"> 3768</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> {</div>
+<div class="line"><a name="l03770"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html#a36f9d5df2a10ba2a36b16e126d60572d"> 3770</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_stats.html#a36f9d5df2a10ba2a36b16e126d60572d">bytesMoved</a>;</div>
+<div class="line"><a name="l03772"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html#ab0cb9ac0dbc106c77e384ea676422f28"> 3772</a></span>&#160;    VkDeviceSize <a class="code" href="struct_vma_defragmentation_stats.html#ab0cb9ac0dbc106c77e384ea676422f28">bytesFreed</a>;</div>
+<div class="line"><a name="l03774"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html#aefeabf130022008eadd75999478af3f9"> 3774</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_stats.html#aefeabf130022008eadd75999478af3f9">allocationsMoved</a>;</div>
+<div class="line"><a name="l03776"></a><span class="lineno"><a class="line" href="struct_vma_defragmentation_stats.html#a0113f1877904a5d1ee8f409216ff276b"> 3776</a></span>&#160;    uint32_t <a class="code" href="struct_vma_defragmentation_stats.html#a0113f1877904a5d1ee8f409216ff276b">deviceMemoryBlocksFreed</a>;</div>
+<div class="line"><a name="l03777"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ad94034192259c2e34a4d1c5e27810403"> 3777</a></span>&#160;} <a class="code" href="vk__mem__alloc_8h.html#ad94034192259c2e34a4d1c5e27810403">VmaDefragmentationStats</a>;</div>
+<div class="line"><a name="l03778"></a><span class="lineno"> 3778</span>&#160; </div>
+<div class="line"><a name="l03808"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a"> 3808</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a>(</div>
+<div class="line"><a name="l03809"></a><span class="lineno"> 3809</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03810"></a><span class="lineno"> 3810</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a>* VMA_NOT_NULL pInfo,</div>
+<div class="line"><a name="l03811"></a><span class="lineno"> 3811</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* VMA_NULLABLE pStats,</div>
+<div class="line"><a name="l03812"></a><span class="lineno"> 3812</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> VMA_NULLABLE * VMA_NOT_NULL pContext);</div>
+<div class="line"><a name="l03813"></a><span class="lineno"> 3813</span>&#160; </div>
+<div class="line"><a name="l03819"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2"> 3819</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a>(</div>
+<div class="line"><a name="l03820"></a><span class="lineno"> 3820</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03821"></a><span class="lineno"> 3821</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> VMA_NULLABLE context);</div>
+<div class="line"><a name="l03822"></a><span class="lineno"> 3822</span>&#160; </div>
+<div class="line"><a name="l03823"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b"> 3823</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b">vmaBeginDefragmentationPass</a>(</div>
+<div class="line"><a name="l03824"></a><span class="lineno"> 3824</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03825"></a><span class="lineno"> 3825</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> VMA_NULLABLE context,</div>
+<div class="line"><a name="l03826"></a><span class="lineno"> 3826</span>&#160;    <a class="code" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a>* VMA_NOT_NULL pInfo</div>
+<div class="line"><a name="l03827"></a><span class="lineno"> 3827</span>&#160;);</div>
+<div class="line"><a name="l03828"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a1b9ffa538bed905af55c747cc48963bd"> 3828</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a1b9ffa538bed905af55c747cc48963bd">vmaEndDefragmentationPass</a>(</div>
+<div class="line"><a name="l03829"></a><span class="lineno"> 3829</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03830"></a><span class="lineno"> 3830</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> VMA_NULLABLE context</div>
+<div class="line"><a name="l03831"></a><span class="lineno"> 3831</span>&#160;);</div>
+<div class="line"><a name="l03832"></a><span class="lineno"> 3832</span>&#160; </div>
+<div class="line"><a name="l03873"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac"> 3873</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac">vmaDefragment</a>(</div>
+<div class="line"><a name="l03874"></a><span class="lineno"> 3874</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03875"></a><span class="lineno"> 3875</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL * VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations,</div>
+<div class="line"><a name="l03876"></a><span class="lineno"> 3876</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l03877"></a><span class="lineno"> 3877</span>&#160;    VkBool32* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) pAllocationsChanged,</div>
+<div class="line"><a name="l03878"></a><span class="lineno"> 3878</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a>* VMA_NULLABLE pDefragmentationInfo,</div>
+<div class="line"><a name="l03879"></a><span class="lineno"> 3879</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* VMA_NULLABLE pDefragmentationStats);</div>
+<div class="line"><a name="l03880"></a><span class="lineno"> 3880</span>&#160; </div>
+<div class="line"><a name="l03893"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470"> 3893</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a>(</div>
+<div class="line"><a name="l03894"></a><span class="lineno"> 3894</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03895"></a><span class="lineno"> 3895</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
+<div class="line"><a name="l03896"></a><span class="lineno"> 3896</span>&#160;    VkBuffer VMA_NOT_NULL_NON_DISPATCHABLE buffer);</div>
+<div class="line"><a name="l03897"></a><span class="lineno"> 3897</span>&#160; </div>
+<div class="line"><a name="l03908"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a"> 3908</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a">vmaBindBufferMemory2</a>(</div>
+<div class="line"><a name="l03909"></a><span class="lineno"> 3909</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03910"></a><span class="lineno"> 3910</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
+<div class="line"><a name="l03911"></a><span class="lineno"> 3911</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
+<div class="line"><a name="l03912"></a><span class="lineno"> 3912</span>&#160;    VkBuffer VMA_NOT_NULL_NON_DISPATCHABLE buffer,</div>
+<div class="line"><a name="l03913"></a><span class="lineno"> 3913</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* VMA_NULLABLE pNext);</div>
+<div class="line"><a name="l03914"></a><span class="lineno"> 3914</span>&#160; </div>
+<div class="line"><a name="l03927"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5"> 3927</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a>(</div>
+<div class="line"><a name="l03928"></a><span class="lineno"> 3928</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03929"></a><span class="lineno"> 3929</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
+<div class="line"><a name="l03930"></a><span class="lineno"> 3930</span>&#160;    VkImage VMA_NOT_NULL_NON_DISPATCHABLE image);</div>
+<div class="line"><a name="l03931"></a><span class="lineno"> 3931</span>&#160; </div>
+<div class="line"><a name="l03942"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc"> 3942</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc">vmaBindImageMemory2</a>(</div>
+<div class="line"><a name="l03943"></a><span class="lineno"> 3943</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03944"></a><span class="lineno"> 3944</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NOT_NULL allocation,</div>
+<div class="line"><a name="l03945"></a><span class="lineno"> 3945</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
+<div class="line"><a name="l03946"></a><span class="lineno"> 3946</span>&#160;    VkImage VMA_NOT_NULL_NON_DISPATCHABLE image,</div>
+<div class="line"><a name="l03947"></a><span class="lineno"> 3947</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* VMA_NULLABLE pNext);</div>
+<div class="line"><a name="l03948"></a><span class="lineno"> 3948</span>&#160; </div>
+<div class="line"><a name="l03979"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51"> 3979</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(</div>
+<div class="line"><a name="l03980"></a><span class="lineno"> 3980</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03981"></a><span class="lineno"> 3981</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* VMA_NOT_NULL pBufferCreateInfo,</div>
+<div class="line"><a name="l03982"></a><span class="lineno"> 3982</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pAllocationCreateInfo,</div>
+<div class="line"><a name="l03983"></a><span class="lineno"> 3983</span>&#160;    VkBuffer VMA_NULLABLE_NON_DISPATCHABLE * VMA_NOT_NULL pBuffer,</div>
+<div class="line"><a name="l03984"></a><span class="lineno"> 3984</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL pAllocation,</div>
+<div class="line"><a name="l03985"></a><span class="lineno"> 3985</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NULLABLE pAllocationInfo);</div>
+<div class="line"><a name="l03986"></a><span class="lineno"> 3986</span>&#160; </div>
+<div class="line"><a name="l03993"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834"> 3993</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834">vmaCreateBufferWithAlignment</a>(</div>
+<div class="line"><a name="l03994"></a><span class="lineno"> 3994</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l03995"></a><span class="lineno"> 3995</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* VMA_NOT_NULL pBufferCreateInfo,</div>
+<div class="line"><a name="l03996"></a><span class="lineno"> 3996</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pAllocationCreateInfo,</div>
+<div class="line"><a name="l03997"></a><span class="lineno"> 3997</span>&#160;    VkDeviceSize minAlignment,</div>
+<div class="line"><a name="l03998"></a><span class="lineno"> 3998</span>&#160;    VkBuffer VMA_NULLABLE_NON_DISPATCHABLE * VMA_NOT_NULL pBuffer,</div>
+<div class="line"><a name="l03999"></a><span class="lineno"> 3999</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL pAllocation,</div>
+<div class="line"><a name="l04000"></a><span class="lineno"> 4000</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NULLABLE pAllocationInfo);</div>
+<div class="line"><a name="l04001"></a><span class="lineno"> 4001</span>&#160; </div>
+<div class="line"><a name="l04013"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77"> 4013</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a>(</div>
+<div class="line"><a name="l04014"></a><span class="lineno"> 4014</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l04015"></a><span class="lineno"> 4015</span>&#160;    VkBuffer VMA_NULLABLE_NON_DISPATCHABLE buffer,</div>
+<div class="line"><a name="l04016"></a><span class="lineno"> 4016</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE allocation);</div>
+<div class="line"><a name="l04017"></a><span class="lineno"> 4017</span>&#160; </div>
+<div class="line"><a name="l04019"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73"> 4019</a></span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a>(</div>
+<div class="line"><a name="l04020"></a><span class="lineno"> 4020</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l04021"></a><span class="lineno"> 4021</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo* VMA_NOT_NULL pImageCreateInfo,</div>
+<div class="line"><a name="l04022"></a><span class="lineno"> 4022</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* VMA_NOT_NULL pAllocationCreateInfo,</div>
+<div class="line"><a name="l04023"></a><span class="lineno"> 4023</span>&#160;    VkImage VMA_NULLABLE_NON_DISPATCHABLE * VMA_NOT_NULL pImage,</div>
+<div class="line"><a name="l04024"></a><span class="lineno"> 4024</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE * VMA_NOT_NULL pAllocation,</div>
+<div class="line"><a name="l04025"></a><span class="lineno"> 4025</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* VMA_NULLABLE pAllocationInfo);</div>
+<div class="line"><a name="l04026"></a><span class="lineno"> 4026</span>&#160; </div>
+<div class="line"><a name="l04038"></a><span class="lineno"><a class="line" href="vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e"> 4038</a></span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e">vmaDestroyImage</a>(</div>
+<div class="line"><a name="l04039"></a><span class="lineno"> 4039</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> VMA_NOT_NULL allocator,</div>
+<div class="line"><a name="l04040"></a><span class="lineno"> 4040</span>&#160;    VkImage VMA_NULLABLE_NON_DISPATCHABLE image,</div>
+<div class="line"><a name="l04041"></a><span class="lineno"> 4041</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VMA_NULLABLE allocation);</div>
+<div class="line"><a name="l04042"></a><span class="lineno"> 4042</span>&#160; </div>
+<div class="line"><a name="l04043"></a><span class="lineno"> 4043</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l04044"></a><span class="lineno"> 4044</span>&#160;}</div>
+<div class="line"><a name="l04045"></a><span class="lineno"> 4045</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04046"></a><span class="lineno"> 4046</span>&#160; </div>
+<div class="line"><a name="l04047"></a><span class="lineno"> 4047</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// AMD_VULKAN_MEMORY_ALLOCATOR_H</span></div>
+<div class="line"><a name="l04048"></a><span class="lineno"> 4048</span>&#160; </div>
+<div class="line"><a name="l04049"></a><span class="lineno"> 4049</span>&#160;<span class="comment">// For Visual Studio IntelliSense.</span></div>
+<div class="line"><a name="l04050"></a><span class="lineno"> 4050</span>&#160;<span class="preprocessor">#if defined(__cplusplus) &amp;&amp; defined(__INTELLISENSE__)</span></div>
+<div class="line"><a name="l04051"></a><span class="lineno"> 4051</span>&#160;<span class="preprocessor">#define VMA_IMPLEMENTATION</span></div>
+<div class="line"><a name="l04052"></a><span class="lineno"> 4052</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04053"></a><span class="lineno"> 4053</span>&#160; </div>
+<div class="line"><a name="l04054"></a><span class="lineno"> 4054</span>&#160;<span class="preprocessor">#ifdef VMA_IMPLEMENTATION</span></div>
+<div class="line"><a name="l04055"></a><span class="lineno"> 4055</span>&#160;<span class="preprocessor">#undef VMA_IMPLEMENTATION</span></div>
 <div class="line"><a name="l04056"></a><span class="lineno"> 4056</span>&#160; </div>
-<div class="line"><a name="l04057"></a><span class="lineno"> 4057</span>&#160;<span class="preprocessor">#ifdef VMA_IMPLEMENTATION</span></div>
-<div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>&#160;<span class="preprocessor">#undef VMA_IMPLEMENTATION</span></div>
-<div class="line"><a name="l04059"></a><span class="lineno"> 4059</span>&#160; </div>
-<div class="line"><a name="l04060"></a><span class="lineno"> 4060</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
-<div class="line"><a name="l04061"></a><span class="lineno"> 4061</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div>
-<div class="line"><a name="l04062"></a><span class="lineno"> 4062</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div>
-<div class="line"><a name="l04063"></a><span class="lineno"> 4063</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
-<div class="line"><a name="l04064"></a><span class="lineno"> 4064</span>&#160; </div>
-<div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l04066"></a><span class="lineno"> 4066</span>&#160;<span class="preprocessor">    #include &lt;chrono&gt;</span></div>
-<div class="line"><a name="l04067"></a><span class="lineno"> 4067</span>&#160;<span class="preprocessor">    #if defined(_WIN32)</span></div>
-<div class="line"><a name="l04068"></a><span class="lineno"> 4068</span>&#160;<span class="preprocessor">        #include &lt;windows.h&gt;</span></div>
-<div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>&#160;<span class="preprocessor">        #include &lt;sstream&gt;</span></div>
-<div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>&#160;<span class="preprocessor">        #include &lt;thread&gt;</span></div>
-<div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l04073"></a><span class="lineno"> 4073</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>&#160; </div>
-<div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>&#160;<span class="comment">/*******************************************************************************</span></div>
-<div class="line"><a name="l04076"></a><span class="lineno"> 4076</span>&#160;<span class="comment">CONFIGURATION SECTION</span></div>
-<div class="line"><a name="l04077"></a><span class="lineno"> 4077</span>&#160;<span class="comment"></span> </div>
-<div class="line"><a name="l04078"></a><span class="lineno"> 4078</span>&#160;<span class="comment">Define some of these macros before each #include of this header or change them</span></div>
-<div class="line"><a name="l04079"></a><span class="lineno"> 4079</span>&#160;<span class="comment">here if you need other then default behavior depending on your environment.</span></div>
-<div class="line"><a name="l04080"></a><span class="lineno"> 4080</span>&#160;<span class="comment">*/</span></div>
-<div class="line"><a name="l04081"></a><span class="lineno"> 4081</span>&#160; </div>
-<div class="line"><a name="l04082"></a><span class="lineno"> 4082</span>&#160;<span class="comment">/*</span></div>
-<div class="line"><a name="l04083"></a><span class="lineno"> 4083</span>&#160;<span class="comment">Define this macro to 1 to make the library fetch pointers to Vulkan functions</span></div>
-<div class="line"><a name="l04084"></a><span class="lineno"> 4084</span>&#160;<span class="comment">internally, like:</span></div>
-<div class="line"><a name="l04085"></a><span class="lineno"> 4085</span>&#160;<span class="comment"></span> </div>
-<div class="line"><a name="l04086"></a><span class="lineno"> 4086</span>&#160;<span class="comment">    vulkanFunctions.vkAllocateMemory = &amp;vkAllocateMemory;</span></div>
-<div class="line"><a name="l04087"></a><span class="lineno"> 4087</span>&#160;<span class="comment">*/</span></div>
-<div class="line"><a name="l04088"></a><span class="lineno"> 4088</span>&#160;<span class="preprocessor">#if !defined(VMA_STATIC_VULKAN_FUNCTIONS) &amp;&amp; !defined(VK_NO_PROTOTYPES)</span></div>
-<div class="line"><a name="l04089"></a><span class="lineno"> 4089</span>&#160;<span class="preprocessor">    #define VMA_STATIC_VULKAN_FUNCTIONS 1</span></div>
-<div class="line"><a name="l04090"></a><span class="lineno"> 4090</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l04091"></a><span class="lineno"> 4091</span>&#160; </div>
-<div class="line"><a name="l04092"></a><span class="lineno"> 4092</span>&#160;<span class="comment">/*</span></div>
-<div class="line"><a name="l04093"></a><span class="lineno"> 4093</span>&#160;<span class="comment">Define this macro to 1 to make the library fetch pointers to Vulkan functions</span></div>
-<div class="line"><a name="l04094"></a><span class="lineno"> 4094</span>&#160;<span class="comment">internally, like:</span></div>
-<div class="line"><a name="l04095"></a><span class="lineno"> 4095</span>&#160;<span class="comment"></span> </div>
-<div class="line"><a name="l04096"></a><span class="lineno"> 4096</span>&#160;<span class="comment">    vulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkGetDeviceProcAddr(m_hDevice, vkAllocateMemory);</span></div>
-<div class="line"><a name="l04097"></a><span class="lineno"> 4097</span>&#160;<span class="comment">*/</span></div>
-<div class="line"><a name="l04098"></a><span class="lineno"> 4098</span>&#160;<span class="preprocessor">#if !defined(VMA_DYNAMIC_VULKAN_FUNCTIONS)</span></div>
-<div class="line"><a name="l04099"></a><span class="lineno"> 4099</span>&#160;<span class="preprocessor">    #define VMA_DYNAMIC_VULKAN_FUNCTIONS 1</span></div>
-<div class="line"><a name="l04100"></a><span class="lineno"> 4100</span>&#160;<span class="preprocessor">    #if defined(VK_NO_PROTOTYPES)</span></div>
-<div class="line"><a name="l04101"></a><span class="lineno"> 4101</span>&#160;        <span class="keyword">extern</span> PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;</div>
-<div class="line"><a name="l04102"></a><span class="lineno"> 4102</span>&#160;        <span class="keyword">extern</span> PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;</div>
-<div class="line"><a name="l04103"></a><span class="lineno"> 4103</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l04104"></a><span class="lineno"> 4104</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04057"></a><span class="lineno"> 4057</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
+<div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div>
+<div class="line"><a name="l04059"></a><span class="lineno"> 4059</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div>
+<div class="line"><a name="l04060"></a><span class="lineno"> 4060</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l04061"></a><span class="lineno"> 4061</span>&#160; </div>
+<div class="line"><a name="l04062"></a><span class="lineno"> 4062</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l04063"></a><span class="lineno"> 4063</span>&#160;<span class="preprocessor">    #include &lt;chrono&gt;</span></div>
+<div class="line"><a name="l04064"></a><span class="lineno"> 4064</span>&#160;<span class="preprocessor">    #if defined(_WIN32)</span></div>
+<div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>&#160;<span class="preprocessor">        #include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l04066"></a><span class="lineno"> 4066</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l04067"></a><span class="lineno"> 4067</span>&#160;<span class="preprocessor">        #include &lt;sstream&gt;</span></div>
+<div class="line"><a name="l04068"></a><span class="lineno"> 4068</span>&#160;<span class="preprocessor">        #include &lt;thread&gt;</span></div>
+<div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>&#160; </div>
+<div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>&#160;<span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l04073"></a><span class="lineno"> 4073</span>&#160;<span class="comment">CONFIGURATION SECTION</span></div>
+<div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>&#160;<span class="comment">Define some of these macros before each #include of this header or change them</span></div>
+<div class="line"><a name="l04076"></a><span class="lineno"> 4076</span>&#160;<span class="comment">here if you need other then default behavior depending on your environment.</span></div>
+<div class="line"><a name="l04077"></a><span class="lineno"> 4077</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l04078"></a><span class="lineno"> 4078</span>&#160; </div>
+<div class="line"><a name="l04079"></a><span class="lineno"> 4079</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l04080"></a><span class="lineno"> 4080</span>&#160;<span class="comment">Define this macro to 1 to make the library fetch pointers to Vulkan functions</span></div>
+<div class="line"><a name="l04081"></a><span class="lineno"> 4081</span>&#160;<span class="comment">internally, like:</span></div>
+<div class="line"><a name="l04082"></a><span class="lineno"> 4082</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l04083"></a><span class="lineno"> 4083</span>&#160;<span class="comment">    vulkanFunctions.vkAllocateMemory = &amp;vkAllocateMemory;</span></div>
+<div class="line"><a name="l04084"></a><span class="lineno"> 4084</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l04085"></a><span class="lineno"> 4085</span>&#160;<span class="preprocessor">#if !defined(VMA_STATIC_VULKAN_FUNCTIONS) &amp;&amp; !defined(VK_NO_PROTOTYPES)</span></div>
+<div class="line"><a name="l04086"></a><span class="lineno"> 4086</span>&#160;<span class="preprocessor">    #define VMA_STATIC_VULKAN_FUNCTIONS 1</span></div>
+<div class="line"><a name="l04087"></a><span class="lineno"> 4087</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04088"></a><span class="lineno"> 4088</span>&#160; </div>
+<div class="line"><a name="l04089"></a><span class="lineno"> 4089</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l04090"></a><span class="lineno"> 4090</span>&#160;<span class="comment">Define this macro to 1 to make the library fetch pointers to Vulkan functions</span></div>
+<div class="line"><a name="l04091"></a><span class="lineno"> 4091</span>&#160;<span class="comment">internally, like:</span></div>
+<div class="line"><a name="l04092"></a><span class="lineno"> 4092</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l04093"></a><span class="lineno"> 4093</span>&#160;<span class="comment">    vulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkGetDeviceProcAddr(m_hDevice, vkAllocateMemory);</span></div>
+<div class="line"><a name="l04094"></a><span class="lineno"> 4094</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l04095"></a><span class="lineno"> 4095</span>&#160;<span class="preprocessor">#if !defined(VMA_DYNAMIC_VULKAN_FUNCTIONS)</span></div>
+<div class="line"><a name="l04096"></a><span class="lineno"> 4096</span>&#160;<span class="preprocessor">    #define VMA_DYNAMIC_VULKAN_FUNCTIONS 1</span></div>
+<div class="line"><a name="l04097"></a><span class="lineno"> 4097</span>&#160;<span class="preprocessor">    #if defined(VK_NO_PROTOTYPES)</span></div>
+<div class="line"><a name="l04098"></a><span class="lineno"> 4098</span>&#160;        <span class="keyword">extern</span> PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;</div>
+<div class="line"><a name="l04099"></a><span class="lineno"> 4099</span>&#160;        <span class="keyword">extern</span> PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;</div>
+<div class="line"><a name="l04100"></a><span class="lineno"> 4100</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l04101"></a><span class="lineno"> 4101</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04102"></a><span class="lineno"> 4102</span>&#160; </div>
+<div class="line"><a name="l04103"></a><span class="lineno"> 4103</span>&#160;<span class="comment">// Define this macro to 1 to make the library use STL containers instead of its own implementation.</span></div>
+<div class="line"><a name="l04104"></a><span class="lineno"> 4104</span>&#160;<span class="comment">//#define VMA_USE_STL_CONTAINERS 1</span></div>
 <div class="line"><a name="l04105"></a><span class="lineno"> 4105</span>&#160; </div>
-<div class="line"><a name="l04106"></a><span class="lineno"> 4106</span>&#160;<span class="comment">// Define this macro to 1 to make the library use STL containers instead of its own implementation.</span></div>
-<div class="line"><a name="l04107"></a><span class="lineno"> 4107</span>&#160;<span class="comment">//#define VMA_USE_STL_CONTAINERS 1</span></div>
-<div class="line"><a name="l04108"></a><span class="lineno"> 4108</span>&#160; </div>
-<div class="line"><a name="l04109"></a><span class="lineno"> 4109</span>&#160;<span class="comment">/* Set this macro to 1 to make the library including and using STL containers:</span></div>
-<div class="line"><a name="l04110"></a><span class="lineno"> 4110</span>&#160;<span class="comment">std::pair, std::vector, std::list, std::unordered_map.</span></div>
-<div class="line"><a name="l04111"></a><span class="lineno"> 4111</span>&#160;<span class="comment"></span> </div>
-<div class="line"><a name="l04112"></a><span class="lineno"> 4112</span>&#160;<span class="comment">Set it to 0 or undefined to make the library using its own implementation of</span></div>
-<div class="line"><a name="l04113"></a><span class="lineno"> 4113</span>&#160;<span class="comment">the containers.</span></div>
-<div class="line"><a name="l04114"></a><span class="lineno"> 4114</span>&#160;<span class="comment">*/</span></div>
-<div class="line"><a name="l04115"></a><span class="lineno"> 4115</span>&#160;<span class="preprocessor">#if VMA_USE_STL_CONTAINERS</span></div>
-<div class="line"><a name="l04116"></a><span class="lineno"> 4116</span>&#160;<span class="preprocessor">   #define VMA_USE_STL_VECTOR 1</span></div>
-<div class="line"><a name="l04117"></a><span class="lineno"> 4117</span>&#160;<span class="preprocessor">   #define VMA_USE_STL_UNORDERED_MAP 1</span></div>
-<div class="line"><a name="l04118"></a><span class="lineno"> 4118</span>&#160;<span class="preprocessor">   #define VMA_USE_STL_LIST 1</span></div>
-<div class="line"><a name="l04119"></a><span class="lineno"> 4119</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l04120"></a><span class="lineno"> 4120</span>&#160; </div>
-<div class="line"><a name="l04121"></a><span class="lineno"> 4121</span>&#160;<span class="preprocessor">#ifndef VMA_USE_STL_SHARED_MUTEX</span></div>
-<div class="line"><a name="l04122"></a><span class="lineno"> 4122</span>&#160;    <span class="comment">// Compiler conforms to C++17.</span></div>
-<div class="line"><a name="l04123"></a><span class="lineno"> 4123</span>&#160;<span class="preprocessor">    #if __cplusplus &gt;= 201703L</span></div>
-<div class="line"><a name="l04124"></a><span class="lineno"> 4124</span>&#160;<span class="preprocessor">        #define VMA_USE_STL_SHARED_MUTEX 1</span></div>
-<div class="line"><a name="l04125"></a><span class="lineno"> 4125</span>&#160;    <span class="comment">// Visual studio defines __cplusplus properly only when passed additional parameter: /Zc:__cplusplus</span></div>
-<div class="line"><a name="l04126"></a><span class="lineno"> 4126</span>&#160;    <span class="comment">// Otherwise it&#39;s always 199711L, despite shared_mutex works since Visual Studio 2015 Update 2.</span></div>
-<div class="line"><a name="l04127"></a><span class="lineno"> 4127</span>&#160;    <span class="comment">// See: https://blogs.msdn.microsoft.com/vcblog/2018/04/09/msvc-now-correctly-reports-__cplusplus/</span></div>
-<div class="line"><a name="l04128"></a><span class="lineno"> 4128</span>&#160;<span class="preprocessor">    #elif defined(_MSC_FULL_VER) &amp;&amp; _MSC_FULL_VER &gt;= 190023918 &amp;&amp; __cplusplus == 199711L &amp;&amp; _MSVC_LANG &gt;= 201703L</span></div>
-<div class="line"><a name="l04129"></a><span class="lineno"> 4129</span>&#160;<span class="preprocessor">        #define VMA_USE_STL_SHARED_MUTEX 1</span></div>
-<div class="line"><a name="l04130"></a><span class="lineno"> 4130</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l04131"></a><span class="lineno"> 4131</span>&#160;<span class="preprocessor">        #define VMA_USE_STL_SHARED_MUTEX 0</span></div>
-<div class="line"><a name="l04132"></a><span class="lineno"> 4132</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l04133"></a><span class="lineno"> 4133</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l04134"></a><span class="lineno"> 4134</span>&#160; </div>
-<div class="line"><a name="l04135"></a><span class="lineno"> 4135</span>&#160;<span class="comment">/*</span></div>
-<div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>&#160;<span class="comment">THESE INCLUDES ARE NOT ENABLED BY DEFAULT.</span></div>
-<div class="line"><a name="l04137"></a><span class="lineno"> 4137</span>&#160;<span class="comment">Library has its own container implementation.</span></div>
-<div class="line"><a name="l04138"></a><span class="lineno"> 4138</span>&#160;<span class="comment">*/</span></div>
-<div class="line"><a name="l04139"></a><span class="lineno"> 4139</span>&#160;<span class="preprocessor">#if VMA_USE_STL_VECTOR</span></div>
-<div class="line"><a name="l04140"></a><span class="lineno"> 4140</span>&#160;<span class="preprocessor">   #include &lt;vector&gt;</span></div>
-<div class="line"><a name="l04141"></a><span class="lineno"> 4141</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l04142"></a><span class="lineno"> 4142</span>&#160; </div>
-<div class="line"><a name="l04143"></a><span class="lineno"> 4143</span>&#160;<span class="preprocessor">#if VMA_USE_STL_UNORDERED_MAP</span></div>
-<div class="line"><a name="l04144"></a><span class="lineno"> 4144</span>&#160;<span class="preprocessor">   #include &lt;unordered_map&gt;</span></div>
-<div class="line"><a name="l04145"></a><span class="lineno"> 4145</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l04146"></a><span class="lineno"> 4146</span>&#160; </div>
-<div class="line"><a name="l04147"></a><span class="lineno"> 4147</span>&#160;<span class="preprocessor">#if VMA_USE_STL_LIST</span></div>
-<div class="line"><a name="l04148"></a><span class="lineno"> 4148</span>&#160;<span class="preprocessor">   #include &lt;list&gt;</span></div>
-<div class="line"><a name="l04149"></a><span class="lineno"> 4149</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l04150"></a><span class="lineno"> 4150</span>&#160; </div>
-<div class="line"><a name="l04151"></a><span class="lineno"> 4151</span>&#160;<span class="comment">/*</span></div>
-<div class="line"><a name="l04152"></a><span class="lineno"> 4152</span>&#160;<span class="comment">Following headers are used in this CONFIGURATION section only, so feel free to</span></div>
-<div class="line"><a name="l04153"></a><span class="lineno"> 4153</span>&#160;<span class="comment">remove them if not needed.</span></div>
-<div class="line"><a name="l04154"></a><span class="lineno"> 4154</span>&#160;<span class="comment">*/</span></div>
-<div class="line"><a name="l04155"></a><span class="lineno"> 4155</span>&#160;<span class="preprocessor">#include &lt;cassert&gt;</span> <span class="comment">// for assert</span></div>
-<div class="line"><a name="l04156"></a><span class="lineno"> 4156</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span> <span class="comment">// for min, max</span></div>
-<div class="line"><a name="l04157"></a><span class="lineno"> 4157</span>&#160;<span class="preprocessor">#include &lt;mutex&gt;</span></div>
-<div class="line"><a name="l04158"></a><span class="lineno"> 4158</span>&#160; </div>
-<div class="line"><a name="l04159"></a><span class="lineno"> 4159</span>&#160;<span class="preprocessor">#ifndef VMA_NULL</span></div>
-<div class="line"><a name="l04160"></a><span class="lineno"> 4160</span>&#160;   <span class="comment">// Value used as null pointer. Define it to e.g.: nullptr, NULL, 0, (void*)0.</span></div>
-<div class="line"><a name="l04161"></a><span class="lineno"> 4161</span>&#160;<span class="preprocessor">   #define VMA_NULL   nullptr</span></div>
-<div class="line"><a name="l04162"></a><span class="lineno"> 4162</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l04163"></a><span class="lineno"> 4163</span>&#160; </div>
-<div class="line"><a name="l04164"></a><span class="lineno"> 4164</span>&#160;<span class="preprocessor">#if defined(__ANDROID_API__) &amp;&amp; (__ANDROID_API__ &lt; 16)</span></div>
-<div class="line"><a name="l04165"></a><span class="lineno"> 4165</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div>
-<div class="line"><a name="l04166"></a><span class="lineno"> 4166</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span>* vma_aligned_alloc(<span class="keywordtype">size_t</span> alignment, <span class="keywordtype">size_t</span> size)</div>
-<div class="line"><a name="l04167"></a><span class="lineno"> 4167</span>&#160;{</div>
-<div class="line"><a name="l04168"></a><span class="lineno"> 4168</span>&#160;    <span class="comment">// alignment must be &gt;= sizeof(void*)</span></div>
-<div class="line"><a name="l04169"></a><span class="lineno"> 4169</span>&#160;    <span class="keywordflow">if</span>(alignment &lt; <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*))</div>
-<div class="line"><a name="l04170"></a><span class="lineno"> 4170</span>&#160;    {</div>
-<div class="line"><a name="l04171"></a><span class="lineno"> 4171</span>&#160;        alignment = <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*);</div>
-<div class="line"><a name="l04172"></a><span class="lineno"> 4172</span>&#160;    }</div>
-<div class="line"><a name="l04173"></a><span class="lineno"> 4173</span>&#160; </div>
-<div class="line"><a name="l04174"></a><span class="lineno"> 4174</span>&#160;    <span class="keywordflow">return</span> memalign(alignment, size);</div>
-<div class="line"><a name="l04175"></a><span class="lineno"> 4175</span>&#160;}</div>
-<div class="line"><a name="l04176"></a><span class="lineno"> 4176</span>&#160;<span class="preprocessor">#elif defined(__APPLE__) || defined(__ANDROID__) || (defined(__linux__) &amp;&amp; defined(__GLIBCXX__) &amp;&amp; !defined(_GLIBCXX_HAVE_ALIGNED_ALLOC))</span></div>
-<div class="line"><a name="l04177"></a><span class="lineno"> 4177</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div>
-<div class="line"><a name="l04178"></a><span class="lineno"> 4178</span>&#160; </div>
-<div class="line"><a name="l04179"></a><span class="lineno"> 4179</span>&#160;<span class="preprocessor">#if defined(__APPLE__)</span></div>
-<div class="line"><a name="l04180"></a><span class="lineno"> 4180</span>&#160;<span class="preprocessor">#include &lt;AvailabilityMacros.h&gt;</span></div>
-<div class="line"><a name="l04181"></a><span class="lineno"> 4181</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l04182"></a><span class="lineno"> 4182</span>&#160; </div>
-<div class="line"><a name="l04183"></a><span class="lineno"> 4183</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span>* vma_aligned_alloc(<span class="keywordtype">size_t</span> alignment, <span class="keywordtype">size_t</span> size)</div>
-<div class="line"><a name="l04184"></a><span class="lineno"> 4184</span>&#160;{</div>
-<div class="line"><a name="l04185"></a><span class="lineno"> 4185</span>&#160;<span class="preprocessor">#if defined(__APPLE__) &amp;&amp; (defined(MAC_OS_X_VERSION_10_16) || defined(__IPHONE_14_0))</span></div>
-<div class="line"><a name="l04186"></a><span class="lineno"> 4186</span>&#160;<span class="preprocessor">#if MAC_OS_X_VERSION_MAX_ALLOWED &gt;= MAC_OS_X_VERSION_10_16 || __IPHONE_OS_VERSION_MAX_ALLOWED &gt;= __IPHONE_14_0</span></div>
-<div class="line"><a name="l04187"></a><span class="lineno"> 4187</span>&#160;    <span class="comment">// For C++14, usr/include/malloc/_malloc.h declares aligned_alloc()) only</span></div>
-<div class="line"><a name="l04188"></a><span class="lineno"> 4188</span>&#160;    <span class="comment">// with the MacOSX11.0 SDK in Xcode 12 (which is what adds</span></div>
-<div class="line"><a name="l04189"></a><span class="lineno"> 4189</span>&#160;    <span class="comment">// MAC_OS_X_VERSION_10_16), even though the function is marked</span></div>
-<div class="line"><a name="l04190"></a><span class="lineno"> 4190</span>&#160;    <span class="comment">// availabe for 10.15. That&#39;s why the preprocessor checks for 10.16 but</span></div>
-<div class="line"><a name="l04191"></a><span class="lineno"> 4191</span>&#160;    <span class="comment">// the __builtin_available checks for 10.15.</span></div>
-<div class="line"><a name="l04192"></a><span class="lineno"> 4192</span>&#160;    <span class="comment">// People who use C++17 could call aligned_alloc with the 10.15 SDK already.</span></div>
-<div class="line"><a name="l04193"></a><span class="lineno"> 4193</span>&#160;    <span class="keywordflow">if</span> (__builtin_available(macOS 10.15, iOS 13, *))</div>
-<div class="line"><a name="l04194"></a><span class="lineno"> 4194</span>&#160;        <span class="keywordflow">return</span> aligned_alloc(alignment, size);</div>
-<div class="line"><a name="l04195"></a><span class="lineno"> 4195</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l04196"></a><span class="lineno"> 4196</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04106"></a><span class="lineno"> 4106</span>&#160;<span class="comment">/* Set this macro to 1 to make the library including and using STL containers:</span></div>
+<div class="line"><a name="l04107"></a><span class="lineno"> 4107</span>&#160;<span class="comment">std::pair, std::vector, std::list, std::unordered_map.</span></div>
+<div class="line"><a name="l04108"></a><span class="lineno"> 4108</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l04109"></a><span class="lineno"> 4109</span>&#160;<span class="comment">Set it to 0 or undefined to make the library using its own implementation of</span></div>
+<div class="line"><a name="l04110"></a><span class="lineno"> 4110</span>&#160;<span class="comment">the containers.</span></div>
+<div class="line"><a name="l04111"></a><span class="lineno"> 4111</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l04112"></a><span class="lineno"> 4112</span>&#160;<span class="preprocessor">#if VMA_USE_STL_CONTAINERS</span></div>
+<div class="line"><a name="l04113"></a><span class="lineno"> 4113</span>&#160;<span class="preprocessor">   #define VMA_USE_STL_VECTOR 1</span></div>
+<div class="line"><a name="l04114"></a><span class="lineno"> 4114</span>&#160;<span class="preprocessor">   #define VMA_USE_STL_UNORDERED_MAP 1</span></div>
+<div class="line"><a name="l04115"></a><span class="lineno"> 4115</span>&#160;<span class="preprocessor">   #define VMA_USE_STL_LIST 1</span></div>
+<div class="line"><a name="l04116"></a><span class="lineno"> 4116</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04117"></a><span class="lineno"> 4117</span>&#160; </div>
+<div class="line"><a name="l04118"></a><span class="lineno"> 4118</span>&#160;<span class="preprocessor">#ifndef VMA_USE_STL_SHARED_MUTEX</span></div>
+<div class="line"><a name="l04119"></a><span class="lineno"> 4119</span>&#160;    <span class="comment">// Compiler conforms to C++17.</span></div>
+<div class="line"><a name="l04120"></a><span class="lineno"> 4120</span>&#160;<span class="preprocessor">    #if __cplusplus &gt;= 201703L</span></div>
+<div class="line"><a name="l04121"></a><span class="lineno"> 4121</span>&#160;<span class="preprocessor">        #define VMA_USE_STL_SHARED_MUTEX 1</span></div>
+<div class="line"><a name="l04122"></a><span class="lineno"> 4122</span>&#160;    <span class="comment">// Visual studio defines __cplusplus properly only when passed additional parameter: /Zc:__cplusplus</span></div>
+<div class="line"><a name="l04123"></a><span class="lineno"> 4123</span>&#160;    <span class="comment">// Otherwise it&#39;s always 199711L, despite shared_mutex works since Visual Studio 2015 Update 2.</span></div>
+<div class="line"><a name="l04124"></a><span class="lineno"> 4124</span>&#160;    <span class="comment">// See: https://blogs.msdn.microsoft.com/vcblog/2018/04/09/msvc-now-correctly-reports-__cplusplus/</span></div>
+<div class="line"><a name="l04125"></a><span class="lineno"> 4125</span>&#160;<span class="preprocessor">    #elif defined(_MSC_FULL_VER) &amp;&amp; _MSC_FULL_VER &gt;= 190023918 &amp;&amp; __cplusplus == 199711L &amp;&amp; _MSVC_LANG &gt;= 201703L</span></div>
+<div class="line"><a name="l04126"></a><span class="lineno"> 4126</span>&#160;<span class="preprocessor">        #define VMA_USE_STL_SHARED_MUTEX 1</span></div>
+<div class="line"><a name="l04127"></a><span class="lineno"> 4127</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l04128"></a><span class="lineno"> 4128</span>&#160;<span class="preprocessor">        #define VMA_USE_STL_SHARED_MUTEX 0</span></div>
+<div class="line"><a name="l04129"></a><span class="lineno"> 4129</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l04130"></a><span class="lineno"> 4130</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04131"></a><span class="lineno"> 4131</span>&#160; </div>
+<div class="line"><a name="l04132"></a><span class="lineno"> 4132</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l04133"></a><span class="lineno"> 4133</span>&#160;<span class="comment">THESE INCLUDES ARE NOT ENABLED BY DEFAULT.</span></div>
+<div class="line"><a name="l04134"></a><span class="lineno"> 4134</span>&#160;<span class="comment">Library has its own container implementation.</span></div>
+<div class="line"><a name="l04135"></a><span class="lineno"> 4135</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>&#160;<span class="preprocessor">#if VMA_USE_STL_VECTOR</span></div>
+<div class="line"><a name="l04137"></a><span class="lineno"> 4137</span>&#160;<span class="preprocessor">   #include &lt;vector&gt;</span></div>
+<div class="line"><a name="l04138"></a><span class="lineno"> 4138</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04139"></a><span class="lineno"> 4139</span>&#160; </div>
+<div class="line"><a name="l04140"></a><span class="lineno"> 4140</span>&#160;<span class="preprocessor">#if VMA_USE_STL_UNORDERED_MAP</span></div>
+<div class="line"><a name="l04141"></a><span class="lineno"> 4141</span>&#160;<span class="preprocessor">   #include &lt;unordered_map&gt;</span></div>
+<div class="line"><a name="l04142"></a><span class="lineno"> 4142</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04143"></a><span class="lineno"> 4143</span>&#160; </div>
+<div class="line"><a name="l04144"></a><span class="lineno"> 4144</span>&#160;<span class="preprocessor">#if VMA_USE_STL_LIST</span></div>
+<div class="line"><a name="l04145"></a><span class="lineno"> 4145</span>&#160;<span class="preprocessor">   #include &lt;list&gt;</span></div>
+<div class="line"><a name="l04146"></a><span class="lineno"> 4146</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04147"></a><span class="lineno"> 4147</span>&#160; </div>
+<div class="line"><a name="l04148"></a><span class="lineno"> 4148</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l04149"></a><span class="lineno"> 4149</span>&#160;<span class="comment">Following headers are used in this CONFIGURATION section only, so feel free to</span></div>
+<div class="line"><a name="l04150"></a><span class="lineno"> 4150</span>&#160;<span class="comment">remove them if not needed.</span></div>
+<div class="line"><a name="l04151"></a><span class="lineno"> 4151</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l04152"></a><span class="lineno"> 4152</span>&#160;<span class="preprocessor">#include &lt;cassert&gt;</span> <span class="comment">// for assert</span></div>
+<div class="line"><a name="l04153"></a><span class="lineno"> 4153</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span> <span class="comment">// for min, max</span></div>
+<div class="line"><a name="l04154"></a><span class="lineno"> 4154</span>&#160;<span class="preprocessor">#include &lt;mutex&gt;</span></div>
+<div class="line"><a name="l04155"></a><span class="lineno"> 4155</span>&#160; </div>
+<div class="line"><a name="l04156"></a><span class="lineno"> 4156</span>&#160;<span class="preprocessor">#ifndef VMA_NULL</span></div>
+<div class="line"><a name="l04157"></a><span class="lineno"> 4157</span>&#160;   <span class="comment">// Value used as null pointer. Define it to e.g.: nullptr, NULL, 0, (void*)0.</span></div>
+<div class="line"><a name="l04158"></a><span class="lineno"> 4158</span>&#160;<span class="preprocessor">   #define VMA_NULL   nullptr</span></div>
+<div class="line"><a name="l04159"></a><span class="lineno"> 4159</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04160"></a><span class="lineno"> 4160</span>&#160; </div>
+<div class="line"><a name="l04161"></a><span class="lineno"> 4161</span>&#160;<span class="preprocessor">#if defined(__ANDROID_API__) &amp;&amp; (__ANDROID_API__ &lt; 16)</span></div>
+<div class="line"><a name="l04162"></a><span class="lineno"> 4162</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div>
+<div class="line"><a name="l04163"></a><span class="lineno"> 4163</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span>* vma_aligned_alloc(<span class="keywordtype">size_t</span> alignment, <span class="keywordtype">size_t</span> size)</div>
+<div class="line"><a name="l04164"></a><span class="lineno"> 4164</span>&#160;{</div>
+<div class="line"><a name="l04165"></a><span class="lineno"> 4165</span>&#160;    <span class="comment">// alignment must be &gt;= sizeof(void*)</span></div>
+<div class="line"><a name="l04166"></a><span class="lineno"> 4166</span>&#160;    <span class="keywordflow">if</span>(alignment &lt; <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*))</div>
+<div class="line"><a name="l04167"></a><span class="lineno"> 4167</span>&#160;    {</div>
+<div class="line"><a name="l04168"></a><span class="lineno"> 4168</span>&#160;        alignment = <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*);</div>
+<div class="line"><a name="l04169"></a><span class="lineno"> 4169</span>&#160;    }</div>
+<div class="line"><a name="l04170"></a><span class="lineno"> 4170</span>&#160; </div>
+<div class="line"><a name="l04171"></a><span class="lineno"> 4171</span>&#160;    <span class="keywordflow">return</span> memalign(alignment, size);</div>
+<div class="line"><a name="l04172"></a><span class="lineno"> 4172</span>&#160;}</div>
+<div class="line"><a name="l04173"></a><span class="lineno"> 4173</span>&#160;<span class="preprocessor">#elif defined(__APPLE__) || defined(__ANDROID__) || (defined(__linux__) &amp;&amp; defined(__GLIBCXX__) &amp;&amp; !defined(_GLIBCXX_HAVE_ALIGNED_ALLOC))</span></div>
+<div class="line"><a name="l04174"></a><span class="lineno"> 4174</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div>
+<div class="line"><a name="l04175"></a><span class="lineno"> 4175</span>&#160; </div>
+<div class="line"><a name="l04176"></a><span class="lineno"> 4176</span>&#160;<span class="preprocessor">#if defined(__APPLE__)</span></div>
+<div class="line"><a name="l04177"></a><span class="lineno"> 4177</span>&#160;<span class="preprocessor">#include &lt;AvailabilityMacros.h&gt;</span></div>
+<div class="line"><a name="l04178"></a><span class="lineno"> 4178</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l04179"></a><span class="lineno"> 4179</span>&#160; </div>
+<div class="line"><a name="l04180"></a><span class="lineno"> 4180</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span>* vma_aligned_alloc(<span class="keywordtype">size_t</span> alignment, <span class="keywordtype">size_t</span> size)</div>
+<div class="line"><a name="l04181"></a><span class="lineno"> 4181</span>&#160;{</div>
+<div class="line"><a name="l04182"></a><span class="lineno"> 4182</span>&#160;    <span class="comment">// Unfortunately, aligned_alloc causes VMA to crash due to it returning null pointers. (At least under 11.4)</span></div>
+<div class="line"><a name="l04183"></a><span class="lineno"> 4183</span>&#160;    <span class="comment">// Therefore, for now disable this specific exception until a proper solution is found.</span></div>
+<div class="line"><a name="l04184"></a><span class="lineno"> 4184</span>&#160;    <span class="comment">//#if defined(__APPLE__) &amp;&amp; (defined(MAC_OS_X_VERSION_10_16) || defined(__IPHONE_14_0))</span></div>
+<div class="line"><a name="l04185"></a><span class="lineno"> 4185</span>&#160;    <span class="comment">//#if MAC_OS_X_VERSION_MAX_ALLOWED &gt;= MAC_OS_X_VERSION_10_16 || __IPHONE_OS_VERSION_MAX_ALLOWED &gt;= __IPHONE_14_0</span></div>
+<div class="line"><a name="l04186"></a><span class="lineno"> 4186</span>&#160;    <span class="comment">//    // For C++14, usr/include/malloc/_malloc.h declares aligned_alloc()) only</span></div>
+<div class="line"><a name="l04187"></a><span class="lineno"> 4187</span>&#160;    <span class="comment">//    // with the MacOSX11.0 SDK in Xcode 12 (which is what adds</span></div>
+<div class="line"><a name="l04188"></a><span class="lineno"> 4188</span>&#160;    <span class="comment">//    // MAC_OS_X_VERSION_10_16), even though the function is marked</span></div>
+<div class="line"><a name="l04189"></a><span class="lineno"> 4189</span>&#160;    <span class="comment">//    // availabe for 10.15. That&#39;s why the preprocessor checks for 10.16 but</span></div>
+<div class="line"><a name="l04190"></a><span class="lineno"> 4190</span>&#160;    <span class="comment">//    // the __builtin_available checks for 10.15.</span></div>
+<div class="line"><a name="l04191"></a><span class="lineno"> 4191</span>&#160;    <span class="comment">//    // People who use C++17 could call aligned_alloc with the 10.15 SDK already.</span></div>
+<div class="line"><a name="l04192"></a><span class="lineno"> 4192</span>&#160;    <span class="comment">//    if (__builtin_available(macOS 10.15, iOS 13, *))</span></div>
+<div class="line"><a name="l04193"></a><span class="lineno"> 4193</span>&#160;    <span class="comment">//        return aligned_alloc(alignment, size);</span></div>
+<div class="line"><a name="l04194"></a><span class="lineno"> 4194</span>&#160;    <span class="comment">//#endif</span></div>
+<div class="line"><a name="l04195"></a><span class="lineno"> 4195</span>&#160;    <span class="comment">//#endif</span></div>
+<div class="line"><a name="l04196"></a><span class="lineno"> 4196</span>&#160; </div>
 <div class="line"><a name="l04197"></a><span class="lineno"> 4197</span>&#160;    <span class="comment">// alignment must be &gt;= sizeof(void*)</span></div>
 <div class="line"><a name="l04198"></a><span class="lineno"> 4198</span>&#160;    <span class="keywordflow">if</span>(alignment &lt; <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*))</div>
 <div class="line"><a name="l04199"></a><span class="lineno"> 4199</span>&#160;    {</div>
@@ -6312,10367 +6315,10366 @@
 <div class="line"><a name="l09560"></a><span class="lineno"> 9560</span>&#160;        m_Suballocations.size() - (<span class="keywordtype">size_t</span>)m_FreeCount, <span class="comment">// allocationCount</span></div>
 <div class="line"><a name="l09561"></a><span class="lineno"> 9561</span>&#160;        m_FreeCount); <span class="comment">// unusedRangeCount</span></div>
 <div class="line"><a name="l09562"></a><span class="lineno"> 9562</span>&#160; </div>
-<div class="line"><a name="l09563"></a><span class="lineno"> 9563</span>&#160;    <span class="keywordtype">size_t</span> i = 0;</div>
-<div class="line"><a name="l09564"></a><span class="lineno"> 9564</span>&#160;    <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span>&amp; suballoc : m_Suballocations)</div>
-<div class="line"><a name="l09565"></a><span class="lineno"> 9565</span>&#160;    {</div>
-<div class="line"><a name="l09566"></a><span class="lineno"> 9566</span>&#160;        <span class="keywordflow">if</span>(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE)</div>
-<div class="line"><a name="l09567"></a><span class="lineno"> 9567</span>&#160;        {</div>
-<div class="line"><a name="l09568"></a><span class="lineno"> 9568</span>&#160;            PrintDetailedMap_UnusedRange(json, suballoc.offset, suballoc.size);</div>
-<div class="line"><a name="l09569"></a><span class="lineno"> 9569</span>&#160;        }</div>
-<div class="line"><a name="l09570"></a><span class="lineno"> 9570</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l09571"></a><span class="lineno"> 9571</span>&#160;        {</div>
-<div class="line"><a name="l09572"></a><span class="lineno"> 9572</span>&#160;            PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.hAllocation);</div>
-<div class="line"><a name="l09573"></a><span class="lineno"> 9573</span>&#160;        }</div>
-<div class="line"><a name="l09574"></a><span class="lineno"> 9574</span>&#160;    }</div>
-<div class="line"><a name="l09575"></a><span class="lineno"> 9575</span>&#160; </div>
-<div class="line"><a name="l09576"></a><span class="lineno"> 9576</span>&#160;    PrintDetailedMap_End(json);</div>
-<div class="line"><a name="l09577"></a><span class="lineno"> 9577</span>&#160;}</div>
-<div class="line"><a name="l09578"></a><span class="lineno"> 9578</span>&#160; </div>
-<div class="line"><a name="l09579"></a><span class="lineno"> 9579</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l09580"></a><span class="lineno"> 9580</span>&#160; </div>
-<div class="line"><a name="l09581"></a><span class="lineno"> 9581</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Generic::CreateAllocationRequest(</div>
-<div class="line"><a name="l09582"></a><span class="lineno"> 9582</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l09583"></a><span class="lineno"> 9583</span>&#160;    uint32_t frameInUseCount,</div>
-<div class="line"><a name="l09584"></a><span class="lineno"> 9584</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
-<div class="line"><a name="l09585"></a><span class="lineno"> 9585</span>&#160;    VkDeviceSize allocSize,</div>
-<div class="line"><a name="l09586"></a><span class="lineno"> 9586</span>&#160;    VkDeviceSize allocAlignment,</div>
-<div class="line"><a name="l09587"></a><span class="lineno"> 9587</span>&#160;    <span class="keywordtype">bool</span> upperAddress,</div>
-<div class="line"><a name="l09588"></a><span class="lineno"> 9588</span>&#160;    VmaSuballocationType allocType,</div>
-<div class="line"><a name="l09589"></a><span class="lineno"> 9589</span>&#160;    <span class="keywordtype">bool</span> canMakeOtherLost,</div>
-<div class="line"><a name="l09590"></a><span class="lineno"> 9590</span>&#160;    uint32_t strategy,</div>
-<div class="line"><a name="l09591"></a><span class="lineno"> 9591</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
-<div class="line"><a name="l09592"></a><span class="lineno"> 9592</span>&#160;{</div>
-<div class="line"><a name="l09593"></a><span class="lineno"> 9593</span>&#160;    VMA_ASSERT(allocSize &gt; 0);</div>
-<div class="line"><a name="l09594"></a><span class="lineno"> 9594</span>&#160;    VMA_ASSERT(!upperAddress);</div>
-<div class="line"><a name="l09595"></a><span class="lineno"> 9595</span>&#160;    VMA_ASSERT(allocType != VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l09596"></a><span class="lineno"> 9596</span>&#160;    VMA_ASSERT(pAllocationRequest != VMA_NULL);</div>
-<div class="line"><a name="l09597"></a><span class="lineno"> 9597</span>&#160;    VMA_HEAVY_ASSERT(Validate());</div>
-<div class="line"><a name="l09598"></a><span class="lineno"> 9598</span>&#160; </div>
-<div class="line"><a name="l09599"></a><span class="lineno"> 9599</span>&#160;    pAllocationRequest-&gt;type = VmaAllocationRequestType::Normal;</div>
-<div class="line"><a name="l09600"></a><span class="lineno"> 9600</span>&#160; </div>
-<div class="line"><a name="l09601"></a><span class="lineno"> 9601</span>&#160;    <span class="comment">// There is not enough total free space in this block to fullfill the request: Early return.</span></div>
-<div class="line"><a name="l09602"></a><span class="lineno"> 9602</span>&#160;    <span class="keywordflow">if</span>(canMakeOtherLost == <span class="keyword">false</span> &amp;&amp;</div>
-<div class="line"><a name="l09603"></a><span class="lineno"> 9603</span>&#160;        m_SumFreeSize &lt; allocSize + 2 * VMA_DEBUG_MARGIN)</div>
-<div class="line"><a name="l09604"></a><span class="lineno"> 9604</span>&#160;    {</div>
-<div class="line"><a name="l09605"></a><span class="lineno"> 9605</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l09606"></a><span class="lineno"> 9606</span>&#160;    }</div>
-<div class="line"><a name="l09607"></a><span class="lineno"> 9607</span>&#160; </div>
-<div class="line"><a name="l09608"></a><span class="lineno"> 9608</span>&#160;    <span class="comment">// New algorithm, efficiently searching freeSuballocationsBySize.</span></div>
-<div class="line"><a name="l09609"></a><span class="lineno"> 9609</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> freeSuballocCount = m_FreeSuballocationsBySize.size();</div>
-<div class="line"><a name="l09610"></a><span class="lineno"> 9610</span>&#160;    <span class="keywordflow">if</span>(freeSuballocCount &gt; 0)</div>
-<div class="line"><a name="l09611"></a><span class="lineno"> 9611</span>&#160;    {</div>
-<div class="line"><a name="l09612"></a><span class="lineno"> 9612</span>&#160;        <span class="keywordflow">if</span>(strategy == <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a>)</div>
-<div class="line"><a name="l09613"></a><span class="lineno"> 9613</span>&#160;        {</div>
-<div class="line"><a name="l09614"></a><span class="lineno"> 9614</span>&#160;            <span class="comment">// Find first free suballocation with size not less than allocSize + 2 * VMA_DEBUG_MARGIN.</span></div>
-<div class="line"><a name="l09615"></a><span class="lineno"> 9615</span>&#160;            VmaSuballocationList::iterator* <span class="keyword">const</span> it = VmaBinaryFindFirstNotLess(</div>
-<div class="line"><a name="l09616"></a><span class="lineno"> 9616</span>&#160;                m_FreeSuballocationsBySize.data(),</div>
-<div class="line"><a name="l09617"></a><span class="lineno"> 9617</span>&#160;                m_FreeSuballocationsBySize.data() + freeSuballocCount,</div>
-<div class="line"><a name="l09618"></a><span class="lineno"> 9618</span>&#160;                allocSize + 2 * VMA_DEBUG_MARGIN,</div>
-<div class="line"><a name="l09619"></a><span class="lineno"> 9619</span>&#160;                VmaSuballocationItemSizeLess());</div>
-<div class="line"><a name="l09620"></a><span class="lineno"> 9620</span>&#160;            <span class="keywordtype">size_t</span> index = it - m_FreeSuballocationsBySize.data();</div>
-<div class="line"><a name="l09621"></a><span class="lineno"> 9621</span>&#160;            <span class="keywordflow">for</span>(; index &lt; freeSuballocCount; ++index)</div>
-<div class="line"><a name="l09622"></a><span class="lineno"> 9622</span>&#160;            {</div>
-<div class="line"><a name="l09623"></a><span class="lineno"> 9623</span>&#160;                <span class="keywordflow">if</span>(CheckAllocation(</div>
-<div class="line"><a name="l09624"></a><span class="lineno"> 9624</span>&#160;                    currentFrameIndex,</div>
-<div class="line"><a name="l09625"></a><span class="lineno"> 9625</span>&#160;                    frameInUseCount,</div>
-<div class="line"><a name="l09626"></a><span class="lineno"> 9626</span>&#160;                    bufferImageGranularity,</div>
-<div class="line"><a name="l09627"></a><span class="lineno"> 9627</span>&#160;                    allocSize,</div>
-<div class="line"><a name="l09628"></a><span class="lineno"> 9628</span>&#160;                    allocAlignment,</div>
-<div class="line"><a name="l09629"></a><span class="lineno"> 9629</span>&#160;                    allocType,</div>
-<div class="line"><a name="l09630"></a><span class="lineno"> 9630</span>&#160;                    m_FreeSuballocationsBySize[index],</div>
-<div class="line"><a name="l09631"></a><span class="lineno"> 9631</span>&#160;                    <span class="keyword">false</span>, <span class="comment">// canMakeOtherLost</span></div>
-<div class="line"><a name="l09632"></a><span class="lineno"> 9632</span>&#160;                    &amp;pAllocationRequest-&gt;offset,</div>
-<div class="line"><a name="l09633"></a><span class="lineno"> 9633</span>&#160;                    &amp;pAllocationRequest-&gt;itemsToMakeLostCount,</div>
-<div class="line"><a name="l09634"></a><span class="lineno"> 9634</span>&#160;                    &amp;pAllocationRequest-&gt;sumFreeSize,</div>
-<div class="line"><a name="l09635"></a><span class="lineno"> 9635</span>&#160;                    &amp;pAllocationRequest-&gt;sumItemSize))</div>
-<div class="line"><a name="l09636"></a><span class="lineno"> 9636</span>&#160;                {</div>
-<div class="line"><a name="l09637"></a><span class="lineno"> 9637</span>&#160;                    pAllocationRequest-&gt;item = m_FreeSuballocationsBySize[index];</div>
-<div class="line"><a name="l09638"></a><span class="lineno"> 9638</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l09639"></a><span class="lineno"> 9639</span>&#160;                }</div>
-<div class="line"><a name="l09640"></a><span class="lineno"> 9640</span>&#160;            }</div>
-<div class="line"><a name="l09641"></a><span class="lineno"> 9641</span>&#160;        }</div>
-<div class="line"><a name="l09642"></a><span class="lineno"> 9642</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strategy == VMA_ALLOCATION_INTERNAL_STRATEGY_MIN_OFFSET)</div>
-<div class="line"><a name="l09643"></a><span class="lineno"> 9643</span>&#160;        {</div>
-<div class="line"><a name="l09644"></a><span class="lineno"> 9644</span>&#160;            <span class="keywordflow">for</span>(VmaSuballocationList::iterator it = m_Suballocations.begin();</div>
-<div class="line"><a name="l09645"></a><span class="lineno"> 9645</span>&#160;                it != m_Suballocations.end();</div>
-<div class="line"><a name="l09646"></a><span class="lineno"> 9646</span>&#160;                ++it)</div>
-<div class="line"><a name="l09647"></a><span class="lineno"> 9647</span>&#160;            {</div>
-<div class="line"><a name="l09648"></a><span class="lineno"> 9648</span>&#160;                <span class="keywordflow">if</span>(it-&gt;type == VMA_SUBALLOCATION_TYPE_FREE &amp;&amp; CheckAllocation(</div>
-<div class="line"><a name="l09649"></a><span class="lineno"> 9649</span>&#160;                    currentFrameIndex,</div>
-<div class="line"><a name="l09650"></a><span class="lineno"> 9650</span>&#160;                    frameInUseCount,</div>
-<div class="line"><a name="l09651"></a><span class="lineno"> 9651</span>&#160;                    bufferImageGranularity,</div>
-<div class="line"><a name="l09652"></a><span class="lineno"> 9652</span>&#160;                    allocSize,</div>
-<div class="line"><a name="l09653"></a><span class="lineno"> 9653</span>&#160;                    allocAlignment,</div>
-<div class="line"><a name="l09654"></a><span class="lineno"> 9654</span>&#160;                    allocType,</div>
-<div class="line"><a name="l09655"></a><span class="lineno"> 9655</span>&#160;                    it,</div>
-<div class="line"><a name="l09656"></a><span class="lineno"> 9656</span>&#160;                    <span class="keyword">false</span>, <span class="comment">// canMakeOtherLost</span></div>
-<div class="line"><a name="l09657"></a><span class="lineno"> 9657</span>&#160;                    &amp;pAllocationRequest-&gt;offset,</div>
-<div class="line"><a name="l09658"></a><span class="lineno"> 9658</span>&#160;                    &amp;pAllocationRequest-&gt;itemsToMakeLostCount,</div>
-<div class="line"><a name="l09659"></a><span class="lineno"> 9659</span>&#160;                    &amp;pAllocationRequest-&gt;sumFreeSize,</div>
-<div class="line"><a name="l09660"></a><span class="lineno"> 9660</span>&#160;                    &amp;pAllocationRequest-&gt;sumItemSize))</div>
-<div class="line"><a name="l09661"></a><span class="lineno"> 9661</span>&#160;                {</div>
-<div class="line"><a name="l09662"></a><span class="lineno"> 9662</span>&#160;                    pAllocationRequest-&gt;item = it;</div>
-<div class="line"><a name="l09663"></a><span class="lineno"> 9663</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l09664"></a><span class="lineno"> 9664</span>&#160;                }</div>
-<div class="line"><a name="l09665"></a><span class="lineno"> 9665</span>&#160;            }</div>
-<div class="line"><a name="l09666"></a><span class="lineno"> 9666</span>&#160;        }</div>
-<div class="line"><a name="l09667"></a><span class="lineno"> 9667</span>&#160;        <span class="keywordflow">else</span> <span class="comment">// WORST_FIT, FIRST_FIT</span></div>
-<div class="line"><a name="l09668"></a><span class="lineno"> 9668</span>&#160;        {</div>
-<div class="line"><a name="l09669"></a><span class="lineno"> 9669</span>&#160;            <span class="comment">// Search staring from biggest suballocations.</span></div>
-<div class="line"><a name="l09670"></a><span class="lineno"> 9670</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> index = freeSuballocCount; index--; )</div>
-<div class="line"><a name="l09671"></a><span class="lineno"> 9671</span>&#160;            {</div>
-<div class="line"><a name="l09672"></a><span class="lineno"> 9672</span>&#160;                <span class="keywordflow">if</span>(CheckAllocation(</div>
-<div class="line"><a name="l09673"></a><span class="lineno"> 9673</span>&#160;                    currentFrameIndex,</div>
-<div class="line"><a name="l09674"></a><span class="lineno"> 9674</span>&#160;                    frameInUseCount,</div>
-<div class="line"><a name="l09675"></a><span class="lineno"> 9675</span>&#160;                    bufferImageGranularity,</div>
-<div class="line"><a name="l09676"></a><span class="lineno"> 9676</span>&#160;                    allocSize,</div>
-<div class="line"><a name="l09677"></a><span class="lineno"> 9677</span>&#160;                    allocAlignment,</div>
-<div class="line"><a name="l09678"></a><span class="lineno"> 9678</span>&#160;                    allocType,</div>
-<div class="line"><a name="l09679"></a><span class="lineno"> 9679</span>&#160;                    m_FreeSuballocationsBySize[index],</div>
-<div class="line"><a name="l09680"></a><span class="lineno"> 9680</span>&#160;                    <span class="keyword">false</span>, <span class="comment">// canMakeOtherLost</span></div>
-<div class="line"><a name="l09681"></a><span class="lineno"> 9681</span>&#160;                    &amp;pAllocationRequest-&gt;offset,</div>
-<div class="line"><a name="l09682"></a><span class="lineno"> 9682</span>&#160;                    &amp;pAllocationRequest-&gt;itemsToMakeLostCount,</div>
-<div class="line"><a name="l09683"></a><span class="lineno"> 9683</span>&#160;                    &amp;pAllocationRequest-&gt;sumFreeSize,</div>
-<div class="line"><a name="l09684"></a><span class="lineno"> 9684</span>&#160;                    &amp;pAllocationRequest-&gt;sumItemSize))</div>
-<div class="line"><a name="l09685"></a><span class="lineno"> 9685</span>&#160;                {</div>
-<div class="line"><a name="l09686"></a><span class="lineno"> 9686</span>&#160;                    pAllocationRequest-&gt;item = m_FreeSuballocationsBySize[index];</div>
-<div class="line"><a name="l09687"></a><span class="lineno"> 9687</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l09688"></a><span class="lineno"> 9688</span>&#160;                }</div>
-<div class="line"><a name="l09689"></a><span class="lineno"> 9689</span>&#160;            }</div>
-<div class="line"><a name="l09690"></a><span class="lineno"> 9690</span>&#160;        }</div>
-<div class="line"><a name="l09691"></a><span class="lineno"> 9691</span>&#160;    }</div>
-<div class="line"><a name="l09692"></a><span class="lineno"> 9692</span>&#160; </div>
-<div class="line"><a name="l09693"></a><span class="lineno"> 9693</span>&#160;    <span class="keywordflow">if</span>(canMakeOtherLost)</div>
-<div class="line"><a name="l09694"></a><span class="lineno"> 9694</span>&#160;    {</div>
-<div class="line"><a name="l09695"></a><span class="lineno"> 9695</span>&#160;        <span class="comment">// Brute-force algorithm. TODO: Come up with something better.</span></div>
-<div class="line"><a name="l09696"></a><span class="lineno"> 9696</span>&#160; </div>
-<div class="line"><a name="l09697"></a><span class="lineno"> 9697</span>&#160;        <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l09698"></a><span class="lineno"> 9698</span>&#160;        VmaAllocationRequest tmpAllocRequest = {};</div>
-<div class="line"><a name="l09699"></a><span class="lineno"> 9699</span>&#160;        tmpAllocRequest.type = VmaAllocationRequestType::Normal;</div>
-<div class="line"><a name="l09700"></a><span class="lineno"> 9700</span>&#160;        <span class="keywordflow">for</span>(VmaSuballocationList::iterator suballocIt = m_Suballocations.begin();</div>
-<div class="line"><a name="l09701"></a><span class="lineno"> 9701</span>&#160;            suballocIt != m_Suballocations.end();</div>
-<div class="line"><a name="l09702"></a><span class="lineno"> 9702</span>&#160;            ++suballocIt)</div>
-<div class="line"><a name="l09703"></a><span class="lineno"> 9703</span>&#160;        {</div>
-<div class="line"><a name="l09704"></a><span class="lineno"> 9704</span>&#160;            <span class="keywordflow">if</span>(suballocIt-&gt;type == VMA_SUBALLOCATION_TYPE_FREE ||</div>
-<div class="line"><a name="l09705"></a><span class="lineno"> 9705</span>&#160;                suballocIt-&gt;hAllocation-&gt;CanBecomeLost())</div>
-<div class="line"><a name="l09706"></a><span class="lineno"> 9706</span>&#160;            {</div>
-<div class="line"><a name="l09707"></a><span class="lineno"> 9707</span>&#160;                <span class="keywordflow">if</span>(CheckAllocation(</div>
-<div class="line"><a name="l09708"></a><span class="lineno"> 9708</span>&#160;                    currentFrameIndex,</div>
-<div class="line"><a name="l09709"></a><span class="lineno"> 9709</span>&#160;                    frameInUseCount,</div>
-<div class="line"><a name="l09710"></a><span class="lineno"> 9710</span>&#160;                    bufferImageGranularity,</div>
-<div class="line"><a name="l09711"></a><span class="lineno"> 9711</span>&#160;                    allocSize,</div>
-<div class="line"><a name="l09712"></a><span class="lineno"> 9712</span>&#160;                    allocAlignment,</div>
-<div class="line"><a name="l09713"></a><span class="lineno"> 9713</span>&#160;                    allocType,</div>
-<div class="line"><a name="l09714"></a><span class="lineno"> 9714</span>&#160;                    suballocIt,</div>
-<div class="line"><a name="l09715"></a><span class="lineno"> 9715</span>&#160;                    canMakeOtherLost,</div>
-<div class="line"><a name="l09716"></a><span class="lineno"> 9716</span>&#160;                    &amp;tmpAllocRequest.offset,</div>
-<div class="line"><a name="l09717"></a><span class="lineno"> 9717</span>&#160;                    &amp;tmpAllocRequest.itemsToMakeLostCount,</div>
-<div class="line"><a name="l09718"></a><span class="lineno"> 9718</span>&#160;                    &amp;tmpAllocRequest.sumFreeSize,</div>
-<div class="line"><a name="l09719"></a><span class="lineno"> 9719</span>&#160;                    &amp;tmpAllocRequest.sumItemSize))</div>
-<div class="line"><a name="l09720"></a><span class="lineno"> 9720</span>&#160;                {</div>
-<div class="line"><a name="l09721"></a><span class="lineno"> 9721</span>&#160;                    <span class="keywordflow">if</span>(strategy == <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a>)</div>
-<div class="line"><a name="l09722"></a><span class="lineno"> 9722</span>&#160;                    {</div>
-<div class="line"><a name="l09723"></a><span class="lineno"> 9723</span>&#160;                        *pAllocationRequest = tmpAllocRequest;</div>
-<div class="line"><a name="l09724"></a><span class="lineno"> 9724</span>&#160;                        pAllocationRequest-&gt;item = suballocIt;</div>
-<div class="line"><a name="l09725"></a><span class="lineno"> 9725</span>&#160;                        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l09726"></a><span class="lineno"> 9726</span>&#160;                    }</div>
-<div class="line"><a name="l09727"></a><span class="lineno"> 9727</span>&#160;                    <span class="keywordflow">if</span>(!found || tmpAllocRequest.CalcCost() &lt; pAllocationRequest-&gt;CalcCost())</div>
-<div class="line"><a name="l09728"></a><span class="lineno"> 9728</span>&#160;                    {</div>
-<div class="line"><a name="l09729"></a><span class="lineno"> 9729</span>&#160;                        *pAllocationRequest = tmpAllocRequest;</div>
-<div class="line"><a name="l09730"></a><span class="lineno"> 9730</span>&#160;                        pAllocationRequest-&gt;item = suballocIt;</div>
-<div class="line"><a name="l09731"></a><span class="lineno"> 9731</span>&#160;                        found = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l09732"></a><span class="lineno"> 9732</span>&#160;                    }</div>
-<div class="line"><a name="l09733"></a><span class="lineno"> 9733</span>&#160;                }</div>
-<div class="line"><a name="l09734"></a><span class="lineno"> 9734</span>&#160;            }</div>
-<div class="line"><a name="l09735"></a><span class="lineno"> 9735</span>&#160;        }</div>
-<div class="line"><a name="l09736"></a><span class="lineno"> 9736</span>&#160; </div>
-<div class="line"><a name="l09737"></a><span class="lineno"> 9737</span>&#160;        <span class="keywordflow">return</span> found;</div>
-<div class="line"><a name="l09738"></a><span class="lineno"> 9738</span>&#160;    }</div>
-<div class="line"><a name="l09739"></a><span class="lineno"> 9739</span>&#160; </div>
-<div class="line"><a name="l09740"></a><span class="lineno"> 9740</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l09741"></a><span class="lineno"> 9741</span>&#160;}</div>
-<div class="line"><a name="l09742"></a><span class="lineno"> 9742</span>&#160; </div>
-<div class="line"><a name="l09743"></a><span class="lineno"> 9743</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Generic::MakeRequestedAllocationsLost(</div>
-<div class="line"><a name="l09744"></a><span class="lineno"> 9744</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l09745"></a><span class="lineno"> 9745</span>&#160;    uint32_t frameInUseCount,</div>
-<div class="line"><a name="l09746"></a><span class="lineno"> 9746</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
-<div class="line"><a name="l09747"></a><span class="lineno"> 9747</span>&#160;{</div>
-<div class="line"><a name="l09748"></a><span class="lineno"> 9748</span>&#160;    VMA_ASSERT(pAllocationRequest &amp;&amp; pAllocationRequest-&gt;type == VmaAllocationRequestType::Normal);</div>
-<div class="line"><a name="l09749"></a><span class="lineno"> 9749</span>&#160; </div>
-<div class="line"><a name="l09750"></a><span class="lineno"> 9750</span>&#160;    <span class="keywordflow">while</span>(pAllocationRequest-&gt;itemsToMakeLostCount &gt; 0)</div>
-<div class="line"><a name="l09751"></a><span class="lineno"> 9751</span>&#160;    {</div>
-<div class="line"><a name="l09752"></a><span class="lineno"> 9752</span>&#160;        <span class="keywordflow">if</span>(pAllocationRequest-&gt;item-&gt;type == VMA_SUBALLOCATION_TYPE_FREE)</div>
-<div class="line"><a name="l09753"></a><span class="lineno"> 9753</span>&#160;        {</div>
-<div class="line"><a name="l09754"></a><span class="lineno"> 9754</span>&#160;            ++pAllocationRequest-&gt;item;</div>
-<div class="line"><a name="l09755"></a><span class="lineno"> 9755</span>&#160;        }</div>
-<div class="line"><a name="l09756"></a><span class="lineno"> 9756</span>&#160;        VMA_ASSERT(pAllocationRequest-&gt;item != m_Suballocations.end());</div>
-<div class="line"><a name="l09757"></a><span class="lineno"> 9757</span>&#160;        VMA_ASSERT(pAllocationRequest-&gt;item-&gt;hAllocation != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l09758"></a><span class="lineno"> 9758</span>&#160;        VMA_ASSERT(pAllocationRequest-&gt;item-&gt;hAllocation-&gt;CanBecomeLost());</div>
-<div class="line"><a name="l09759"></a><span class="lineno"> 9759</span>&#160;        <span class="keywordflow">if</span>(pAllocationRequest-&gt;item-&gt;hAllocation-&gt;MakeLost(currentFrameIndex, frameInUseCount))</div>
-<div class="line"><a name="l09760"></a><span class="lineno"> 9760</span>&#160;        {</div>
-<div class="line"><a name="l09761"></a><span class="lineno"> 9761</span>&#160;            pAllocationRequest-&gt;item = FreeSuballocation(pAllocationRequest-&gt;item);</div>
-<div class="line"><a name="l09762"></a><span class="lineno"> 9762</span>&#160;            --pAllocationRequest-&gt;itemsToMakeLostCount;</div>
-<div class="line"><a name="l09763"></a><span class="lineno"> 9763</span>&#160;        }</div>
-<div class="line"><a name="l09764"></a><span class="lineno"> 9764</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l09765"></a><span class="lineno"> 9765</span>&#160;        {</div>
-<div class="line"><a name="l09766"></a><span class="lineno"> 9766</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l09767"></a><span class="lineno"> 9767</span>&#160;        }</div>
-<div class="line"><a name="l09768"></a><span class="lineno"> 9768</span>&#160;    }</div>
-<div class="line"><a name="l09769"></a><span class="lineno"> 9769</span>&#160; </div>
-<div class="line"><a name="l09770"></a><span class="lineno"> 9770</span>&#160;    VMA_HEAVY_ASSERT(Validate());</div>
-<div class="line"><a name="l09771"></a><span class="lineno"> 9771</span>&#160;    VMA_ASSERT(pAllocationRequest-&gt;item != m_Suballocations.end());</div>
-<div class="line"><a name="l09772"></a><span class="lineno"> 9772</span>&#160;    VMA_ASSERT(pAllocationRequest-&gt;item-&gt;type == VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l09773"></a><span class="lineno"> 9773</span>&#160; </div>
-<div class="line"><a name="l09774"></a><span class="lineno"> 9774</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l09775"></a><span class="lineno"> 9775</span>&#160;}</div>
-<div class="line"><a name="l09776"></a><span class="lineno"> 9776</span>&#160; </div>
-<div class="line"><a name="l09777"></a><span class="lineno"> 9777</span>&#160;uint32_t VmaBlockMetadata_Generic::MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount)</div>
-<div class="line"><a name="l09778"></a><span class="lineno"> 9778</span>&#160;{</div>
-<div class="line"><a name="l09779"></a><span class="lineno"> 9779</span>&#160;    uint32_t lostAllocationCount = 0;</div>
-<div class="line"><a name="l09780"></a><span class="lineno"> 9780</span>&#160;    <span class="keywordflow">for</span>(VmaSuballocationList::iterator it = m_Suballocations.begin();</div>
-<div class="line"><a name="l09781"></a><span class="lineno"> 9781</span>&#160;        it != m_Suballocations.end();</div>
-<div class="line"><a name="l09782"></a><span class="lineno"> 9782</span>&#160;        ++it)</div>
-<div class="line"><a name="l09783"></a><span class="lineno"> 9783</span>&#160;    {</div>
-<div class="line"><a name="l09784"></a><span class="lineno"> 9784</span>&#160;        <span class="keywordflow">if</span>(it-&gt;type != VMA_SUBALLOCATION_TYPE_FREE &amp;&amp;</div>
-<div class="line"><a name="l09785"></a><span class="lineno"> 9785</span>&#160;            it-&gt;hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
-<div class="line"><a name="l09786"></a><span class="lineno"> 9786</span>&#160;            it-&gt;hAllocation-&gt;MakeLost(currentFrameIndex, frameInUseCount))</div>
-<div class="line"><a name="l09787"></a><span class="lineno"> 9787</span>&#160;        {</div>
-<div class="line"><a name="l09788"></a><span class="lineno"> 9788</span>&#160;            it = FreeSuballocation(it);</div>
-<div class="line"><a name="l09789"></a><span class="lineno"> 9789</span>&#160;            ++lostAllocationCount;</div>
-<div class="line"><a name="l09790"></a><span class="lineno"> 9790</span>&#160;        }</div>
-<div class="line"><a name="l09791"></a><span class="lineno"> 9791</span>&#160;    }</div>
-<div class="line"><a name="l09792"></a><span class="lineno"> 9792</span>&#160;    <span class="keywordflow">return</span> lostAllocationCount;</div>
-<div class="line"><a name="l09793"></a><span class="lineno"> 9793</span>&#160;}</div>
-<div class="line"><a name="l09794"></a><span class="lineno"> 9794</span>&#160; </div>
-<div class="line"><a name="l09795"></a><span class="lineno"> 9795</span>&#160;VkResult VmaBlockMetadata_Generic::CheckCorruption(<span class="keyword">const</span> <span class="keywordtype">void</span>* pBlockData)</div>
-<div class="line"><a name="l09796"></a><span class="lineno"> 9796</span>&#160;{</div>
-<div class="line"><a name="l09797"></a><span class="lineno"> 9797</span>&#160;    <span class="keywordflow">for</span>(<span class="keyword">auto</span>&amp; suballoc : m_Suballocations)</div>
-<div class="line"><a name="l09798"></a><span class="lineno"> 9798</span>&#160;    {</div>
-<div class="line"><a name="l09799"></a><span class="lineno"> 9799</span>&#160;        <span class="keywordflow">if</span>(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)</div>
-<div class="line"><a name="l09800"></a><span class="lineno"> 9800</span>&#160;        {</div>
-<div class="line"><a name="l09801"></a><span class="lineno"> 9801</span>&#160;            <span class="keywordflow">if</span>(!VmaValidateMagicValue(pBlockData, suballoc.offset - VMA_DEBUG_MARGIN))</div>
-<div class="line"><a name="l09802"></a><span class="lineno"> 9802</span>&#160;            {</div>
-<div class="line"><a name="l09803"></a><span class="lineno"> 9803</span>&#160;                VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED BEFORE VALIDATED ALLOCATION!&quot;</span>);</div>
-<div class="line"><a name="l09804"></a><span class="lineno"> 9804</span>&#160;                <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
-<div class="line"><a name="l09805"></a><span class="lineno"> 9805</span>&#160;            }</div>
-<div class="line"><a name="l09806"></a><span class="lineno"> 9806</span>&#160;            <span class="keywordflow">if</span>(!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))</div>
-<div class="line"><a name="l09807"></a><span class="lineno"> 9807</span>&#160;            {</div>
-<div class="line"><a name="l09808"></a><span class="lineno"> 9808</span>&#160;                VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!&quot;</span>);</div>
-<div class="line"><a name="l09809"></a><span class="lineno"> 9809</span>&#160;                <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
-<div class="line"><a name="l09810"></a><span class="lineno"> 9810</span>&#160;            }</div>
-<div class="line"><a name="l09811"></a><span class="lineno"> 9811</span>&#160;        }</div>
-<div class="line"><a name="l09812"></a><span class="lineno"> 9812</span>&#160;    }</div>
-<div class="line"><a name="l09813"></a><span class="lineno"> 9813</span>&#160; </div>
-<div class="line"><a name="l09814"></a><span class="lineno"> 9814</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l09815"></a><span class="lineno"> 9815</span>&#160;}</div>
-<div class="line"><a name="l09816"></a><span class="lineno"> 9816</span>&#160; </div>
-<div class="line"><a name="l09817"></a><span class="lineno"> 9817</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Generic::Alloc(</div>
-<div class="line"><a name="l09818"></a><span class="lineno"> 9818</span>&#160;    <span class="keyword">const</span> VmaAllocationRequest&amp; request,</div>
-<div class="line"><a name="l09819"></a><span class="lineno"> 9819</span>&#160;    VmaSuballocationType type,</div>
-<div class="line"><a name="l09820"></a><span class="lineno"> 9820</span>&#160;    VkDeviceSize allocSize,</div>
-<div class="line"><a name="l09821"></a><span class="lineno"> 9821</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</div>
-<div class="line"><a name="l09822"></a><span class="lineno"> 9822</span>&#160;{</div>
-<div class="line"><a name="l09823"></a><span class="lineno"> 9823</span>&#160;    VMA_ASSERT(request.type == VmaAllocationRequestType::Normal);</div>
-<div class="line"><a name="l09824"></a><span class="lineno"> 9824</span>&#160;    VMA_ASSERT(request.item != m_Suballocations.end());</div>
-<div class="line"><a name="l09825"></a><span class="lineno"> 9825</span>&#160;    VmaSuballocation&amp; suballoc = *request.item;</div>
-<div class="line"><a name="l09826"></a><span class="lineno"> 9826</span>&#160;    <span class="comment">// Given suballocation is a free block.</span></div>
-<div class="line"><a name="l09827"></a><span class="lineno"> 9827</span>&#160;    VMA_ASSERT(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l09828"></a><span class="lineno"> 9828</span>&#160;    <span class="comment">// Given offset is inside this suballocation.</span></div>
-<div class="line"><a name="l09829"></a><span class="lineno"> 9829</span>&#160;    VMA_ASSERT(request.offset &gt;= suballoc.offset);</div>
-<div class="line"><a name="l09830"></a><span class="lineno"> 9830</span>&#160;    <span class="keyword">const</span> VkDeviceSize paddingBegin = request.offset - suballoc.offset;</div>
-<div class="line"><a name="l09831"></a><span class="lineno"> 9831</span>&#160;    VMA_ASSERT(suballoc.size &gt;= paddingBegin + allocSize);</div>
-<div class="line"><a name="l09832"></a><span class="lineno"> 9832</span>&#160;    <span class="keyword">const</span> VkDeviceSize paddingEnd = suballoc.size - paddingBegin - allocSize;</div>
-<div class="line"><a name="l09833"></a><span class="lineno"> 9833</span>&#160; </div>
-<div class="line"><a name="l09834"></a><span class="lineno"> 9834</span>&#160;    <span class="comment">// Unregister this free suballocation from m_FreeSuballocationsBySize and update</span></div>
-<div class="line"><a name="l09835"></a><span class="lineno"> 9835</span>&#160;    <span class="comment">// it to become used.</span></div>
-<div class="line"><a name="l09836"></a><span class="lineno"> 9836</span>&#160;    UnregisterFreeSuballocation(request.item);</div>
-<div class="line"><a name="l09837"></a><span class="lineno"> 9837</span>&#160; </div>
-<div class="line"><a name="l09838"></a><span class="lineno"> 9838</span>&#160;    suballoc.offset = request.offset;</div>
-<div class="line"><a name="l09839"></a><span class="lineno"> 9839</span>&#160;    suballoc.size = allocSize;</div>
-<div class="line"><a name="l09840"></a><span class="lineno"> 9840</span>&#160;    suballoc.type = type;</div>
-<div class="line"><a name="l09841"></a><span class="lineno"> 9841</span>&#160;    suballoc.hAllocation = hAllocation;</div>
-<div class="line"><a name="l09842"></a><span class="lineno"> 9842</span>&#160; </div>
-<div class="line"><a name="l09843"></a><span class="lineno"> 9843</span>&#160;    <span class="comment">// If there are any free bytes remaining at the end, insert new free suballocation after current one.</span></div>
-<div class="line"><a name="l09844"></a><span class="lineno"> 9844</span>&#160;    <span class="keywordflow">if</span>(paddingEnd)</div>
-<div class="line"><a name="l09845"></a><span class="lineno"> 9845</span>&#160;    {</div>
-<div class="line"><a name="l09846"></a><span class="lineno"> 9846</span>&#160;        VmaSuballocation paddingSuballoc = {};</div>
-<div class="line"><a name="l09847"></a><span class="lineno"> 9847</span>&#160;        paddingSuballoc.offset = request.offset + allocSize;</div>
-<div class="line"><a name="l09848"></a><span class="lineno"> 9848</span>&#160;        paddingSuballoc.size = paddingEnd;</div>
-<div class="line"><a name="l09849"></a><span class="lineno"> 9849</span>&#160;        paddingSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE;</div>
-<div class="line"><a name="l09850"></a><span class="lineno"> 9850</span>&#160;        VmaSuballocationList::iterator next = request.item;</div>
-<div class="line"><a name="l09851"></a><span class="lineno"> 9851</span>&#160;        ++next;</div>
-<div class="line"><a name="l09852"></a><span class="lineno"> 9852</span>&#160;        <span class="keyword">const</span> VmaSuballocationList::iterator paddingEndItem =</div>
-<div class="line"><a name="l09853"></a><span class="lineno"> 9853</span>&#160;            m_Suballocations.insert(next, paddingSuballoc);</div>
-<div class="line"><a name="l09854"></a><span class="lineno"> 9854</span>&#160;        RegisterFreeSuballocation(paddingEndItem);</div>
-<div class="line"><a name="l09855"></a><span class="lineno"> 9855</span>&#160;    }</div>
-<div class="line"><a name="l09856"></a><span class="lineno"> 9856</span>&#160; </div>
-<div class="line"><a name="l09857"></a><span class="lineno"> 9857</span>&#160;    <span class="comment">// If there are any free bytes remaining at the beginning, insert new free suballocation before current one.</span></div>
-<div class="line"><a name="l09858"></a><span class="lineno"> 9858</span>&#160;    <span class="keywordflow">if</span>(paddingBegin)</div>
-<div class="line"><a name="l09859"></a><span class="lineno"> 9859</span>&#160;    {</div>
-<div class="line"><a name="l09860"></a><span class="lineno"> 9860</span>&#160;        VmaSuballocation paddingSuballoc = {};</div>
-<div class="line"><a name="l09861"></a><span class="lineno"> 9861</span>&#160;        paddingSuballoc.offset = request.offset - paddingBegin;</div>
-<div class="line"><a name="l09862"></a><span class="lineno"> 9862</span>&#160;        paddingSuballoc.size = paddingBegin;</div>
-<div class="line"><a name="l09863"></a><span class="lineno"> 9863</span>&#160;        paddingSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE;</div>
-<div class="line"><a name="l09864"></a><span class="lineno"> 9864</span>&#160;        <span class="keyword">const</span> VmaSuballocationList::iterator paddingBeginItem =</div>
-<div class="line"><a name="l09865"></a><span class="lineno"> 9865</span>&#160;            m_Suballocations.insert(request.item, paddingSuballoc);</div>
-<div class="line"><a name="l09866"></a><span class="lineno"> 9866</span>&#160;        RegisterFreeSuballocation(paddingBeginItem);</div>
-<div class="line"><a name="l09867"></a><span class="lineno"> 9867</span>&#160;    }</div>
-<div class="line"><a name="l09868"></a><span class="lineno"> 9868</span>&#160; </div>
-<div class="line"><a name="l09869"></a><span class="lineno"> 9869</span>&#160;    <span class="comment">// Update totals.</span></div>
-<div class="line"><a name="l09870"></a><span class="lineno"> 9870</span>&#160;    m_FreeCount = m_FreeCount - 1;</div>
-<div class="line"><a name="l09871"></a><span class="lineno"> 9871</span>&#160;    <span class="keywordflow">if</span>(paddingBegin &gt; 0)</div>
-<div class="line"><a name="l09872"></a><span class="lineno"> 9872</span>&#160;    {</div>
-<div class="line"><a name="l09873"></a><span class="lineno"> 9873</span>&#160;        ++m_FreeCount;</div>
-<div class="line"><a name="l09874"></a><span class="lineno"> 9874</span>&#160;    }</div>
-<div class="line"><a name="l09875"></a><span class="lineno"> 9875</span>&#160;    <span class="keywordflow">if</span>(paddingEnd &gt; 0)</div>
-<div class="line"><a name="l09876"></a><span class="lineno"> 9876</span>&#160;    {</div>
-<div class="line"><a name="l09877"></a><span class="lineno"> 9877</span>&#160;        ++m_FreeCount;</div>
-<div class="line"><a name="l09878"></a><span class="lineno"> 9878</span>&#160;    }</div>
-<div class="line"><a name="l09879"></a><span class="lineno"> 9879</span>&#160;    m_SumFreeSize -= allocSize;</div>
-<div class="line"><a name="l09880"></a><span class="lineno"> 9880</span>&#160;}</div>
-<div class="line"><a name="l09881"></a><span class="lineno"> 9881</span>&#160; </div>
-<div class="line"><a name="l09882"></a><span class="lineno"> 9882</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Generic::Free(<span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l09883"></a><span class="lineno"> 9883</span>&#160;{</div>
-<div class="line"><a name="l09884"></a><span class="lineno"> 9884</span>&#160;    <span class="keywordflow">for</span>(VmaSuballocationList::iterator suballocItem = m_Suballocations.begin();</div>
-<div class="line"><a name="l09885"></a><span class="lineno"> 9885</span>&#160;        suballocItem != m_Suballocations.end();</div>
-<div class="line"><a name="l09886"></a><span class="lineno"> 9886</span>&#160;        ++suballocItem)</div>
-<div class="line"><a name="l09887"></a><span class="lineno"> 9887</span>&#160;    {</div>
-<div class="line"><a name="l09888"></a><span class="lineno"> 9888</span>&#160;        VmaSuballocation&amp; suballoc = *suballocItem;</div>
-<div class="line"><a name="l09889"></a><span class="lineno"> 9889</span>&#160;        <span class="keywordflow">if</span>(suballoc.hAllocation == allocation)</div>
-<div class="line"><a name="l09890"></a><span class="lineno"> 9890</span>&#160;        {</div>
-<div class="line"><a name="l09891"></a><span class="lineno"> 9891</span>&#160;            FreeSuballocation(suballocItem);</div>
-<div class="line"><a name="l09892"></a><span class="lineno"> 9892</span>&#160;            VMA_HEAVY_ASSERT(Validate());</div>
-<div class="line"><a name="l09893"></a><span class="lineno"> 9893</span>&#160;            <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l09894"></a><span class="lineno"> 9894</span>&#160;        }</div>
-<div class="line"><a name="l09895"></a><span class="lineno"> 9895</span>&#160;    }</div>
-<div class="line"><a name="l09896"></a><span class="lineno"> 9896</span>&#160;    VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Not found!&quot;</span>);</div>
-<div class="line"><a name="l09897"></a><span class="lineno"> 9897</span>&#160;}</div>
-<div class="line"><a name="l09898"></a><span class="lineno"> 9898</span>&#160; </div>
-<div class="line"><a name="l09899"></a><span class="lineno"> 9899</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Generic::FreeAtOffset(VkDeviceSize offset)</div>
-<div class="line"><a name="l09900"></a><span class="lineno"> 9900</span>&#160;{</div>
-<div class="line"><a name="l09901"></a><span class="lineno"> 9901</span>&#160;    <span class="keywordflow">for</span>(VmaSuballocationList::iterator suballocItem = m_Suballocations.begin();</div>
-<div class="line"><a name="l09902"></a><span class="lineno"> 9902</span>&#160;        suballocItem != m_Suballocations.end();</div>
-<div class="line"><a name="l09903"></a><span class="lineno"> 9903</span>&#160;        ++suballocItem)</div>
-<div class="line"><a name="l09904"></a><span class="lineno"> 9904</span>&#160;    {</div>
-<div class="line"><a name="l09905"></a><span class="lineno"> 9905</span>&#160;        VmaSuballocation&amp; suballoc = *suballocItem;</div>
-<div class="line"><a name="l09906"></a><span class="lineno"> 9906</span>&#160;        <span class="keywordflow">if</span>(suballoc.offset == offset)</div>
-<div class="line"><a name="l09907"></a><span class="lineno"> 9907</span>&#160;        {</div>
-<div class="line"><a name="l09908"></a><span class="lineno"> 9908</span>&#160;            FreeSuballocation(suballocItem);</div>
-<div class="line"><a name="l09909"></a><span class="lineno"> 9909</span>&#160;            <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l09910"></a><span class="lineno"> 9910</span>&#160;        }</div>
-<div class="line"><a name="l09911"></a><span class="lineno"> 9911</span>&#160;    }</div>
-<div class="line"><a name="l09912"></a><span class="lineno"> 9912</span>&#160;    VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Not found!&quot;</span>);</div>
-<div class="line"><a name="l09913"></a><span class="lineno"> 9913</span>&#160;}</div>
-<div class="line"><a name="l09914"></a><span class="lineno"> 9914</span>&#160; </div>
-<div class="line"><a name="l09915"></a><span class="lineno"> 9915</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Generic::ValidateFreeSuballocationList()<span class="keyword"> const</span></div>
-<div class="line"><a name="l09916"></a><span class="lineno"> 9916</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l09917"></a><span class="lineno"> 9917</span>&#160;    VkDeviceSize lastSize = 0;</div>
-<div class="line"><a name="l09918"></a><span class="lineno"> 9918</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0, count = m_FreeSuballocationsBySize.size(); i &lt; count; ++i)</div>
-<div class="line"><a name="l09919"></a><span class="lineno"> 9919</span>&#160;    {</div>
-<div class="line"><a name="l09920"></a><span class="lineno"> 9920</span>&#160;        <span class="keyword">const</span> VmaSuballocationList::iterator it = m_FreeSuballocationsBySize[i];</div>
-<div class="line"><a name="l09921"></a><span class="lineno"> 9921</span>&#160; </div>
-<div class="line"><a name="l09922"></a><span class="lineno"> 9922</span>&#160;        VMA_VALIDATE(it-&gt;type == VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l09923"></a><span class="lineno"> 9923</span>&#160;        VMA_VALIDATE(it-&gt;size &gt;= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER);</div>
-<div class="line"><a name="l09924"></a><span class="lineno"> 9924</span>&#160;        VMA_VALIDATE(it-&gt;size &gt;= lastSize);</div>
-<div class="line"><a name="l09925"></a><span class="lineno"> 9925</span>&#160;        lastSize = it-&gt;size;</div>
-<div class="line"><a name="l09926"></a><span class="lineno"> 9926</span>&#160;    }</div>
-<div class="line"><a name="l09927"></a><span class="lineno"> 9927</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l09928"></a><span class="lineno"> 9928</span>&#160;}</div>
-<div class="line"><a name="l09929"></a><span class="lineno"> 9929</span>&#160; </div>
-<div class="line"><a name="l09930"></a><span class="lineno"> 9930</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Generic::CheckAllocation(</div>
-<div class="line"><a name="l09931"></a><span class="lineno"> 9931</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l09932"></a><span class="lineno"> 9932</span>&#160;    uint32_t frameInUseCount,</div>
-<div class="line"><a name="l09933"></a><span class="lineno"> 9933</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
-<div class="line"><a name="l09934"></a><span class="lineno"> 9934</span>&#160;    VkDeviceSize allocSize,</div>
-<div class="line"><a name="l09935"></a><span class="lineno"> 9935</span>&#160;    VkDeviceSize allocAlignment,</div>
-<div class="line"><a name="l09936"></a><span class="lineno"> 9936</span>&#160;    VmaSuballocationType allocType,</div>
-<div class="line"><a name="l09937"></a><span class="lineno"> 9937</span>&#160;    VmaSuballocationList::const_iterator suballocItem,</div>
-<div class="line"><a name="l09938"></a><span class="lineno"> 9938</span>&#160;    <span class="keywordtype">bool</span> canMakeOtherLost,</div>
-<div class="line"><a name="l09939"></a><span class="lineno"> 9939</span>&#160;    VkDeviceSize* pOffset,</div>
-<div class="line"><a name="l09940"></a><span class="lineno"> 9940</span>&#160;    <span class="keywordtype">size_t</span>* itemsToMakeLostCount,</div>
-<div class="line"><a name="l09941"></a><span class="lineno"> 9941</span>&#160;    VkDeviceSize* pSumFreeSize,</div>
-<div class="line"><a name="l09942"></a><span class="lineno"> 9942</span>&#160;    VkDeviceSize* pSumItemSize)<span class="keyword"> const</span></div>
-<div class="line"><a name="l09943"></a><span class="lineno"> 9943</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l09944"></a><span class="lineno"> 9944</span>&#160;    VMA_ASSERT(allocSize &gt; 0);</div>
-<div class="line"><a name="l09945"></a><span class="lineno"> 9945</span>&#160;    VMA_ASSERT(allocType != VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l09946"></a><span class="lineno"> 9946</span>&#160;    VMA_ASSERT(suballocItem != m_Suballocations.cend());</div>
-<div class="line"><a name="l09947"></a><span class="lineno"> 9947</span>&#160;    VMA_ASSERT(pOffset != VMA_NULL);</div>
-<div class="line"><a name="l09948"></a><span class="lineno"> 9948</span>&#160; </div>
-<div class="line"><a name="l09949"></a><span class="lineno"> 9949</span>&#160;    *itemsToMakeLostCount = 0;</div>
-<div class="line"><a name="l09950"></a><span class="lineno"> 9950</span>&#160;    *pSumFreeSize = 0;</div>
-<div class="line"><a name="l09951"></a><span class="lineno"> 9951</span>&#160;    *pSumItemSize = 0;</div>
-<div class="line"><a name="l09952"></a><span class="lineno"> 9952</span>&#160; </div>
-<div class="line"><a name="l09953"></a><span class="lineno"> 9953</span>&#160;    <span class="keywordflow">if</span>(canMakeOtherLost)</div>
-<div class="line"><a name="l09954"></a><span class="lineno"> 9954</span>&#160;    {</div>
-<div class="line"><a name="l09955"></a><span class="lineno"> 9955</span>&#160;        <span class="keywordflow">if</span>(suballocItem-&gt;type == VMA_SUBALLOCATION_TYPE_FREE)</div>
-<div class="line"><a name="l09956"></a><span class="lineno"> 9956</span>&#160;        {</div>
-<div class="line"><a name="l09957"></a><span class="lineno"> 9957</span>&#160;            *pSumFreeSize = suballocItem-&gt;size;</div>
-<div class="line"><a name="l09958"></a><span class="lineno"> 9958</span>&#160;        }</div>
-<div class="line"><a name="l09959"></a><span class="lineno"> 9959</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l09960"></a><span class="lineno"> 9960</span>&#160;        {</div>
-<div class="line"><a name="l09961"></a><span class="lineno"> 9961</span>&#160;            <span class="keywordflow">if</span>(suballocItem-&gt;hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
-<div class="line"><a name="l09962"></a><span class="lineno"> 9962</span>&#160;                suballocItem-&gt;hAllocation-&gt;GetLastUseFrameIndex() + frameInUseCount &lt; currentFrameIndex)</div>
-<div class="line"><a name="l09963"></a><span class="lineno"> 9963</span>&#160;            {</div>
-<div class="line"><a name="l09964"></a><span class="lineno"> 9964</span>&#160;                ++*itemsToMakeLostCount;</div>
-<div class="line"><a name="l09965"></a><span class="lineno"> 9965</span>&#160;                *pSumItemSize = suballocItem-&gt;size;</div>
-<div class="line"><a name="l09966"></a><span class="lineno"> 9966</span>&#160;            }</div>
-<div class="line"><a name="l09967"></a><span class="lineno"> 9967</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l09968"></a><span class="lineno"> 9968</span>&#160;            {</div>
-<div class="line"><a name="l09969"></a><span class="lineno"> 9969</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l09970"></a><span class="lineno"> 9970</span>&#160;            }</div>
-<div class="line"><a name="l09971"></a><span class="lineno"> 9971</span>&#160;        }</div>
-<div class="line"><a name="l09972"></a><span class="lineno"> 9972</span>&#160; </div>
-<div class="line"><a name="l09973"></a><span class="lineno"> 9973</span>&#160;        <span class="comment">// Remaining size is too small for this request: Early return.</span></div>
-<div class="line"><a name="l09974"></a><span class="lineno"> 9974</span>&#160;        <span class="keywordflow">if</span>(GetSize() - suballocItem-&gt;offset &lt; allocSize)</div>
-<div class="line"><a name="l09975"></a><span class="lineno"> 9975</span>&#160;        {</div>
-<div class="line"><a name="l09976"></a><span class="lineno"> 9976</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l09977"></a><span class="lineno"> 9977</span>&#160;        }</div>
-<div class="line"><a name="l09978"></a><span class="lineno"> 9978</span>&#160; </div>
-<div class="line"><a name="l09979"></a><span class="lineno"> 9979</span>&#160;        <span class="comment">// Start from offset equal to beginning of this suballocation.</span></div>
-<div class="line"><a name="l09980"></a><span class="lineno"> 9980</span>&#160;        *pOffset = suballocItem-&gt;offset;</div>
-<div class="line"><a name="l09981"></a><span class="lineno"> 9981</span>&#160; </div>
-<div class="line"><a name="l09982"></a><span class="lineno"> 9982</span>&#160;        <span class="comment">// Apply VMA_DEBUG_MARGIN at the beginning.</span></div>
-<div class="line"><a name="l09983"></a><span class="lineno"> 9983</span>&#160;        <span class="keywordflow">if</span>(VMA_DEBUG_MARGIN &gt; 0)</div>
-<div class="line"><a name="l09984"></a><span class="lineno"> 9984</span>&#160;        {</div>
-<div class="line"><a name="l09985"></a><span class="lineno"> 9985</span>&#160;            *pOffset += VMA_DEBUG_MARGIN;</div>
-<div class="line"><a name="l09986"></a><span class="lineno"> 9986</span>&#160;        }</div>
-<div class="line"><a name="l09987"></a><span class="lineno"> 9987</span>&#160; </div>
-<div class="line"><a name="l09988"></a><span class="lineno"> 9988</span>&#160;        <span class="comment">// Apply alignment.</span></div>
-<div class="line"><a name="l09989"></a><span class="lineno"> 9989</span>&#160;        *pOffset = VmaAlignUp(*pOffset, allocAlignment);</div>
-<div class="line"><a name="l09990"></a><span class="lineno"> 9990</span>&#160; </div>
-<div class="line"><a name="l09991"></a><span class="lineno"> 9991</span>&#160;        <span class="comment">// Check previous suballocations for BufferImageGranularity conflicts.</span></div>
-<div class="line"><a name="l09992"></a><span class="lineno"> 9992</span>&#160;        <span class="comment">// Make bigger alignment if necessary.</span></div>
-<div class="line"><a name="l09993"></a><span class="lineno"> 9993</span>&#160;        <span class="keywordflow">if</span>(bufferImageGranularity &gt; 1 &amp;&amp; bufferImageGranularity != allocAlignment)</div>
-<div class="line"><a name="l09994"></a><span class="lineno"> 9994</span>&#160;        {</div>
-<div class="line"><a name="l09995"></a><span class="lineno"> 9995</span>&#160;            <span class="keywordtype">bool</span> bufferImageGranularityConflict = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l09996"></a><span class="lineno"> 9996</span>&#160;            VmaSuballocationList::const_iterator prevSuballocItem = suballocItem;</div>
-<div class="line"><a name="l09997"></a><span class="lineno"> 9997</span>&#160;            <span class="keywordflow">while</span>(prevSuballocItem != m_Suballocations.cbegin())</div>
-<div class="line"><a name="l09998"></a><span class="lineno"> 9998</span>&#160;            {</div>
-<div class="line"><a name="l09999"></a><span class="lineno"> 9999</span>&#160;                --prevSuballocItem;</div>
-<div class="line"><a name="l10000"></a><span class="lineno">10000</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; prevSuballoc = *prevSuballocItem;</div>
-<div class="line"><a name="l10001"></a><span class="lineno">10001</span>&#160;                <span class="keywordflow">if</span>(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, *pOffset, bufferImageGranularity))</div>
-<div class="line"><a name="l10002"></a><span class="lineno">10002</span>&#160;                {</div>
-<div class="line"><a name="l10003"></a><span class="lineno">10003</span>&#160;                    <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))</div>
-<div class="line"><a name="l10004"></a><span class="lineno">10004</span>&#160;                    {</div>
-<div class="line"><a name="l10005"></a><span class="lineno">10005</span>&#160;                        bufferImageGranularityConflict = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l10006"></a><span class="lineno">10006</span>&#160;                        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l10007"></a><span class="lineno">10007</span>&#160;                    }</div>
-<div class="line"><a name="l10008"></a><span class="lineno">10008</span>&#160;                }</div>
-<div class="line"><a name="l10009"></a><span class="lineno">10009</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10010"></a><span class="lineno">10010</span>&#160;                    <span class="comment">// Already on previous page.</span></div>
-<div class="line"><a name="l10011"></a><span class="lineno">10011</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l10012"></a><span class="lineno">10012</span>&#160;            }</div>
-<div class="line"><a name="l10013"></a><span class="lineno">10013</span>&#160;            <span class="keywordflow">if</span>(bufferImageGranularityConflict)</div>
-<div class="line"><a name="l10014"></a><span class="lineno">10014</span>&#160;            {</div>
-<div class="line"><a name="l10015"></a><span class="lineno">10015</span>&#160;                *pOffset = VmaAlignUp(*pOffset, bufferImageGranularity);</div>
-<div class="line"><a name="l10016"></a><span class="lineno">10016</span>&#160;            }</div>
-<div class="line"><a name="l10017"></a><span class="lineno">10017</span>&#160;        }</div>
-<div class="line"><a name="l10018"></a><span class="lineno">10018</span>&#160; </div>
-<div class="line"><a name="l10019"></a><span class="lineno">10019</span>&#160;        <span class="comment">// Now that we have final *pOffset, check if we are past suballocItem.</span></div>
-<div class="line"><a name="l10020"></a><span class="lineno">10020</span>&#160;        <span class="comment">// If yes, return false - this function should be called for another suballocItem as starting point.</span></div>
-<div class="line"><a name="l10021"></a><span class="lineno">10021</span>&#160;        <span class="keywordflow">if</span>(*pOffset &gt;= suballocItem-&gt;offset + suballocItem-&gt;size)</div>
-<div class="line"><a name="l10022"></a><span class="lineno">10022</span>&#160;        {</div>
-<div class="line"><a name="l10023"></a><span class="lineno">10023</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l10024"></a><span class="lineno">10024</span>&#160;        }</div>
-<div class="line"><a name="l10025"></a><span class="lineno">10025</span>&#160; </div>
-<div class="line"><a name="l10026"></a><span class="lineno">10026</span>&#160;        <span class="comment">// Calculate padding at the beginning based on current offset.</span></div>
-<div class="line"><a name="l10027"></a><span class="lineno">10027</span>&#160;        <span class="keyword">const</span> VkDeviceSize paddingBegin = *pOffset - suballocItem-&gt;offset;</div>
-<div class="line"><a name="l10028"></a><span class="lineno">10028</span>&#160; </div>
-<div class="line"><a name="l10029"></a><span class="lineno">10029</span>&#160;        <span class="comment">// Calculate required margin at the end.</span></div>
-<div class="line"><a name="l10030"></a><span class="lineno">10030</span>&#160;        <span class="keyword">const</span> VkDeviceSize requiredEndMargin = VMA_DEBUG_MARGIN;</div>
-<div class="line"><a name="l10031"></a><span class="lineno">10031</span>&#160; </div>
-<div class="line"><a name="l10032"></a><span class="lineno">10032</span>&#160;        <span class="keyword">const</span> VkDeviceSize totalSize = paddingBegin + allocSize + requiredEndMargin;</div>
-<div class="line"><a name="l10033"></a><span class="lineno">10033</span>&#160;        <span class="comment">// Another early return check.</span></div>
-<div class="line"><a name="l10034"></a><span class="lineno">10034</span>&#160;        <span class="keywordflow">if</span>(suballocItem-&gt;offset + totalSize &gt; GetSize())</div>
-<div class="line"><a name="l10035"></a><span class="lineno">10035</span>&#160;        {</div>
-<div class="line"><a name="l10036"></a><span class="lineno">10036</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l10037"></a><span class="lineno">10037</span>&#160;        }</div>
-<div class="line"><a name="l10038"></a><span class="lineno">10038</span>&#160; </div>
-<div class="line"><a name="l10039"></a><span class="lineno">10039</span>&#160;        <span class="comment">// Advance lastSuballocItem until desired size is reached.</span></div>
-<div class="line"><a name="l10040"></a><span class="lineno">10040</span>&#160;        <span class="comment">// Update itemsToMakeLostCount.</span></div>
-<div class="line"><a name="l10041"></a><span class="lineno">10041</span>&#160;        VmaSuballocationList::const_iterator lastSuballocItem = suballocItem;</div>
-<div class="line"><a name="l10042"></a><span class="lineno">10042</span>&#160;        <span class="keywordflow">if</span>(totalSize &gt; suballocItem-&gt;size)</div>
-<div class="line"><a name="l10043"></a><span class="lineno">10043</span>&#160;        {</div>
-<div class="line"><a name="l10044"></a><span class="lineno">10044</span>&#160;            VkDeviceSize remainingSize = totalSize - suballocItem-&gt;size;</div>
-<div class="line"><a name="l10045"></a><span class="lineno">10045</span>&#160;            <span class="keywordflow">while</span>(remainingSize &gt; 0)</div>
-<div class="line"><a name="l10046"></a><span class="lineno">10046</span>&#160;            {</div>
-<div class="line"><a name="l10047"></a><span class="lineno">10047</span>&#160;                ++lastSuballocItem;</div>
-<div class="line"><a name="l10048"></a><span class="lineno">10048</span>&#160;                <span class="keywordflow">if</span>(lastSuballocItem == m_Suballocations.cend())</div>
-<div class="line"><a name="l10049"></a><span class="lineno">10049</span>&#160;                {</div>
-<div class="line"><a name="l10050"></a><span class="lineno">10050</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l10051"></a><span class="lineno">10051</span>&#160;                }</div>
-<div class="line"><a name="l10052"></a><span class="lineno">10052</span>&#160;                <span class="keywordflow">if</span>(lastSuballocItem-&gt;type == VMA_SUBALLOCATION_TYPE_FREE)</div>
-<div class="line"><a name="l10053"></a><span class="lineno">10053</span>&#160;                {</div>
-<div class="line"><a name="l10054"></a><span class="lineno">10054</span>&#160;                    *pSumFreeSize += lastSuballocItem-&gt;size;</div>
-<div class="line"><a name="l10055"></a><span class="lineno">10055</span>&#160;                }</div>
-<div class="line"><a name="l10056"></a><span class="lineno">10056</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10057"></a><span class="lineno">10057</span>&#160;                {</div>
-<div class="line"><a name="l10058"></a><span class="lineno">10058</span>&#160;                    VMA_ASSERT(lastSuballocItem-&gt;hAllocation != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l10059"></a><span class="lineno">10059</span>&#160;                    <span class="keywordflow">if</span>(lastSuballocItem-&gt;hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
-<div class="line"><a name="l10060"></a><span class="lineno">10060</span>&#160;                        lastSuballocItem-&gt;hAllocation-&gt;GetLastUseFrameIndex() + frameInUseCount &lt; currentFrameIndex)</div>
-<div class="line"><a name="l10061"></a><span class="lineno">10061</span>&#160;                    {</div>
-<div class="line"><a name="l10062"></a><span class="lineno">10062</span>&#160;                        ++*itemsToMakeLostCount;</div>
-<div class="line"><a name="l10063"></a><span class="lineno">10063</span>&#160;                        *pSumItemSize += lastSuballocItem-&gt;size;</div>
-<div class="line"><a name="l10064"></a><span class="lineno">10064</span>&#160;                    }</div>
-<div class="line"><a name="l10065"></a><span class="lineno">10065</span>&#160;                    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10066"></a><span class="lineno">10066</span>&#160;                    {</div>
-<div class="line"><a name="l10067"></a><span class="lineno">10067</span>&#160;                        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l10068"></a><span class="lineno">10068</span>&#160;                    }</div>
-<div class="line"><a name="l10069"></a><span class="lineno">10069</span>&#160;                }</div>
-<div class="line"><a name="l10070"></a><span class="lineno">10070</span>&#160;                remainingSize = (lastSuballocItem-&gt;size &lt; remainingSize) ?</div>
-<div class="line"><a name="l10071"></a><span class="lineno">10071</span>&#160;                    remainingSize - lastSuballocItem-&gt;size : 0;</div>
-<div class="line"><a name="l10072"></a><span class="lineno">10072</span>&#160;            }</div>
-<div class="line"><a name="l10073"></a><span class="lineno">10073</span>&#160;        }</div>
-<div class="line"><a name="l10074"></a><span class="lineno">10074</span>&#160; </div>
-<div class="line"><a name="l10075"></a><span class="lineno">10075</span>&#160;        <span class="comment">// Check next suballocations for BufferImageGranularity conflicts.</span></div>
-<div class="line"><a name="l10076"></a><span class="lineno">10076</span>&#160;        <span class="comment">// If conflict exists, we must mark more allocations lost or fail.</span></div>
-<div class="line"><a name="l10077"></a><span class="lineno">10077</span>&#160;        <span class="keywordflow">if</span>(allocSize % bufferImageGranularity || *pOffset % bufferImageGranularity)</div>
-<div class="line"><a name="l10078"></a><span class="lineno">10078</span>&#160;        {</div>
-<div class="line"><a name="l10079"></a><span class="lineno">10079</span>&#160;            VmaSuballocationList::const_iterator nextSuballocItem = lastSuballocItem;</div>
-<div class="line"><a name="l10080"></a><span class="lineno">10080</span>&#160;            ++nextSuballocItem;</div>
-<div class="line"><a name="l10081"></a><span class="lineno">10081</span>&#160;            <span class="keywordflow">while</span>(nextSuballocItem != m_Suballocations.cend())</div>
-<div class="line"><a name="l10082"></a><span class="lineno">10082</span>&#160;            {</div>
-<div class="line"><a name="l10083"></a><span class="lineno">10083</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; nextSuballoc = *nextSuballocItem;</div>
-<div class="line"><a name="l10084"></a><span class="lineno">10084</span>&#160;                <span class="keywordflow">if</span>(VmaBlocksOnSamePage(*pOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))</div>
-<div class="line"><a name="l10085"></a><span class="lineno">10085</span>&#160;                {</div>
-<div class="line"><a name="l10086"></a><span class="lineno">10086</span>&#160;                    <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))</div>
-<div class="line"><a name="l10087"></a><span class="lineno">10087</span>&#160;                    {</div>
-<div class="line"><a name="l10088"></a><span class="lineno">10088</span>&#160;                        VMA_ASSERT(nextSuballoc.hAllocation != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l10089"></a><span class="lineno">10089</span>&#160;                        <span class="keywordflow">if</span>(nextSuballoc.hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
-<div class="line"><a name="l10090"></a><span class="lineno">10090</span>&#160;                            nextSuballoc.hAllocation-&gt;GetLastUseFrameIndex() + frameInUseCount &lt; currentFrameIndex)</div>
-<div class="line"><a name="l10091"></a><span class="lineno">10091</span>&#160;                        {</div>
-<div class="line"><a name="l10092"></a><span class="lineno">10092</span>&#160;                            ++*itemsToMakeLostCount;</div>
-<div class="line"><a name="l10093"></a><span class="lineno">10093</span>&#160;                        }</div>
-<div class="line"><a name="l10094"></a><span class="lineno">10094</span>&#160;                        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10095"></a><span class="lineno">10095</span>&#160;                        {</div>
-<div class="line"><a name="l10096"></a><span class="lineno">10096</span>&#160;                            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l10097"></a><span class="lineno">10097</span>&#160;                        }</div>
-<div class="line"><a name="l10098"></a><span class="lineno">10098</span>&#160;                    }</div>
-<div class="line"><a name="l10099"></a><span class="lineno">10099</span>&#160;                }</div>
-<div class="line"><a name="l10100"></a><span class="lineno">10100</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10101"></a><span class="lineno">10101</span>&#160;                {</div>
-<div class="line"><a name="l10102"></a><span class="lineno">10102</span>&#160;                    <span class="comment">// Already on next page.</span></div>
-<div class="line"><a name="l10103"></a><span class="lineno">10103</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l10104"></a><span class="lineno">10104</span>&#160;                }</div>
-<div class="line"><a name="l10105"></a><span class="lineno">10105</span>&#160;                ++nextSuballocItem;</div>
-<div class="line"><a name="l10106"></a><span class="lineno">10106</span>&#160;            }</div>
-<div class="line"><a name="l10107"></a><span class="lineno">10107</span>&#160;        }</div>
-<div class="line"><a name="l10108"></a><span class="lineno">10108</span>&#160;    }</div>
-<div class="line"><a name="l10109"></a><span class="lineno">10109</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10110"></a><span class="lineno">10110</span>&#160;    {</div>
-<div class="line"><a name="l10111"></a><span class="lineno">10111</span>&#160;        <span class="keyword">const</span> VmaSuballocation&amp; suballoc = *suballocItem;</div>
-<div class="line"><a name="l10112"></a><span class="lineno">10112</span>&#160;        VMA_ASSERT(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l10113"></a><span class="lineno">10113</span>&#160; </div>
-<div class="line"><a name="l10114"></a><span class="lineno">10114</span>&#160;        *pSumFreeSize = suballoc.size;</div>
-<div class="line"><a name="l10115"></a><span class="lineno">10115</span>&#160; </div>
-<div class="line"><a name="l10116"></a><span class="lineno">10116</span>&#160;        <span class="comment">// Size of this suballocation is too small for this request: Early return.</span></div>
-<div class="line"><a name="l10117"></a><span class="lineno">10117</span>&#160;        <span class="keywordflow">if</span>(suballoc.size &lt; allocSize)</div>
-<div class="line"><a name="l10118"></a><span class="lineno">10118</span>&#160;        {</div>
-<div class="line"><a name="l10119"></a><span class="lineno">10119</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l10120"></a><span class="lineno">10120</span>&#160;        }</div>
-<div class="line"><a name="l10121"></a><span class="lineno">10121</span>&#160; </div>
-<div class="line"><a name="l10122"></a><span class="lineno">10122</span>&#160;        <span class="comment">// Start from offset equal to beginning of this suballocation.</span></div>
-<div class="line"><a name="l10123"></a><span class="lineno">10123</span>&#160;        *pOffset = suballoc.offset;</div>
-<div class="line"><a name="l10124"></a><span class="lineno">10124</span>&#160; </div>
-<div class="line"><a name="l10125"></a><span class="lineno">10125</span>&#160;        <span class="comment">// Apply VMA_DEBUG_MARGIN at the beginning.</span></div>
-<div class="line"><a name="l10126"></a><span class="lineno">10126</span>&#160;        <span class="keywordflow">if</span>(VMA_DEBUG_MARGIN &gt; 0)</div>
-<div class="line"><a name="l10127"></a><span class="lineno">10127</span>&#160;        {</div>
-<div class="line"><a name="l10128"></a><span class="lineno">10128</span>&#160;            *pOffset += VMA_DEBUG_MARGIN;</div>
-<div class="line"><a name="l10129"></a><span class="lineno">10129</span>&#160;        }</div>
-<div class="line"><a name="l10130"></a><span class="lineno">10130</span>&#160; </div>
-<div class="line"><a name="l10131"></a><span class="lineno">10131</span>&#160;        <span class="comment">// Apply alignment.</span></div>
-<div class="line"><a name="l10132"></a><span class="lineno">10132</span>&#160;        *pOffset = VmaAlignUp(*pOffset, allocAlignment);</div>
-<div class="line"><a name="l10133"></a><span class="lineno">10133</span>&#160; </div>
-<div class="line"><a name="l10134"></a><span class="lineno">10134</span>&#160;        <span class="comment">// Check previous suballocations for BufferImageGranularity conflicts.</span></div>
-<div class="line"><a name="l10135"></a><span class="lineno">10135</span>&#160;        <span class="comment">// Make bigger alignment if necessary.</span></div>
-<div class="line"><a name="l10136"></a><span class="lineno">10136</span>&#160;        <span class="keywordflow">if</span>(bufferImageGranularity &gt; 1 &amp;&amp; bufferImageGranularity != allocAlignment)</div>
-<div class="line"><a name="l10137"></a><span class="lineno">10137</span>&#160;        {</div>
-<div class="line"><a name="l10138"></a><span class="lineno">10138</span>&#160;            <span class="keywordtype">bool</span> bufferImageGranularityConflict = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l10139"></a><span class="lineno">10139</span>&#160;            VmaSuballocationList::const_iterator prevSuballocItem = suballocItem;</div>
-<div class="line"><a name="l10140"></a><span class="lineno">10140</span>&#160;            <span class="keywordflow">while</span>(prevSuballocItem != m_Suballocations.cbegin())</div>
-<div class="line"><a name="l10141"></a><span class="lineno">10141</span>&#160;            {</div>
-<div class="line"><a name="l10142"></a><span class="lineno">10142</span>&#160;                --prevSuballocItem;</div>
-<div class="line"><a name="l10143"></a><span class="lineno">10143</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; prevSuballoc = *prevSuballocItem;</div>
-<div class="line"><a name="l10144"></a><span class="lineno">10144</span>&#160;                <span class="keywordflow">if</span>(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, *pOffset, bufferImageGranularity))</div>
-<div class="line"><a name="l10145"></a><span class="lineno">10145</span>&#160;                {</div>
-<div class="line"><a name="l10146"></a><span class="lineno">10146</span>&#160;                    <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))</div>
-<div class="line"><a name="l10147"></a><span class="lineno">10147</span>&#160;                    {</div>
-<div class="line"><a name="l10148"></a><span class="lineno">10148</span>&#160;                        bufferImageGranularityConflict = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l10149"></a><span class="lineno">10149</span>&#160;                        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l10150"></a><span class="lineno">10150</span>&#160;                    }</div>
-<div class="line"><a name="l10151"></a><span class="lineno">10151</span>&#160;                }</div>
-<div class="line"><a name="l10152"></a><span class="lineno">10152</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10153"></a><span class="lineno">10153</span>&#160;                    <span class="comment">// Already on previous page.</span></div>
-<div class="line"><a name="l10154"></a><span class="lineno">10154</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l10155"></a><span class="lineno">10155</span>&#160;            }</div>
-<div class="line"><a name="l10156"></a><span class="lineno">10156</span>&#160;            <span class="keywordflow">if</span>(bufferImageGranularityConflict)</div>
-<div class="line"><a name="l10157"></a><span class="lineno">10157</span>&#160;            {</div>
-<div class="line"><a name="l10158"></a><span class="lineno">10158</span>&#160;                *pOffset = VmaAlignUp(*pOffset, bufferImageGranularity);</div>
-<div class="line"><a name="l10159"></a><span class="lineno">10159</span>&#160;            }</div>
-<div class="line"><a name="l10160"></a><span class="lineno">10160</span>&#160;        }</div>
-<div class="line"><a name="l10161"></a><span class="lineno">10161</span>&#160; </div>
-<div class="line"><a name="l10162"></a><span class="lineno">10162</span>&#160;        <span class="comment">// Calculate padding at the beginning based on current offset.</span></div>
-<div class="line"><a name="l10163"></a><span class="lineno">10163</span>&#160;        <span class="keyword">const</span> VkDeviceSize paddingBegin = *pOffset - suballoc.offset;</div>
-<div class="line"><a name="l10164"></a><span class="lineno">10164</span>&#160; </div>
-<div class="line"><a name="l10165"></a><span class="lineno">10165</span>&#160;        <span class="comment">// Calculate required margin at the end.</span></div>
-<div class="line"><a name="l10166"></a><span class="lineno">10166</span>&#160;        <span class="keyword">const</span> VkDeviceSize requiredEndMargin = VMA_DEBUG_MARGIN;</div>
-<div class="line"><a name="l10167"></a><span class="lineno">10167</span>&#160; </div>
-<div class="line"><a name="l10168"></a><span class="lineno">10168</span>&#160;        <span class="comment">// Fail if requested size plus margin before and after is bigger than size of this suballocation.</span></div>
-<div class="line"><a name="l10169"></a><span class="lineno">10169</span>&#160;        <span class="keywordflow">if</span>(paddingBegin + allocSize + requiredEndMargin &gt; suballoc.size)</div>
-<div class="line"><a name="l10170"></a><span class="lineno">10170</span>&#160;        {</div>
-<div class="line"><a name="l10171"></a><span class="lineno">10171</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l10172"></a><span class="lineno">10172</span>&#160;        }</div>
-<div class="line"><a name="l10173"></a><span class="lineno">10173</span>&#160; </div>
-<div class="line"><a name="l10174"></a><span class="lineno">10174</span>&#160;        <span class="comment">// Check next suballocations for BufferImageGranularity conflicts.</span></div>
-<div class="line"><a name="l10175"></a><span class="lineno">10175</span>&#160;        <span class="comment">// If conflict exists, allocation cannot be made here.</span></div>
-<div class="line"><a name="l10176"></a><span class="lineno">10176</span>&#160;        <span class="keywordflow">if</span>(allocSize % bufferImageGranularity || *pOffset % bufferImageGranularity)</div>
-<div class="line"><a name="l10177"></a><span class="lineno">10177</span>&#160;        {</div>
-<div class="line"><a name="l10178"></a><span class="lineno">10178</span>&#160;            VmaSuballocationList::const_iterator nextSuballocItem = suballocItem;</div>
-<div class="line"><a name="l10179"></a><span class="lineno">10179</span>&#160;            ++nextSuballocItem;</div>
-<div class="line"><a name="l10180"></a><span class="lineno">10180</span>&#160;            <span class="keywordflow">while</span>(nextSuballocItem != m_Suballocations.cend())</div>
-<div class="line"><a name="l10181"></a><span class="lineno">10181</span>&#160;            {</div>
-<div class="line"><a name="l10182"></a><span class="lineno">10182</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; nextSuballoc = *nextSuballocItem;</div>
-<div class="line"><a name="l10183"></a><span class="lineno">10183</span>&#160;                <span class="keywordflow">if</span>(VmaBlocksOnSamePage(*pOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))</div>
-<div class="line"><a name="l10184"></a><span class="lineno">10184</span>&#160;                {</div>
-<div class="line"><a name="l10185"></a><span class="lineno">10185</span>&#160;                    <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))</div>
-<div class="line"><a name="l10186"></a><span class="lineno">10186</span>&#160;                    {</div>
-<div class="line"><a name="l10187"></a><span class="lineno">10187</span>&#160;                        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l10188"></a><span class="lineno">10188</span>&#160;                    }</div>
-<div class="line"><a name="l10189"></a><span class="lineno">10189</span>&#160;                }</div>
-<div class="line"><a name="l10190"></a><span class="lineno">10190</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10191"></a><span class="lineno">10191</span>&#160;                {</div>
-<div class="line"><a name="l10192"></a><span class="lineno">10192</span>&#160;                    <span class="comment">// Already on next page.</span></div>
-<div class="line"><a name="l10193"></a><span class="lineno">10193</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l10194"></a><span class="lineno">10194</span>&#160;                }</div>
-<div class="line"><a name="l10195"></a><span class="lineno">10195</span>&#160;                ++nextSuballocItem;</div>
-<div class="line"><a name="l10196"></a><span class="lineno">10196</span>&#160;            }</div>
-<div class="line"><a name="l10197"></a><span class="lineno">10197</span>&#160;        }</div>
-<div class="line"><a name="l10198"></a><span class="lineno">10198</span>&#160;    }</div>
-<div class="line"><a name="l10199"></a><span class="lineno">10199</span>&#160; </div>
-<div class="line"><a name="l10200"></a><span class="lineno">10200</span>&#160;    <span class="comment">// All tests passed: Success. pOffset is already filled.</span></div>
-<div class="line"><a name="l10201"></a><span class="lineno">10201</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l10202"></a><span class="lineno">10202</span>&#160;}</div>
-<div class="line"><a name="l10203"></a><span class="lineno">10203</span>&#160; </div>
-<div class="line"><a name="l10204"></a><span class="lineno">10204</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Generic::MergeFreeWithNext(VmaSuballocationList::iterator item)</div>
-<div class="line"><a name="l10205"></a><span class="lineno">10205</span>&#160;{</div>
-<div class="line"><a name="l10206"></a><span class="lineno">10206</span>&#160;    VMA_ASSERT(item != m_Suballocations.end());</div>
-<div class="line"><a name="l10207"></a><span class="lineno">10207</span>&#160;    VMA_ASSERT(item-&gt;type == VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l10208"></a><span class="lineno">10208</span>&#160; </div>
-<div class="line"><a name="l10209"></a><span class="lineno">10209</span>&#160;    VmaSuballocationList::iterator nextItem = item;</div>
-<div class="line"><a name="l10210"></a><span class="lineno">10210</span>&#160;    ++nextItem;</div>
-<div class="line"><a name="l10211"></a><span class="lineno">10211</span>&#160;    VMA_ASSERT(nextItem != m_Suballocations.end());</div>
-<div class="line"><a name="l10212"></a><span class="lineno">10212</span>&#160;    VMA_ASSERT(nextItem-&gt;type == VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l10213"></a><span class="lineno">10213</span>&#160; </div>
-<div class="line"><a name="l10214"></a><span class="lineno">10214</span>&#160;    item-&gt;size += nextItem-&gt;size;</div>
-<div class="line"><a name="l10215"></a><span class="lineno">10215</span>&#160;    --m_FreeCount;</div>
-<div class="line"><a name="l10216"></a><span class="lineno">10216</span>&#160;    m_Suballocations.erase(nextItem);</div>
-<div class="line"><a name="l10217"></a><span class="lineno">10217</span>&#160;}</div>
-<div class="line"><a name="l10218"></a><span class="lineno">10218</span>&#160; </div>
-<div class="line"><a name="l10219"></a><span class="lineno">10219</span>&#160;VmaSuballocationList::iterator VmaBlockMetadata_Generic::FreeSuballocation(VmaSuballocationList::iterator suballocItem)</div>
-<div class="line"><a name="l10220"></a><span class="lineno">10220</span>&#160;{</div>
-<div class="line"><a name="l10221"></a><span class="lineno">10221</span>&#160;    <span class="comment">// Change this suballocation to be marked as free.</span></div>
-<div class="line"><a name="l10222"></a><span class="lineno">10222</span>&#160;    VmaSuballocation&amp; suballoc = *suballocItem;</div>
-<div class="line"><a name="l10223"></a><span class="lineno">10223</span>&#160;    suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;</div>
-<div class="line"><a name="l10224"></a><span class="lineno">10224</span>&#160;    suballoc.hAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l10225"></a><span class="lineno">10225</span>&#160; </div>
-<div class="line"><a name="l10226"></a><span class="lineno">10226</span>&#160;    <span class="comment">// Update totals.</span></div>
-<div class="line"><a name="l10227"></a><span class="lineno">10227</span>&#160;    ++m_FreeCount;</div>
-<div class="line"><a name="l10228"></a><span class="lineno">10228</span>&#160;    m_SumFreeSize += suballoc.size;</div>
-<div class="line"><a name="l10229"></a><span class="lineno">10229</span>&#160; </div>
-<div class="line"><a name="l10230"></a><span class="lineno">10230</span>&#160;    <span class="comment">// Merge with previous and/or next suballocation if it&#39;s also free.</span></div>
-<div class="line"><a name="l10231"></a><span class="lineno">10231</span>&#160;    <span class="keywordtype">bool</span> mergeWithNext = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l10232"></a><span class="lineno">10232</span>&#160;    <span class="keywordtype">bool</span> mergeWithPrev = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l10233"></a><span class="lineno">10233</span>&#160; </div>
-<div class="line"><a name="l10234"></a><span class="lineno">10234</span>&#160;    VmaSuballocationList::iterator nextItem = suballocItem;</div>
-<div class="line"><a name="l10235"></a><span class="lineno">10235</span>&#160;    ++nextItem;</div>
-<div class="line"><a name="l10236"></a><span class="lineno">10236</span>&#160;    <span class="keywordflow">if</span>((nextItem != m_Suballocations.end()) &amp;&amp; (nextItem-&gt;type == VMA_SUBALLOCATION_TYPE_FREE))</div>
-<div class="line"><a name="l10237"></a><span class="lineno">10237</span>&#160;    {</div>
-<div class="line"><a name="l10238"></a><span class="lineno">10238</span>&#160;        mergeWithNext = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l10239"></a><span class="lineno">10239</span>&#160;    }</div>
-<div class="line"><a name="l10240"></a><span class="lineno">10240</span>&#160; </div>
-<div class="line"><a name="l10241"></a><span class="lineno">10241</span>&#160;    VmaSuballocationList::iterator prevItem = suballocItem;</div>
-<div class="line"><a name="l10242"></a><span class="lineno">10242</span>&#160;    <span class="keywordflow">if</span>(suballocItem != m_Suballocations.begin())</div>
-<div class="line"><a name="l10243"></a><span class="lineno">10243</span>&#160;    {</div>
-<div class="line"><a name="l10244"></a><span class="lineno">10244</span>&#160;        --prevItem;</div>
-<div class="line"><a name="l10245"></a><span class="lineno">10245</span>&#160;        <span class="keywordflow">if</span>(prevItem-&gt;type == VMA_SUBALLOCATION_TYPE_FREE)</div>
-<div class="line"><a name="l10246"></a><span class="lineno">10246</span>&#160;        {</div>
-<div class="line"><a name="l10247"></a><span class="lineno">10247</span>&#160;            mergeWithPrev = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l10248"></a><span class="lineno">10248</span>&#160;        }</div>
-<div class="line"><a name="l10249"></a><span class="lineno">10249</span>&#160;    }</div>
-<div class="line"><a name="l10250"></a><span class="lineno">10250</span>&#160; </div>
-<div class="line"><a name="l10251"></a><span class="lineno">10251</span>&#160;    <span class="keywordflow">if</span>(mergeWithNext)</div>
-<div class="line"><a name="l10252"></a><span class="lineno">10252</span>&#160;    {</div>
-<div class="line"><a name="l10253"></a><span class="lineno">10253</span>&#160;        UnregisterFreeSuballocation(nextItem);</div>
-<div class="line"><a name="l10254"></a><span class="lineno">10254</span>&#160;        MergeFreeWithNext(suballocItem);</div>
-<div class="line"><a name="l10255"></a><span class="lineno">10255</span>&#160;    }</div>
-<div class="line"><a name="l10256"></a><span class="lineno">10256</span>&#160; </div>
-<div class="line"><a name="l10257"></a><span class="lineno">10257</span>&#160;    <span class="keywordflow">if</span>(mergeWithPrev)</div>
-<div class="line"><a name="l10258"></a><span class="lineno">10258</span>&#160;    {</div>
-<div class="line"><a name="l10259"></a><span class="lineno">10259</span>&#160;        UnregisterFreeSuballocation(prevItem);</div>
-<div class="line"><a name="l10260"></a><span class="lineno">10260</span>&#160;        MergeFreeWithNext(prevItem);</div>
-<div class="line"><a name="l10261"></a><span class="lineno">10261</span>&#160;        RegisterFreeSuballocation(prevItem);</div>
-<div class="line"><a name="l10262"></a><span class="lineno">10262</span>&#160;        <span class="keywordflow">return</span> prevItem;</div>
-<div class="line"><a name="l10263"></a><span class="lineno">10263</span>&#160;    }</div>
-<div class="line"><a name="l10264"></a><span class="lineno">10264</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10265"></a><span class="lineno">10265</span>&#160;    {</div>
-<div class="line"><a name="l10266"></a><span class="lineno">10266</span>&#160;        RegisterFreeSuballocation(suballocItem);</div>
-<div class="line"><a name="l10267"></a><span class="lineno">10267</span>&#160;        <span class="keywordflow">return</span> suballocItem;</div>
-<div class="line"><a name="l10268"></a><span class="lineno">10268</span>&#160;    }</div>
-<div class="line"><a name="l10269"></a><span class="lineno">10269</span>&#160;}</div>
-<div class="line"><a name="l10270"></a><span class="lineno">10270</span>&#160; </div>
-<div class="line"><a name="l10271"></a><span class="lineno">10271</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Generic::RegisterFreeSuballocation(VmaSuballocationList::iterator item)</div>
-<div class="line"><a name="l10272"></a><span class="lineno">10272</span>&#160;{</div>
-<div class="line"><a name="l10273"></a><span class="lineno">10273</span>&#160;    VMA_ASSERT(item-&gt;type == VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l10274"></a><span class="lineno">10274</span>&#160;    VMA_ASSERT(item-&gt;size &gt; 0);</div>
-<div class="line"><a name="l10275"></a><span class="lineno">10275</span>&#160; </div>
-<div class="line"><a name="l10276"></a><span class="lineno">10276</span>&#160;    <span class="comment">// You may want to enable this validation at the beginning or at the end of</span></div>
-<div class="line"><a name="l10277"></a><span class="lineno">10277</span>&#160;    <span class="comment">// this function, depending on what do you want to check.</span></div>
-<div class="line"><a name="l10278"></a><span class="lineno">10278</span>&#160;    VMA_HEAVY_ASSERT(ValidateFreeSuballocationList());</div>
-<div class="line"><a name="l10279"></a><span class="lineno">10279</span>&#160; </div>
-<div class="line"><a name="l10280"></a><span class="lineno">10280</span>&#160;    <span class="keywordflow">if</span>(item-&gt;size &gt;= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)</div>
-<div class="line"><a name="l10281"></a><span class="lineno">10281</span>&#160;    {</div>
-<div class="line"><a name="l10282"></a><span class="lineno">10282</span>&#160;        <span class="keywordflow">if</span>(m_FreeSuballocationsBySize.empty())</div>
-<div class="line"><a name="l10283"></a><span class="lineno">10283</span>&#160;        {</div>
-<div class="line"><a name="l10284"></a><span class="lineno">10284</span>&#160;            m_FreeSuballocationsBySize.push_back(item);</div>
-<div class="line"><a name="l10285"></a><span class="lineno">10285</span>&#160;        }</div>
-<div class="line"><a name="l10286"></a><span class="lineno">10286</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10287"></a><span class="lineno">10287</span>&#160;        {</div>
-<div class="line"><a name="l10288"></a><span class="lineno">10288</span>&#160;            VmaVectorInsertSorted&lt;VmaSuballocationItemSizeLess&gt;(m_FreeSuballocationsBySize, item);</div>
-<div class="line"><a name="l10289"></a><span class="lineno">10289</span>&#160;        }</div>
-<div class="line"><a name="l10290"></a><span class="lineno">10290</span>&#160;    }</div>
-<div class="line"><a name="l10291"></a><span class="lineno">10291</span>&#160; </div>
-<div class="line"><a name="l10292"></a><span class="lineno">10292</span>&#160;    <span class="comment">//VMA_HEAVY_ASSERT(ValidateFreeSuballocationList());</span></div>
-<div class="line"><a name="l10293"></a><span class="lineno">10293</span>&#160;}</div>
+<div class="line"><a name="l09563"></a><span class="lineno"> 9563</span>&#160;    <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span>&amp; suballoc : m_Suballocations)</div>
+<div class="line"><a name="l09564"></a><span class="lineno"> 9564</span>&#160;    {</div>
+<div class="line"><a name="l09565"></a><span class="lineno"> 9565</span>&#160;        <span class="keywordflow">if</span>(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE)</div>
+<div class="line"><a name="l09566"></a><span class="lineno"> 9566</span>&#160;        {</div>
+<div class="line"><a name="l09567"></a><span class="lineno"> 9567</span>&#160;            PrintDetailedMap_UnusedRange(json, suballoc.offset, suballoc.size);</div>
+<div class="line"><a name="l09568"></a><span class="lineno"> 9568</span>&#160;        }</div>
+<div class="line"><a name="l09569"></a><span class="lineno"> 9569</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l09570"></a><span class="lineno"> 9570</span>&#160;        {</div>
+<div class="line"><a name="l09571"></a><span class="lineno"> 9571</span>&#160;            PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.hAllocation);</div>
+<div class="line"><a name="l09572"></a><span class="lineno"> 9572</span>&#160;        }</div>
+<div class="line"><a name="l09573"></a><span class="lineno"> 9573</span>&#160;    }</div>
+<div class="line"><a name="l09574"></a><span class="lineno"> 9574</span>&#160; </div>
+<div class="line"><a name="l09575"></a><span class="lineno"> 9575</span>&#160;    PrintDetailedMap_End(json);</div>
+<div class="line"><a name="l09576"></a><span class="lineno"> 9576</span>&#160;}</div>
+<div class="line"><a name="l09577"></a><span class="lineno"> 9577</span>&#160; </div>
+<div class="line"><a name="l09578"></a><span class="lineno"> 9578</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l09579"></a><span class="lineno"> 9579</span>&#160; </div>
+<div class="line"><a name="l09580"></a><span class="lineno"> 9580</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Generic::CreateAllocationRequest(</div>
+<div class="line"><a name="l09581"></a><span class="lineno"> 9581</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l09582"></a><span class="lineno"> 9582</span>&#160;    uint32_t frameInUseCount,</div>
+<div class="line"><a name="l09583"></a><span class="lineno"> 9583</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
+<div class="line"><a name="l09584"></a><span class="lineno"> 9584</span>&#160;    VkDeviceSize allocSize,</div>
+<div class="line"><a name="l09585"></a><span class="lineno"> 9585</span>&#160;    VkDeviceSize allocAlignment,</div>
+<div class="line"><a name="l09586"></a><span class="lineno"> 9586</span>&#160;    <span class="keywordtype">bool</span> upperAddress,</div>
+<div class="line"><a name="l09587"></a><span class="lineno"> 9587</span>&#160;    VmaSuballocationType allocType,</div>
+<div class="line"><a name="l09588"></a><span class="lineno"> 9588</span>&#160;    <span class="keywordtype">bool</span> canMakeOtherLost,</div>
+<div class="line"><a name="l09589"></a><span class="lineno"> 9589</span>&#160;    uint32_t strategy,</div>
+<div class="line"><a name="l09590"></a><span class="lineno"> 9590</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
+<div class="line"><a name="l09591"></a><span class="lineno"> 9591</span>&#160;{</div>
+<div class="line"><a name="l09592"></a><span class="lineno"> 9592</span>&#160;    VMA_ASSERT(allocSize &gt; 0);</div>
+<div class="line"><a name="l09593"></a><span class="lineno"> 9593</span>&#160;    VMA_ASSERT(!upperAddress);</div>
+<div class="line"><a name="l09594"></a><span class="lineno"> 9594</span>&#160;    VMA_ASSERT(allocType != VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l09595"></a><span class="lineno"> 9595</span>&#160;    VMA_ASSERT(pAllocationRequest != VMA_NULL);</div>
+<div class="line"><a name="l09596"></a><span class="lineno"> 9596</span>&#160;    VMA_HEAVY_ASSERT(Validate());</div>
+<div class="line"><a name="l09597"></a><span class="lineno"> 9597</span>&#160; </div>
+<div class="line"><a name="l09598"></a><span class="lineno"> 9598</span>&#160;    pAllocationRequest-&gt;type = VmaAllocationRequestType::Normal;</div>
+<div class="line"><a name="l09599"></a><span class="lineno"> 9599</span>&#160; </div>
+<div class="line"><a name="l09600"></a><span class="lineno"> 9600</span>&#160;    <span class="comment">// There is not enough total free space in this block to fullfill the request: Early return.</span></div>
+<div class="line"><a name="l09601"></a><span class="lineno"> 9601</span>&#160;    <span class="keywordflow">if</span>(canMakeOtherLost == <span class="keyword">false</span> &amp;&amp;</div>
+<div class="line"><a name="l09602"></a><span class="lineno"> 9602</span>&#160;        m_SumFreeSize &lt; allocSize + 2 * VMA_DEBUG_MARGIN)</div>
+<div class="line"><a name="l09603"></a><span class="lineno"> 9603</span>&#160;    {</div>
+<div class="line"><a name="l09604"></a><span class="lineno"> 9604</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l09605"></a><span class="lineno"> 9605</span>&#160;    }</div>
+<div class="line"><a name="l09606"></a><span class="lineno"> 9606</span>&#160; </div>
+<div class="line"><a name="l09607"></a><span class="lineno"> 9607</span>&#160;    <span class="comment">// New algorithm, efficiently searching freeSuballocationsBySize.</span></div>
+<div class="line"><a name="l09608"></a><span class="lineno"> 9608</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> freeSuballocCount = m_FreeSuballocationsBySize.size();</div>
+<div class="line"><a name="l09609"></a><span class="lineno"> 9609</span>&#160;    <span class="keywordflow">if</span>(freeSuballocCount &gt; 0)</div>
+<div class="line"><a name="l09610"></a><span class="lineno"> 9610</span>&#160;    {</div>
+<div class="line"><a name="l09611"></a><span class="lineno"> 9611</span>&#160;        <span class="keywordflow">if</span>(strategy == <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a>)</div>
+<div class="line"><a name="l09612"></a><span class="lineno"> 9612</span>&#160;        {</div>
+<div class="line"><a name="l09613"></a><span class="lineno"> 9613</span>&#160;            <span class="comment">// Find first free suballocation with size not less than allocSize + 2 * VMA_DEBUG_MARGIN.</span></div>
+<div class="line"><a name="l09614"></a><span class="lineno"> 9614</span>&#160;            VmaSuballocationList::iterator* <span class="keyword">const</span> it = VmaBinaryFindFirstNotLess(</div>
+<div class="line"><a name="l09615"></a><span class="lineno"> 9615</span>&#160;                m_FreeSuballocationsBySize.data(),</div>
+<div class="line"><a name="l09616"></a><span class="lineno"> 9616</span>&#160;                m_FreeSuballocationsBySize.data() + freeSuballocCount,</div>
+<div class="line"><a name="l09617"></a><span class="lineno"> 9617</span>&#160;                allocSize + 2 * VMA_DEBUG_MARGIN,</div>
+<div class="line"><a name="l09618"></a><span class="lineno"> 9618</span>&#160;                VmaSuballocationItemSizeLess());</div>
+<div class="line"><a name="l09619"></a><span class="lineno"> 9619</span>&#160;            <span class="keywordtype">size_t</span> index = it - m_FreeSuballocationsBySize.data();</div>
+<div class="line"><a name="l09620"></a><span class="lineno"> 9620</span>&#160;            <span class="keywordflow">for</span>(; index &lt; freeSuballocCount; ++index)</div>
+<div class="line"><a name="l09621"></a><span class="lineno"> 9621</span>&#160;            {</div>
+<div class="line"><a name="l09622"></a><span class="lineno"> 9622</span>&#160;                <span class="keywordflow">if</span>(CheckAllocation(</div>
+<div class="line"><a name="l09623"></a><span class="lineno"> 9623</span>&#160;                    currentFrameIndex,</div>
+<div class="line"><a name="l09624"></a><span class="lineno"> 9624</span>&#160;                    frameInUseCount,</div>
+<div class="line"><a name="l09625"></a><span class="lineno"> 9625</span>&#160;                    bufferImageGranularity,</div>
+<div class="line"><a name="l09626"></a><span class="lineno"> 9626</span>&#160;                    allocSize,</div>
+<div class="line"><a name="l09627"></a><span class="lineno"> 9627</span>&#160;                    allocAlignment,</div>
+<div class="line"><a name="l09628"></a><span class="lineno"> 9628</span>&#160;                    allocType,</div>
+<div class="line"><a name="l09629"></a><span class="lineno"> 9629</span>&#160;                    m_FreeSuballocationsBySize[index],</div>
+<div class="line"><a name="l09630"></a><span class="lineno"> 9630</span>&#160;                    <span class="keyword">false</span>, <span class="comment">// canMakeOtherLost</span></div>
+<div class="line"><a name="l09631"></a><span class="lineno"> 9631</span>&#160;                    &amp;pAllocationRequest-&gt;offset,</div>
+<div class="line"><a name="l09632"></a><span class="lineno"> 9632</span>&#160;                    &amp;pAllocationRequest-&gt;itemsToMakeLostCount,</div>
+<div class="line"><a name="l09633"></a><span class="lineno"> 9633</span>&#160;                    &amp;pAllocationRequest-&gt;sumFreeSize,</div>
+<div class="line"><a name="l09634"></a><span class="lineno"> 9634</span>&#160;                    &amp;pAllocationRequest-&gt;sumItemSize))</div>
+<div class="line"><a name="l09635"></a><span class="lineno"> 9635</span>&#160;                {</div>
+<div class="line"><a name="l09636"></a><span class="lineno"> 9636</span>&#160;                    pAllocationRequest-&gt;item = m_FreeSuballocationsBySize[index];</div>
+<div class="line"><a name="l09637"></a><span class="lineno"> 9637</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l09638"></a><span class="lineno"> 9638</span>&#160;                }</div>
+<div class="line"><a name="l09639"></a><span class="lineno"> 9639</span>&#160;            }</div>
+<div class="line"><a name="l09640"></a><span class="lineno"> 9640</span>&#160;        }</div>
+<div class="line"><a name="l09641"></a><span class="lineno"> 9641</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strategy == VMA_ALLOCATION_INTERNAL_STRATEGY_MIN_OFFSET)</div>
+<div class="line"><a name="l09642"></a><span class="lineno"> 9642</span>&#160;        {</div>
+<div class="line"><a name="l09643"></a><span class="lineno"> 9643</span>&#160;            <span class="keywordflow">for</span>(VmaSuballocationList::iterator it = m_Suballocations.begin();</div>
+<div class="line"><a name="l09644"></a><span class="lineno"> 9644</span>&#160;                it != m_Suballocations.end();</div>
+<div class="line"><a name="l09645"></a><span class="lineno"> 9645</span>&#160;                ++it)</div>
+<div class="line"><a name="l09646"></a><span class="lineno"> 9646</span>&#160;            {</div>
+<div class="line"><a name="l09647"></a><span class="lineno"> 9647</span>&#160;                <span class="keywordflow">if</span>(it-&gt;type == VMA_SUBALLOCATION_TYPE_FREE &amp;&amp; CheckAllocation(</div>
+<div class="line"><a name="l09648"></a><span class="lineno"> 9648</span>&#160;                    currentFrameIndex,</div>
+<div class="line"><a name="l09649"></a><span class="lineno"> 9649</span>&#160;                    frameInUseCount,</div>
+<div class="line"><a name="l09650"></a><span class="lineno"> 9650</span>&#160;                    bufferImageGranularity,</div>
+<div class="line"><a name="l09651"></a><span class="lineno"> 9651</span>&#160;                    allocSize,</div>
+<div class="line"><a name="l09652"></a><span class="lineno"> 9652</span>&#160;                    allocAlignment,</div>
+<div class="line"><a name="l09653"></a><span class="lineno"> 9653</span>&#160;                    allocType,</div>
+<div class="line"><a name="l09654"></a><span class="lineno"> 9654</span>&#160;                    it,</div>
+<div class="line"><a name="l09655"></a><span class="lineno"> 9655</span>&#160;                    <span class="keyword">false</span>, <span class="comment">// canMakeOtherLost</span></div>
+<div class="line"><a name="l09656"></a><span class="lineno"> 9656</span>&#160;                    &amp;pAllocationRequest-&gt;offset,</div>
+<div class="line"><a name="l09657"></a><span class="lineno"> 9657</span>&#160;                    &amp;pAllocationRequest-&gt;itemsToMakeLostCount,</div>
+<div class="line"><a name="l09658"></a><span class="lineno"> 9658</span>&#160;                    &amp;pAllocationRequest-&gt;sumFreeSize,</div>
+<div class="line"><a name="l09659"></a><span class="lineno"> 9659</span>&#160;                    &amp;pAllocationRequest-&gt;sumItemSize))</div>
+<div class="line"><a name="l09660"></a><span class="lineno"> 9660</span>&#160;                {</div>
+<div class="line"><a name="l09661"></a><span class="lineno"> 9661</span>&#160;                    pAllocationRequest-&gt;item = it;</div>
+<div class="line"><a name="l09662"></a><span class="lineno"> 9662</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l09663"></a><span class="lineno"> 9663</span>&#160;                }</div>
+<div class="line"><a name="l09664"></a><span class="lineno"> 9664</span>&#160;            }</div>
+<div class="line"><a name="l09665"></a><span class="lineno"> 9665</span>&#160;        }</div>
+<div class="line"><a name="l09666"></a><span class="lineno"> 9666</span>&#160;        <span class="keywordflow">else</span> <span class="comment">// WORST_FIT, FIRST_FIT</span></div>
+<div class="line"><a name="l09667"></a><span class="lineno"> 9667</span>&#160;        {</div>
+<div class="line"><a name="l09668"></a><span class="lineno"> 9668</span>&#160;            <span class="comment">// Search staring from biggest suballocations.</span></div>
+<div class="line"><a name="l09669"></a><span class="lineno"> 9669</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> index = freeSuballocCount; index--; )</div>
+<div class="line"><a name="l09670"></a><span class="lineno"> 9670</span>&#160;            {</div>
+<div class="line"><a name="l09671"></a><span class="lineno"> 9671</span>&#160;                <span class="keywordflow">if</span>(CheckAllocation(</div>
+<div class="line"><a name="l09672"></a><span class="lineno"> 9672</span>&#160;                    currentFrameIndex,</div>
+<div class="line"><a name="l09673"></a><span class="lineno"> 9673</span>&#160;                    frameInUseCount,</div>
+<div class="line"><a name="l09674"></a><span class="lineno"> 9674</span>&#160;                    bufferImageGranularity,</div>
+<div class="line"><a name="l09675"></a><span class="lineno"> 9675</span>&#160;                    allocSize,</div>
+<div class="line"><a name="l09676"></a><span class="lineno"> 9676</span>&#160;                    allocAlignment,</div>
+<div class="line"><a name="l09677"></a><span class="lineno"> 9677</span>&#160;                    allocType,</div>
+<div class="line"><a name="l09678"></a><span class="lineno"> 9678</span>&#160;                    m_FreeSuballocationsBySize[index],</div>
+<div class="line"><a name="l09679"></a><span class="lineno"> 9679</span>&#160;                    <span class="keyword">false</span>, <span class="comment">// canMakeOtherLost</span></div>
+<div class="line"><a name="l09680"></a><span class="lineno"> 9680</span>&#160;                    &amp;pAllocationRequest-&gt;offset,</div>
+<div class="line"><a name="l09681"></a><span class="lineno"> 9681</span>&#160;                    &amp;pAllocationRequest-&gt;itemsToMakeLostCount,</div>
+<div class="line"><a name="l09682"></a><span class="lineno"> 9682</span>&#160;                    &amp;pAllocationRequest-&gt;sumFreeSize,</div>
+<div class="line"><a name="l09683"></a><span class="lineno"> 9683</span>&#160;                    &amp;pAllocationRequest-&gt;sumItemSize))</div>
+<div class="line"><a name="l09684"></a><span class="lineno"> 9684</span>&#160;                {</div>
+<div class="line"><a name="l09685"></a><span class="lineno"> 9685</span>&#160;                    pAllocationRequest-&gt;item = m_FreeSuballocationsBySize[index];</div>
+<div class="line"><a name="l09686"></a><span class="lineno"> 9686</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l09687"></a><span class="lineno"> 9687</span>&#160;                }</div>
+<div class="line"><a name="l09688"></a><span class="lineno"> 9688</span>&#160;            }</div>
+<div class="line"><a name="l09689"></a><span class="lineno"> 9689</span>&#160;        }</div>
+<div class="line"><a name="l09690"></a><span class="lineno"> 9690</span>&#160;    }</div>
+<div class="line"><a name="l09691"></a><span class="lineno"> 9691</span>&#160; </div>
+<div class="line"><a name="l09692"></a><span class="lineno"> 9692</span>&#160;    <span class="keywordflow">if</span>(canMakeOtherLost)</div>
+<div class="line"><a name="l09693"></a><span class="lineno"> 9693</span>&#160;    {</div>
+<div class="line"><a name="l09694"></a><span class="lineno"> 9694</span>&#160;        <span class="comment">// Brute-force algorithm. TODO: Come up with something better.</span></div>
+<div class="line"><a name="l09695"></a><span class="lineno"> 9695</span>&#160; </div>
+<div class="line"><a name="l09696"></a><span class="lineno"> 9696</span>&#160;        <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l09697"></a><span class="lineno"> 9697</span>&#160;        VmaAllocationRequest tmpAllocRequest = {};</div>
+<div class="line"><a name="l09698"></a><span class="lineno"> 9698</span>&#160;        tmpAllocRequest.type = VmaAllocationRequestType::Normal;</div>
+<div class="line"><a name="l09699"></a><span class="lineno"> 9699</span>&#160;        <span class="keywordflow">for</span>(VmaSuballocationList::iterator suballocIt = m_Suballocations.begin();</div>
+<div class="line"><a name="l09700"></a><span class="lineno"> 9700</span>&#160;            suballocIt != m_Suballocations.end();</div>
+<div class="line"><a name="l09701"></a><span class="lineno"> 9701</span>&#160;            ++suballocIt)</div>
+<div class="line"><a name="l09702"></a><span class="lineno"> 9702</span>&#160;        {</div>
+<div class="line"><a name="l09703"></a><span class="lineno"> 9703</span>&#160;            <span class="keywordflow">if</span>(suballocIt-&gt;type == VMA_SUBALLOCATION_TYPE_FREE ||</div>
+<div class="line"><a name="l09704"></a><span class="lineno"> 9704</span>&#160;                suballocIt-&gt;hAllocation-&gt;CanBecomeLost())</div>
+<div class="line"><a name="l09705"></a><span class="lineno"> 9705</span>&#160;            {</div>
+<div class="line"><a name="l09706"></a><span class="lineno"> 9706</span>&#160;                <span class="keywordflow">if</span>(CheckAllocation(</div>
+<div class="line"><a name="l09707"></a><span class="lineno"> 9707</span>&#160;                    currentFrameIndex,</div>
+<div class="line"><a name="l09708"></a><span class="lineno"> 9708</span>&#160;                    frameInUseCount,</div>
+<div class="line"><a name="l09709"></a><span class="lineno"> 9709</span>&#160;                    bufferImageGranularity,</div>
+<div class="line"><a name="l09710"></a><span class="lineno"> 9710</span>&#160;                    allocSize,</div>
+<div class="line"><a name="l09711"></a><span class="lineno"> 9711</span>&#160;                    allocAlignment,</div>
+<div class="line"><a name="l09712"></a><span class="lineno"> 9712</span>&#160;                    allocType,</div>
+<div class="line"><a name="l09713"></a><span class="lineno"> 9713</span>&#160;                    suballocIt,</div>
+<div class="line"><a name="l09714"></a><span class="lineno"> 9714</span>&#160;                    canMakeOtherLost,</div>
+<div class="line"><a name="l09715"></a><span class="lineno"> 9715</span>&#160;                    &amp;tmpAllocRequest.offset,</div>
+<div class="line"><a name="l09716"></a><span class="lineno"> 9716</span>&#160;                    &amp;tmpAllocRequest.itemsToMakeLostCount,</div>
+<div class="line"><a name="l09717"></a><span class="lineno"> 9717</span>&#160;                    &amp;tmpAllocRequest.sumFreeSize,</div>
+<div class="line"><a name="l09718"></a><span class="lineno"> 9718</span>&#160;                    &amp;tmpAllocRequest.sumItemSize))</div>
+<div class="line"><a name="l09719"></a><span class="lineno"> 9719</span>&#160;                {</div>
+<div class="line"><a name="l09720"></a><span class="lineno"> 9720</span>&#160;                    <span class="keywordflow">if</span>(strategy == <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a>)</div>
+<div class="line"><a name="l09721"></a><span class="lineno"> 9721</span>&#160;                    {</div>
+<div class="line"><a name="l09722"></a><span class="lineno"> 9722</span>&#160;                        *pAllocationRequest = tmpAllocRequest;</div>
+<div class="line"><a name="l09723"></a><span class="lineno"> 9723</span>&#160;                        pAllocationRequest-&gt;item = suballocIt;</div>
+<div class="line"><a name="l09724"></a><span class="lineno"> 9724</span>&#160;                        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l09725"></a><span class="lineno"> 9725</span>&#160;                    }</div>
+<div class="line"><a name="l09726"></a><span class="lineno"> 9726</span>&#160;                    <span class="keywordflow">if</span>(!found || tmpAllocRequest.CalcCost() &lt; pAllocationRequest-&gt;CalcCost())</div>
+<div class="line"><a name="l09727"></a><span class="lineno"> 9727</span>&#160;                    {</div>
+<div class="line"><a name="l09728"></a><span class="lineno"> 9728</span>&#160;                        *pAllocationRequest = tmpAllocRequest;</div>
+<div class="line"><a name="l09729"></a><span class="lineno"> 9729</span>&#160;                        pAllocationRequest-&gt;item = suballocIt;</div>
+<div class="line"><a name="l09730"></a><span class="lineno"> 9730</span>&#160;                        found = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l09731"></a><span class="lineno"> 9731</span>&#160;                    }</div>
+<div class="line"><a name="l09732"></a><span class="lineno"> 9732</span>&#160;                }</div>
+<div class="line"><a name="l09733"></a><span class="lineno"> 9733</span>&#160;            }</div>
+<div class="line"><a name="l09734"></a><span class="lineno"> 9734</span>&#160;        }</div>
+<div class="line"><a name="l09735"></a><span class="lineno"> 9735</span>&#160; </div>
+<div class="line"><a name="l09736"></a><span class="lineno"> 9736</span>&#160;        <span class="keywordflow">return</span> found;</div>
+<div class="line"><a name="l09737"></a><span class="lineno"> 9737</span>&#160;    }</div>
+<div class="line"><a name="l09738"></a><span class="lineno"> 9738</span>&#160; </div>
+<div class="line"><a name="l09739"></a><span class="lineno"> 9739</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l09740"></a><span class="lineno"> 9740</span>&#160;}</div>
+<div class="line"><a name="l09741"></a><span class="lineno"> 9741</span>&#160; </div>
+<div class="line"><a name="l09742"></a><span class="lineno"> 9742</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Generic::MakeRequestedAllocationsLost(</div>
+<div class="line"><a name="l09743"></a><span class="lineno"> 9743</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l09744"></a><span class="lineno"> 9744</span>&#160;    uint32_t frameInUseCount,</div>
+<div class="line"><a name="l09745"></a><span class="lineno"> 9745</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
+<div class="line"><a name="l09746"></a><span class="lineno"> 9746</span>&#160;{</div>
+<div class="line"><a name="l09747"></a><span class="lineno"> 9747</span>&#160;    VMA_ASSERT(pAllocationRequest &amp;&amp; pAllocationRequest-&gt;type == VmaAllocationRequestType::Normal);</div>
+<div class="line"><a name="l09748"></a><span class="lineno"> 9748</span>&#160; </div>
+<div class="line"><a name="l09749"></a><span class="lineno"> 9749</span>&#160;    <span class="keywordflow">while</span>(pAllocationRequest-&gt;itemsToMakeLostCount &gt; 0)</div>
+<div class="line"><a name="l09750"></a><span class="lineno"> 9750</span>&#160;    {</div>
+<div class="line"><a name="l09751"></a><span class="lineno"> 9751</span>&#160;        <span class="keywordflow">if</span>(pAllocationRequest-&gt;item-&gt;type == VMA_SUBALLOCATION_TYPE_FREE)</div>
+<div class="line"><a name="l09752"></a><span class="lineno"> 9752</span>&#160;        {</div>
+<div class="line"><a name="l09753"></a><span class="lineno"> 9753</span>&#160;            ++pAllocationRequest-&gt;item;</div>
+<div class="line"><a name="l09754"></a><span class="lineno"> 9754</span>&#160;        }</div>
+<div class="line"><a name="l09755"></a><span class="lineno"> 9755</span>&#160;        VMA_ASSERT(pAllocationRequest-&gt;item != m_Suballocations.end());</div>
+<div class="line"><a name="l09756"></a><span class="lineno"> 9756</span>&#160;        VMA_ASSERT(pAllocationRequest-&gt;item-&gt;hAllocation != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l09757"></a><span class="lineno"> 9757</span>&#160;        VMA_ASSERT(pAllocationRequest-&gt;item-&gt;hAllocation-&gt;CanBecomeLost());</div>
+<div class="line"><a name="l09758"></a><span class="lineno"> 9758</span>&#160;        <span class="keywordflow">if</span>(pAllocationRequest-&gt;item-&gt;hAllocation-&gt;MakeLost(currentFrameIndex, frameInUseCount))</div>
+<div class="line"><a name="l09759"></a><span class="lineno"> 9759</span>&#160;        {</div>
+<div class="line"><a name="l09760"></a><span class="lineno"> 9760</span>&#160;            pAllocationRequest-&gt;item = FreeSuballocation(pAllocationRequest-&gt;item);</div>
+<div class="line"><a name="l09761"></a><span class="lineno"> 9761</span>&#160;            --pAllocationRequest-&gt;itemsToMakeLostCount;</div>
+<div class="line"><a name="l09762"></a><span class="lineno"> 9762</span>&#160;        }</div>
+<div class="line"><a name="l09763"></a><span class="lineno"> 9763</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l09764"></a><span class="lineno"> 9764</span>&#160;        {</div>
+<div class="line"><a name="l09765"></a><span class="lineno"> 9765</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l09766"></a><span class="lineno"> 9766</span>&#160;        }</div>
+<div class="line"><a name="l09767"></a><span class="lineno"> 9767</span>&#160;    }</div>
+<div class="line"><a name="l09768"></a><span class="lineno"> 9768</span>&#160; </div>
+<div class="line"><a name="l09769"></a><span class="lineno"> 9769</span>&#160;    VMA_HEAVY_ASSERT(Validate());</div>
+<div class="line"><a name="l09770"></a><span class="lineno"> 9770</span>&#160;    VMA_ASSERT(pAllocationRequest-&gt;item != m_Suballocations.end());</div>
+<div class="line"><a name="l09771"></a><span class="lineno"> 9771</span>&#160;    VMA_ASSERT(pAllocationRequest-&gt;item-&gt;type == VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l09772"></a><span class="lineno"> 9772</span>&#160; </div>
+<div class="line"><a name="l09773"></a><span class="lineno"> 9773</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l09774"></a><span class="lineno"> 9774</span>&#160;}</div>
+<div class="line"><a name="l09775"></a><span class="lineno"> 9775</span>&#160; </div>
+<div class="line"><a name="l09776"></a><span class="lineno"> 9776</span>&#160;uint32_t VmaBlockMetadata_Generic::MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount)</div>
+<div class="line"><a name="l09777"></a><span class="lineno"> 9777</span>&#160;{</div>
+<div class="line"><a name="l09778"></a><span class="lineno"> 9778</span>&#160;    uint32_t lostAllocationCount = 0;</div>
+<div class="line"><a name="l09779"></a><span class="lineno"> 9779</span>&#160;    <span class="keywordflow">for</span>(VmaSuballocationList::iterator it = m_Suballocations.begin();</div>
+<div class="line"><a name="l09780"></a><span class="lineno"> 9780</span>&#160;        it != m_Suballocations.end();</div>
+<div class="line"><a name="l09781"></a><span class="lineno"> 9781</span>&#160;        ++it)</div>
+<div class="line"><a name="l09782"></a><span class="lineno"> 9782</span>&#160;    {</div>
+<div class="line"><a name="l09783"></a><span class="lineno"> 9783</span>&#160;        <span class="keywordflow">if</span>(it-&gt;type != VMA_SUBALLOCATION_TYPE_FREE &amp;&amp;</div>
+<div class="line"><a name="l09784"></a><span class="lineno"> 9784</span>&#160;            it-&gt;hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
+<div class="line"><a name="l09785"></a><span class="lineno"> 9785</span>&#160;            it-&gt;hAllocation-&gt;MakeLost(currentFrameIndex, frameInUseCount))</div>
+<div class="line"><a name="l09786"></a><span class="lineno"> 9786</span>&#160;        {</div>
+<div class="line"><a name="l09787"></a><span class="lineno"> 9787</span>&#160;            it = FreeSuballocation(it);</div>
+<div class="line"><a name="l09788"></a><span class="lineno"> 9788</span>&#160;            ++lostAllocationCount;</div>
+<div class="line"><a name="l09789"></a><span class="lineno"> 9789</span>&#160;        }</div>
+<div class="line"><a name="l09790"></a><span class="lineno"> 9790</span>&#160;    }</div>
+<div class="line"><a name="l09791"></a><span class="lineno"> 9791</span>&#160;    <span class="keywordflow">return</span> lostAllocationCount;</div>
+<div class="line"><a name="l09792"></a><span class="lineno"> 9792</span>&#160;}</div>
+<div class="line"><a name="l09793"></a><span class="lineno"> 9793</span>&#160; </div>
+<div class="line"><a name="l09794"></a><span class="lineno"> 9794</span>&#160;VkResult VmaBlockMetadata_Generic::CheckCorruption(<span class="keyword">const</span> <span class="keywordtype">void</span>* pBlockData)</div>
+<div class="line"><a name="l09795"></a><span class="lineno"> 9795</span>&#160;{</div>
+<div class="line"><a name="l09796"></a><span class="lineno"> 9796</span>&#160;    <span class="keywordflow">for</span>(<span class="keyword">auto</span>&amp; suballoc : m_Suballocations)</div>
+<div class="line"><a name="l09797"></a><span class="lineno"> 9797</span>&#160;    {</div>
+<div class="line"><a name="l09798"></a><span class="lineno"> 9798</span>&#160;        <span class="keywordflow">if</span>(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)</div>
+<div class="line"><a name="l09799"></a><span class="lineno"> 9799</span>&#160;        {</div>
+<div class="line"><a name="l09800"></a><span class="lineno"> 9800</span>&#160;            <span class="keywordflow">if</span>(!VmaValidateMagicValue(pBlockData, suballoc.offset - VMA_DEBUG_MARGIN))</div>
+<div class="line"><a name="l09801"></a><span class="lineno"> 9801</span>&#160;            {</div>
+<div class="line"><a name="l09802"></a><span class="lineno"> 9802</span>&#160;                VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED BEFORE VALIDATED ALLOCATION!&quot;</span>);</div>
+<div class="line"><a name="l09803"></a><span class="lineno"> 9803</span>&#160;                <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
+<div class="line"><a name="l09804"></a><span class="lineno"> 9804</span>&#160;            }</div>
+<div class="line"><a name="l09805"></a><span class="lineno"> 9805</span>&#160;            <span class="keywordflow">if</span>(!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))</div>
+<div class="line"><a name="l09806"></a><span class="lineno"> 9806</span>&#160;            {</div>
+<div class="line"><a name="l09807"></a><span class="lineno"> 9807</span>&#160;                VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!&quot;</span>);</div>
+<div class="line"><a name="l09808"></a><span class="lineno"> 9808</span>&#160;                <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
+<div class="line"><a name="l09809"></a><span class="lineno"> 9809</span>&#160;            }</div>
+<div class="line"><a name="l09810"></a><span class="lineno"> 9810</span>&#160;        }</div>
+<div class="line"><a name="l09811"></a><span class="lineno"> 9811</span>&#160;    }</div>
+<div class="line"><a name="l09812"></a><span class="lineno"> 9812</span>&#160; </div>
+<div class="line"><a name="l09813"></a><span class="lineno"> 9813</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l09814"></a><span class="lineno"> 9814</span>&#160;}</div>
+<div class="line"><a name="l09815"></a><span class="lineno"> 9815</span>&#160; </div>
+<div class="line"><a name="l09816"></a><span class="lineno"> 9816</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Generic::Alloc(</div>
+<div class="line"><a name="l09817"></a><span class="lineno"> 9817</span>&#160;    <span class="keyword">const</span> VmaAllocationRequest&amp; request,</div>
+<div class="line"><a name="l09818"></a><span class="lineno"> 9818</span>&#160;    VmaSuballocationType type,</div>
+<div class="line"><a name="l09819"></a><span class="lineno"> 9819</span>&#160;    VkDeviceSize allocSize,</div>
+<div class="line"><a name="l09820"></a><span class="lineno"> 9820</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</div>
+<div class="line"><a name="l09821"></a><span class="lineno"> 9821</span>&#160;{</div>
+<div class="line"><a name="l09822"></a><span class="lineno"> 9822</span>&#160;    VMA_ASSERT(request.type == VmaAllocationRequestType::Normal);</div>
+<div class="line"><a name="l09823"></a><span class="lineno"> 9823</span>&#160;    VMA_ASSERT(request.item != m_Suballocations.end());</div>
+<div class="line"><a name="l09824"></a><span class="lineno"> 9824</span>&#160;    VmaSuballocation&amp; suballoc = *request.item;</div>
+<div class="line"><a name="l09825"></a><span class="lineno"> 9825</span>&#160;    <span class="comment">// Given suballocation is a free block.</span></div>
+<div class="line"><a name="l09826"></a><span class="lineno"> 9826</span>&#160;    VMA_ASSERT(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l09827"></a><span class="lineno"> 9827</span>&#160;    <span class="comment">// Given offset is inside this suballocation.</span></div>
+<div class="line"><a name="l09828"></a><span class="lineno"> 9828</span>&#160;    VMA_ASSERT(request.offset &gt;= suballoc.offset);</div>
+<div class="line"><a name="l09829"></a><span class="lineno"> 9829</span>&#160;    <span class="keyword">const</span> VkDeviceSize paddingBegin = request.offset - suballoc.offset;</div>
+<div class="line"><a name="l09830"></a><span class="lineno"> 9830</span>&#160;    VMA_ASSERT(suballoc.size &gt;= paddingBegin + allocSize);</div>
+<div class="line"><a name="l09831"></a><span class="lineno"> 9831</span>&#160;    <span class="keyword">const</span> VkDeviceSize paddingEnd = suballoc.size - paddingBegin - allocSize;</div>
+<div class="line"><a name="l09832"></a><span class="lineno"> 9832</span>&#160; </div>
+<div class="line"><a name="l09833"></a><span class="lineno"> 9833</span>&#160;    <span class="comment">// Unregister this free suballocation from m_FreeSuballocationsBySize and update</span></div>
+<div class="line"><a name="l09834"></a><span class="lineno"> 9834</span>&#160;    <span class="comment">// it to become used.</span></div>
+<div class="line"><a name="l09835"></a><span class="lineno"> 9835</span>&#160;    UnregisterFreeSuballocation(request.item);</div>
+<div class="line"><a name="l09836"></a><span class="lineno"> 9836</span>&#160; </div>
+<div class="line"><a name="l09837"></a><span class="lineno"> 9837</span>&#160;    suballoc.offset = request.offset;</div>
+<div class="line"><a name="l09838"></a><span class="lineno"> 9838</span>&#160;    suballoc.size = allocSize;</div>
+<div class="line"><a name="l09839"></a><span class="lineno"> 9839</span>&#160;    suballoc.type = type;</div>
+<div class="line"><a name="l09840"></a><span class="lineno"> 9840</span>&#160;    suballoc.hAllocation = hAllocation;</div>
+<div class="line"><a name="l09841"></a><span class="lineno"> 9841</span>&#160; </div>
+<div class="line"><a name="l09842"></a><span class="lineno"> 9842</span>&#160;    <span class="comment">// If there are any free bytes remaining at the end, insert new free suballocation after current one.</span></div>
+<div class="line"><a name="l09843"></a><span class="lineno"> 9843</span>&#160;    <span class="keywordflow">if</span>(paddingEnd)</div>
+<div class="line"><a name="l09844"></a><span class="lineno"> 9844</span>&#160;    {</div>
+<div class="line"><a name="l09845"></a><span class="lineno"> 9845</span>&#160;        VmaSuballocation paddingSuballoc = {};</div>
+<div class="line"><a name="l09846"></a><span class="lineno"> 9846</span>&#160;        paddingSuballoc.offset = request.offset + allocSize;</div>
+<div class="line"><a name="l09847"></a><span class="lineno"> 9847</span>&#160;        paddingSuballoc.size = paddingEnd;</div>
+<div class="line"><a name="l09848"></a><span class="lineno"> 9848</span>&#160;        paddingSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE;</div>
+<div class="line"><a name="l09849"></a><span class="lineno"> 9849</span>&#160;        VmaSuballocationList::iterator next = request.item;</div>
+<div class="line"><a name="l09850"></a><span class="lineno"> 9850</span>&#160;        ++next;</div>
+<div class="line"><a name="l09851"></a><span class="lineno"> 9851</span>&#160;        <span class="keyword">const</span> VmaSuballocationList::iterator paddingEndItem =</div>
+<div class="line"><a name="l09852"></a><span class="lineno"> 9852</span>&#160;            m_Suballocations.insert(next, paddingSuballoc);</div>
+<div class="line"><a name="l09853"></a><span class="lineno"> 9853</span>&#160;        RegisterFreeSuballocation(paddingEndItem);</div>
+<div class="line"><a name="l09854"></a><span class="lineno"> 9854</span>&#160;    }</div>
+<div class="line"><a name="l09855"></a><span class="lineno"> 9855</span>&#160; </div>
+<div class="line"><a name="l09856"></a><span class="lineno"> 9856</span>&#160;    <span class="comment">// If there are any free bytes remaining at the beginning, insert new free suballocation before current one.</span></div>
+<div class="line"><a name="l09857"></a><span class="lineno"> 9857</span>&#160;    <span class="keywordflow">if</span>(paddingBegin)</div>
+<div class="line"><a name="l09858"></a><span class="lineno"> 9858</span>&#160;    {</div>
+<div class="line"><a name="l09859"></a><span class="lineno"> 9859</span>&#160;        VmaSuballocation paddingSuballoc = {};</div>
+<div class="line"><a name="l09860"></a><span class="lineno"> 9860</span>&#160;        paddingSuballoc.offset = request.offset - paddingBegin;</div>
+<div class="line"><a name="l09861"></a><span class="lineno"> 9861</span>&#160;        paddingSuballoc.size = paddingBegin;</div>
+<div class="line"><a name="l09862"></a><span class="lineno"> 9862</span>&#160;        paddingSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE;</div>
+<div class="line"><a name="l09863"></a><span class="lineno"> 9863</span>&#160;        <span class="keyword">const</span> VmaSuballocationList::iterator paddingBeginItem =</div>
+<div class="line"><a name="l09864"></a><span class="lineno"> 9864</span>&#160;            m_Suballocations.insert(request.item, paddingSuballoc);</div>
+<div class="line"><a name="l09865"></a><span class="lineno"> 9865</span>&#160;        RegisterFreeSuballocation(paddingBeginItem);</div>
+<div class="line"><a name="l09866"></a><span class="lineno"> 9866</span>&#160;    }</div>
+<div class="line"><a name="l09867"></a><span class="lineno"> 9867</span>&#160; </div>
+<div class="line"><a name="l09868"></a><span class="lineno"> 9868</span>&#160;    <span class="comment">// Update totals.</span></div>
+<div class="line"><a name="l09869"></a><span class="lineno"> 9869</span>&#160;    m_FreeCount = m_FreeCount - 1;</div>
+<div class="line"><a name="l09870"></a><span class="lineno"> 9870</span>&#160;    <span class="keywordflow">if</span>(paddingBegin &gt; 0)</div>
+<div class="line"><a name="l09871"></a><span class="lineno"> 9871</span>&#160;    {</div>
+<div class="line"><a name="l09872"></a><span class="lineno"> 9872</span>&#160;        ++m_FreeCount;</div>
+<div class="line"><a name="l09873"></a><span class="lineno"> 9873</span>&#160;    }</div>
+<div class="line"><a name="l09874"></a><span class="lineno"> 9874</span>&#160;    <span class="keywordflow">if</span>(paddingEnd &gt; 0)</div>
+<div class="line"><a name="l09875"></a><span class="lineno"> 9875</span>&#160;    {</div>
+<div class="line"><a name="l09876"></a><span class="lineno"> 9876</span>&#160;        ++m_FreeCount;</div>
+<div class="line"><a name="l09877"></a><span class="lineno"> 9877</span>&#160;    }</div>
+<div class="line"><a name="l09878"></a><span class="lineno"> 9878</span>&#160;    m_SumFreeSize -= allocSize;</div>
+<div class="line"><a name="l09879"></a><span class="lineno"> 9879</span>&#160;}</div>
+<div class="line"><a name="l09880"></a><span class="lineno"> 9880</span>&#160; </div>
+<div class="line"><a name="l09881"></a><span class="lineno"> 9881</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Generic::Free(<span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l09882"></a><span class="lineno"> 9882</span>&#160;{</div>
+<div class="line"><a name="l09883"></a><span class="lineno"> 9883</span>&#160;    <span class="keywordflow">for</span>(VmaSuballocationList::iterator suballocItem = m_Suballocations.begin();</div>
+<div class="line"><a name="l09884"></a><span class="lineno"> 9884</span>&#160;        suballocItem != m_Suballocations.end();</div>
+<div class="line"><a name="l09885"></a><span class="lineno"> 9885</span>&#160;        ++suballocItem)</div>
+<div class="line"><a name="l09886"></a><span class="lineno"> 9886</span>&#160;    {</div>
+<div class="line"><a name="l09887"></a><span class="lineno"> 9887</span>&#160;        VmaSuballocation&amp; suballoc = *suballocItem;</div>
+<div class="line"><a name="l09888"></a><span class="lineno"> 9888</span>&#160;        <span class="keywordflow">if</span>(suballoc.hAllocation == allocation)</div>
+<div class="line"><a name="l09889"></a><span class="lineno"> 9889</span>&#160;        {</div>
+<div class="line"><a name="l09890"></a><span class="lineno"> 9890</span>&#160;            FreeSuballocation(suballocItem);</div>
+<div class="line"><a name="l09891"></a><span class="lineno"> 9891</span>&#160;            VMA_HEAVY_ASSERT(Validate());</div>
+<div class="line"><a name="l09892"></a><span class="lineno"> 9892</span>&#160;            <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l09893"></a><span class="lineno"> 9893</span>&#160;        }</div>
+<div class="line"><a name="l09894"></a><span class="lineno"> 9894</span>&#160;    }</div>
+<div class="line"><a name="l09895"></a><span class="lineno"> 9895</span>&#160;    VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Not found!&quot;</span>);</div>
+<div class="line"><a name="l09896"></a><span class="lineno"> 9896</span>&#160;}</div>
+<div class="line"><a name="l09897"></a><span class="lineno"> 9897</span>&#160; </div>
+<div class="line"><a name="l09898"></a><span class="lineno"> 9898</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Generic::FreeAtOffset(VkDeviceSize offset)</div>
+<div class="line"><a name="l09899"></a><span class="lineno"> 9899</span>&#160;{</div>
+<div class="line"><a name="l09900"></a><span class="lineno"> 9900</span>&#160;    <span class="keywordflow">for</span>(VmaSuballocationList::iterator suballocItem = m_Suballocations.begin();</div>
+<div class="line"><a name="l09901"></a><span class="lineno"> 9901</span>&#160;        suballocItem != m_Suballocations.end();</div>
+<div class="line"><a name="l09902"></a><span class="lineno"> 9902</span>&#160;        ++suballocItem)</div>
+<div class="line"><a name="l09903"></a><span class="lineno"> 9903</span>&#160;    {</div>
+<div class="line"><a name="l09904"></a><span class="lineno"> 9904</span>&#160;        VmaSuballocation&amp; suballoc = *suballocItem;</div>
+<div class="line"><a name="l09905"></a><span class="lineno"> 9905</span>&#160;        <span class="keywordflow">if</span>(suballoc.offset == offset)</div>
+<div class="line"><a name="l09906"></a><span class="lineno"> 9906</span>&#160;        {</div>
+<div class="line"><a name="l09907"></a><span class="lineno"> 9907</span>&#160;            FreeSuballocation(suballocItem);</div>
+<div class="line"><a name="l09908"></a><span class="lineno"> 9908</span>&#160;            <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l09909"></a><span class="lineno"> 9909</span>&#160;        }</div>
+<div class="line"><a name="l09910"></a><span class="lineno"> 9910</span>&#160;    }</div>
+<div class="line"><a name="l09911"></a><span class="lineno"> 9911</span>&#160;    VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Not found!&quot;</span>);</div>
+<div class="line"><a name="l09912"></a><span class="lineno"> 9912</span>&#160;}</div>
+<div class="line"><a name="l09913"></a><span class="lineno"> 9913</span>&#160; </div>
+<div class="line"><a name="l09914"></a><span class="lineno"> 9914</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Generic::ValidateFreeSuballocationList()<span class="keyword"> const</span></div>
+<div class="line"><a name="l09915"></a><span class="lineno"> 9915</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l09916"></a><span class="lineno"> 9916</span>&#160;    VkDeviceSize lastSize = 0;</div>
+<div class="line"><a name="l09917"></a><span class="lineno"> 9917</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0, count = m_FreeSuballocationsBySize.size(); i &lt; count; ++i)</div>
+<div class="line"><a name="l09918"></a><span class="lineno"> 9918</span>&#160;    {</div>
+<div class="line"><a name="l09919"></a><span class="lineno"> 9919</span>&#160;        <span class="keyword">const</span> VmaSuballocationList::iterator it = m_FreeSuballocationsBySize[i];</div>
+<div class="line"><a name="l09920"></a><span class="lineno"> 9920</span>&#160; </div>
+<div class="line"><a name="l09921"></a><span class="lineno"> 9921</span>&#160;        VMA_VALIDATE(it-&gt;type == VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l09922"></a><span class="lineno"> 9922</span>&#160;        VMA_VALIDATE(it-&gt;size &gt;= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER);</div>
+<div class="line"><a name="l09923"></a><span class="lineno"> 9923</span>&#160;        VMA_VALIDATE(it-&gt;size &gt;= lastSize);</div>
+<div class="line"><a name="l09924"></a><span class="lineno"> 9924</span>&#160;        lastSize = it-&gt;size;</div>
+<div class="line"><a name="l09925"></a><span class="lineno"> 9925</span>&#160;    }</div>
+<div class="line"><a name="l09926"></a><span class="lineno"> 9926</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l09927"></a><span class="lineno"> 9927</span>&#160;}</div>
+<div class="line"><a name="l09928"></a><span class="lineno"> 9928</span>&#160; </div>
+<div class="line"><a name="l09929"></a><span class="lineno"> 9929</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Generic::CheckAllocation(</div>
+<div class="line"><a name="l09930"></a><span class="lineno"> 9930</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l09931"></a><span class="lineno"> 9931</span>&#160;    uint32_t frameInUseCount,</div>
+<div class="line"><a name="l09932"></a><span class="lineno"> 9932</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
+<div class="line"><a name="l09933"></a><span class="lineno"> 9933</span>&#160;    VkDeviceSize allocSize,</div>
+<div class="line"><a name="l09934"></a><span class="lineno"> 9934</span>&#160;    VkDeviceSize allocAlignment,</div>
+<div class="line"><a name="l09935"></a><span class="lineno"> 9935</span>&#160;    VmaSuballocationType allocType,</div>
+<div class="line"><a name="l09936"></a><span class="lineno"> 9936</span>&#160;    VmaSuballocationList::const_iterator suballocItem,</div>
+<div class="line"><a name="l09937"></a><span class="lineno"> 9937</span>&#160;    <span class="keywordtype">bool</span> canMakeOtherLost,</div>
+<div class="line"><a name="l09938"></a><span class="lineno"> 9938</span>&#160;    VkDeviceSize* pOffset,</div>
+<div class="line"><a name="l09939"></a><span class="lineno"> 9939</span>&#160;    <span class="keywordtype">size_t</span>* itemsToMakeLostCount,</div>
+<div class="line"><a name="l09940"></a><span class="lineno"> 9940</span>&#160;    VkDeviceSize* pSumFreeSize,</div>
+<div class="line"><a name="l09941"></a><span class="lineno"> 9941</span>&#160;    VkDeviceSize* pSumItemSize)<span class="keyword"> const</span></div>
+<div class="line"><a name="l09942"></a><span class="lineno"> 9942</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l09943"></a><span class="lineno"> 9943</span>&#160;    VMA_ASSERT(allocSize &gt; 0);</div>
+<div class="line"><a name="l09944"></a><span class="lineno"> 9944</span>&#160;    VMA_ASSERT(allocType != VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l09945"></a><span class="lineno"> 9945</span>&#160;    VMA_ASSERT(suballocItem != m_Suballocations.cend());</div>
+<div class="line"><a name="l09946"></a><span class="lineno"> 9946</span>&#160;    VMA_ASSERT(pOffset != VMA_NULL);</div>
+<div class="line"><a name="l09947"></a><span class="lineno"> 9947</span>&#160; </div>
+<div class="line"><a name="l09948"></a><span class="lineno"> 9948</span>&#160;    *itemsToMakeLostCount = 0;</div>
+<div class="line"><a name="l09949"></a><span class="lineno"> 9949</span>&#160;    *pSumFreeSize = 0;</div>
+<div class="line"><a name="l09950"></a><span class="lineno"> 9950</span>&#160;    *pSumItemSize = 0;</div>
+<div class="line"><a name="l09951"></a><span class="lineno"> 9951</span>&#160; </div>
+<div class="line"><a name="l09952"></a><span class="lineno"> 9952</span>&#160;    <span class="keywordflow">if</span>(canMakeOtherLost)</div>
+<div class="line"><a name="l09953"></a><span class="lineno"> 9953</span>&#160;    {</div>
+<div class="line"><a name="l09954"></a><span class="lineno"> 9954</span>&#160;        <span class="keywordflow">if</span>(suballocItem-&gt;type == VMA_SUBALLOCATION_TYPE_FREE)</div>
+<div class="line"><a name="l09955"></a><span class="lineno"> 9955</span>&#160;        {</div>
+<div class="line"><a name="l09956"></a><span class="lineno"> 9956</span>&#160;            *pSumFreeSize = suballocItem-&gt;size;</div>
+<div class="line"><a name="l09957"></a><span class="lineno"> 9957</span>&#160;        }</div>
+<div class="line"><a name="l09958"></a><span class="lineno"> 9958</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l09959"></a><span class="lineno"> 9959</span>&#160;        {</div>
+<div class="line"><a name="l09960"></a><span class="lineno"> 9960</span>&#160;            <span class="keywordflow">if</span>(suballocItem-&gt;hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
+<div class="line"><a name="l09961"></a><span class="lineno"> 9961</span>&#160;                suballocItem-&gt;hAllocation-&gt;GetLastUseFrameIndex() + frameInUseCount &lt; currentFrameIndex)</div>
+<div class="line"><a name="l09962"></a><span class="lineno"> 9962</span>&#160;            {</div>
+<div class="line"><a name="l09963"></a><span class="lineno"> 9963</span>&#160;                ++*itemsToMakeLostCount;</div>
+<div class="line"><a name="l09964"></a><span class="lineno"> 9964</span>&#160;                *pSumItemSize = suballocItem-&gt;size;</div>
+<div class="line"><a name="l09965"></a><span class="lineno"> 9965</span>&#160;            }</div>
+<div class="line"><a name="l09966"></a><span class="lineno"> 9966</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l09967"></a><span class="lineno"> 9967</span>&#160;            {</div>
+<div class="line"><a name="l09968"></a><span class="lineno"> 9968</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l09969"></a><span class="lineno"> 9969</span>&#160;            }</div>
+<div class="line"><a name="l09970"></a><span class="lineno"> 9970</span>&#160;        }</div>
+<div class="line"><a name="l09971"></a><span class="lineno"> 9971</span>&#160; </div>
+<div class="line"><a name="l09972"></a><span class="lineno"> 9972</span>&#160;        <span class="comment">// Remaining size is too small for this request: Early return.</span></div>
+<div class="line"><a name="l09973"></a><span class="lineno"> 9973</span>&#160;        <span class="keywordflow">if</span>(GetSize() - suballocItem-&gt;offset &lt; allocSize)</div>
+<div class="line"><a name="l09974"></a><span class="lineno"> 9974</span>&#160;        {</div>
+<div class="line"><a name="l09975"></a><span class="lineno"> 9975</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l09976"></a><span class="lineno"> 9976</span>&#160;        }</div>
+<div class="line"><a name="l09977"></a><span class="lineno"> 9977</span>&#160; </div>
+<div class="line"><a name="l09978"></a><span class="lineno"> 9978</span>&#160;        <span class="comment">// Start from offset equal to beginning of this suballocation.</span></div>
+<div class="line"><a name="l09979"></a><span class="lineno"> 9979</span>&#160;        *pOffset = suballocItem-&gt;offset;</div>
+<div class="line"><a name="l09980"></a><span class="lineno"> 9980</span>&#160; </div>
+<div class="line"><a name="l09981"></a><span class="lineno"> 9981</span>&#160;        <span class="comment">// Apply VMA_DEBUG_MARGIN at the beginning.</span></div>
+<div class="line"><a name="l09982"></a><span class="lineno"> 9982</span>&#160;        <span class="keywordflow">if</span>(VMA_DEBUG_MARGIN &gt; 0)</div>
+<div class="line"><a name="l09983"></a><span class="lineno"> 9983</span>&#160;        {</div>
+<div class="line"><a name="l09984"></a><span class="lineno"> 9984</span>&#160;            *pOffset += VMA_DEBUG_MARGIN;</div>
+<div class="line"><a name="l09985"></a><span class="lineno"> 9985</span>&#160;        }</div>
+<div class="line"><a name="l09986"></a><span class="lineno"> 9986</span>&#160; </div>
+<div class="line"><a name="l09987"></a><span class="lineno"> 9987</span>&#160;        <span class="comment">// Apply alignment.</span></div>
+<div class="line"><a name="l09988"></a><span class="lineno"> 9988</span>&#160;        *pOffset = VmaAlignUp(*pOffset, allocAlignment);</div>
+<div class="line"><a name="l09989"></a><span class="lineno"> 9989</span>&#160; </div>
+<div class="line"><a name="l09990"></a><span class="lineno"> 9990</span>&#160;        <span class="comment">// Check previous suballocations for BufferImageGranularity conflicts.</span></div>
+<div class="line"><a name="l09991"></a><span class="lineno"> 9991</span>&#160;        <span class="comment">// Make bigger alignment if necessary.</span></div>
+<div class="line"><a name="l09992"></a><span class="lineno"> 9992</span>&#160;        <span class="keywordflow">if</span>(bufferImageGranularity &gt; 1 &amp;&amp; bufferImageGranularity != allocAlignment)</div>
+<div class="line"><a name="l09993"></a><span class="lineno"> 9993</span>&#160;        {</div>
+<div class="line"><a name="l09994"></a><span class="lineno"> 9994</span>&#160;            <span class="keywordtype">bool</span> bufferImageGranularityConflict = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l09995"></a><span class="lineno"> 9995</span>&#160;            VmaSuballocationList::const_iterator prevSuballocItem = suballocItem;</div>
+<div class="line"><a name="l09996"></a><span class="lineno"> 9996</span>&#160;            <span class="keywordflow">while</span>(prevSuballocItem != m_Suballocations.cbegin())</div>
+<div class="line"><a name="l09997"></a><span class="lineno"> 9997</span>&#160;            {</div>
+<div class="line"><a name="l09998"></a><span class="lineno"> 9998</span>&#160;                --prevSuballocItem;</div>
+<div class="line"><a name="l09999"></a><span class="lineno"> 9999</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; prevSuballoc = *prevSuballocItem;</div>
+<div class="line"><a name="l10000"></a><span class="lineno">10000</span>&#160;                <span class="keywordflow">if</span>(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, *pOffset, bufferImageGranularity))</div>
+<div class="line"><a name="l10001"></a><span class="lineno">10001</span>&#160;                {</div>
+<div class="line"><a name="l10002"></a><span class="lineno">10002</span>&#160;                    <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))</div>
+<div class="line"><a name="l10003"></a><span class="lineno">10003</span>&#160;                    {</div>
+<div class="line"><a name="l10004"></a><span class="lineno">10004</span>&#160;                        bufferImageGranularityConflict = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l10005"></a><span class="lineno">10005</span>&#160;                        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l10006"></a><span class="lineno">10006</span>&#160;                    }</div>
+<div class="line"><a name="l10007"></a><span class="lineno">10007</span>&#160;                }</div>
+<div class="line"><a name="l10008"></a><span class="lineno">10008</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10009"></a><span class="lineno">10009</span>&#160;                    <span class="comment">// Already on previous page.</span></div>
+<div class="line"><a name="l10010"></a><span class="lineno">10010</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l10011"></a><span class="lineno">10011</span>&#160;            }</div>
+<div class="line"><a name="l10012"></a><span class="lineno">10012</span>&#160;            <span class="keywordflow">if</span>(bufferImageGranularityConflict)</div>
+<div class="line"><a name="l10013"></a><span class="lineno">10013</span>&#160;            {</div>
+<div class="line"><a name="l10014"></a><span class="lineno">10014</span>&#160;                *pOffset = VmaAlignUp(*pOffset, bufferImageGranularity);</div>
+<div class="line"><a name="l10015"></a><span class="lineno">10015</span>&#160;            }</div>
+<div class="line"><a name="l10016"></a><span class="lineno">10016</span>&#160;        }</div>
+<div class="line"><a name="l10017"></a><span class="lineno">10017</span>&#160; </div>
+<div class="line"><a name="l10018"></a><span class="lineno">10018</span>&#160;        <span class="comment">// Now that we have final *pOffset, check if we are past suballocItem.</span></div>
+<div class="line"><a name="l10019"></a><span class="lineno">10019</span>&#160;        <span class="comment">// If yes, return false - this function should be called for another suballocItem as starting point.</span></div>
+<div class="line"><a name="l10020"></a><span class="lineno">10020</span>&#160;        <span class="keywordflow">if</span>(*pOffset &gt;= suballocItem-&gt;offset + suballocItem-&gt;size)</div>
+<div class="line"><a name="l10021"></a><span class="lineno">10021</span>&#160;        {</div>
+<div class="line"><a name="l10022"></a><span class="lineno">10022</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l10023"></a><span class="lineno">10023</span>&#160;        }</div>
+<div class="line"><a name="l10024"></a><span class="lineno">10024</span>&#160; </div>
+<div class="line"><a name="l10025"></a><span class="lineno">10025</span>&#160;        <span class="comment">// Calculate padding at the beginning based on current offset.</span></div>
+<div class="line"><a name="l10026"></a><span class="lineno">10026</span>&#160;        <span class="keyword">const</span> VkDeviceSize paddingBegin = *pOffset - suballocItem-&gt;offset;</div>
+<div class="line"><a name="l10027"></a><span class="lineno">10027</span>&#160; </div>
+<div class="line"><a name="l10028"></a><span class="lineno">10028</span>&#160;        <span class="comment">// Calculate required margin at the end.</span></div>
+<div class="line"><a name="l10029"></a><span class="lineno">10029</span>&#160;        <span class="keyword">const</span> VkDeviceSize requiredEndMargin = VMA_DEBUG_MARGIN;</div>
+<div class="line"><a name="l10030"></a><span class="lineno">10030</span>&#160; </div>
+<div class="line"><a name="l10031"></a><span class="lineno">10031</span>&#160;        <span class="keyword">const</span> VkDeviceSize totalSize = paddingBegin + allocSize + requiredEndMargin;</div>
+<div class="line"><a name="l10032"></a><span class="lineno">10032</span>&#160;        <span class="comment">// Another early return check.</span></div>
+<div class="line"><a name="l10033"></a><span class="lineno">10033</span>&#160;        <span class="keywordflow">if</span>(suballocItem-&gt;offset + totalSize &gt; GetSize())</div>
+<div class="line"><a name="l10034"></a><span class="lineno">10034</span>&#160;        {</div>
+<div class="line"><a name="l10035"></a><span class="lineno">10035</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l10036"></a><span class="lineno">10036</span>&#160;        }</div>
+<div class="line"><a name="l10037"></a><span class="lineno">10037</span>&#160; </div>
+<div class="line"><a name="l10038"></a><span class="lineno">10038</span>&#160;        <span class="comment">// Advance lastSuballocItem until desired size is reached.</span></div>
+<div class="line"><a name="l10039"></a><span class="lineno">10039</span>&#160;        <span class="comment">// Update itemsToMakeLostCount.</span></div>
+<div class="line"><a name="l10040"></a><span class="lineno">10040</span>&#160;        VmaSuballocationList::const_iterator lastSuballocItem = suballocItem;</div>
+<div class="line"><a name="l10041"></a><span class="lineno">10041</span>&#160;        <span class="keywordflow">if</span>(totalSize &gt; suballocItem-&gt;size)</div>
+<div class="line"><a name="l10042"></a><span class="lineno">10042</span>&#160;        {</div>
+<div class="line"><a name="l10043"></a><span class="lineno">10043</span>&#160;            VkDeviceSize remainingSize = totalSize - suballocItem-&gt;size;</div>
+<div class="line"><a name="l10044"></a><span class="lineno">10044</span>&#160;            <span class="keywordflow">while</span>(remainingSize &gt; 0)</div>
+<div class="line"><a name="l10045"></a><span class="lineno">10045</span>&#160;            {</div>
+<div class="line"><a name="l10046"></a><span class="lineno">10046</span>&#160;                ++lastSuballocItem;</div>
+<div class="line"><a name="l10047"></a><span class="lineno">10047</span>&#160;                <span class="keywordflow">if</span>(lastSuballocItem == m_Suballocations.cend())</div>
+<div class="line"><a name="l10048"></a><span class="lineno">10048</span>&#160;                {</div>
+<div class="line"><a name="l10049"></a><span class="lineno">10049</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l10050"></a><span class="lineno">10050</span>&#160;                }</div>
+<div class="line"><a name="l10051"></a><span class="lineno">10051</span>&#160;                <span class="keywordflow">if</span>(lastSuballocItem-&gt;type == VMA_SUBALLOCATION_TYPE_FREE)</div>
+<div class="line"><a name="l10052"></a><span class="lineno">10052</span>&#160;                {</div>
+<div class="line"><a name="l10053"></a><span class="lineno">10053</span>&#160;                    *pSumFreeSize += lastSuballocItem-&gt;size;</div>
+<div class="line"><a name="l10054"></a><span class="lineno">10054</span>&#160;                }</div>
+<div class="line"><a name="l10055"></a><span class="lineno">10055</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10056"></a><span class="lineno">10056</span>&#160;                {</div>
+<div class="line"><a name="l10057"></a><span class="lineno">10057</span>&#160;                    VMA_ASSERT(lastSuballocItem-&gt;hAllocation != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l10058"></a><span class="lineno">10058</span>&#160;                    <span class="keywordflow">if</span>(lastSuballocItem-&gt;hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
+<div class="line"><a name="l10059"></a><span class="lineno">10059</span>&#160;                        lastSuballocItem-&gt;hAllocation-&gt;GetLastUseFrameIndex() + frameInUseCount &lt; currentFrameIndex)</div>
+<div class="line"><a name="l10060"></a><span class="lineno">10060</span>&#160;                    {</div>
+<div class="line"><a name="l10061"></a><span class="lineno">10061</span>&#160;                        ++*itemsToMakeLostCount;</div>
+<div class="line"><a name="l10062"></a><span class="lineno">10062</span>&#160;                        *pSumItemSize += lastSuballocItem-&gt;size;</div>
+<div class="line"><a name="l10063"></a><span class="lineno">10063</span>&#160;                    }</div>
+<div class="line"><a name="l10064"></a><span class="lineno">10064</span>&#160;                    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10065"></a><span class="lineno">10065</span>&#160;                    {</div>
+<div class="line"><a name="l10066"></a><span class="lineno">10066</span>&#160;                        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l10067"></a><span class="lineno">10067</span>&#160;                    }</div>
+<div class="line"><a name="l10068"></a><span class="lineno">10068</span>&#160;                }</div>
+<div class="line"><a name="l10069"></a><span class="lineno">10069</span>&#160;                remainingSize = (lastSuballocItem-&gt;size &lt; remainingSize) ?</div>
+<div class="line"><a name="l10070"></a><span class="lineno">10070</span>&#160;                    remainingSize - lastSuballocItem-&gt;size : 0;</div>
+<div class="line"><a name="l10071"></a><span class="lineno">10071</span>&#160;            }</div>
+<div class="line"><a name="l10072"></a><span class="lineno">10072</span>&#160;        }</div>
+<div class="line"><a name="l10073"></a><span class="lineno">10073</span>&#160; </div>
+<div class="line"><a name="l10074"></a><span class="lineno">10074</span>&#160;        <span class="comment">// Check next suballocations for BufferImageGranularity conflicts.</span></div>
+<div class="line"><a name="l10075"></a><span class="lineno">10075</span>&#160;        <span class="comment">// If conflict exists, we must mark more allocations lost or fail.</span></div>
+<div class="line"><a name="l10076"></a><span class="lineno">10076</span>&#160;        <span class="keywordflow">if</span>(allocSize % bufferImageGranularity || *pOffset % bufferImageGranularity)</div>
+<div class="line"><a name="l10077"></a><span class="lineno">10077</span>&#160;        {</div>
+<div class="line"><a name="l10078"></a><span class="lineno">10078</span>&#160;            VmaSuballocationList::const_iterator nextSuballocItem = lastSuballocItem;</div>
+<div class="line"><a name="l10079"></a><span class="lineno">10079</span>&#160;            ++nextSuballocItem;</div>
+<div class="line"><a name="l10080"></a><span class="lineno">10080</span>&#160;            <span class="keywordflow">while</span>(nextSuballocItem != m_Suballocations.cend())</div>
+<div class="line"><a name="l10081"></a><span class="lineno">10081</span>&#160;            {</div>
+<div class="line"><a name="l10082"></a><span class="lineno">10082</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; nextSuballoc = *nextSuballocItem;</div>
+<div class="line"><a name="l10083"></a><span class="lineno">10083</span>&#160;                <span class="keywordflow">if</span>(VmaBlocksOnSamePage(*pOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))</div>
+<div class="line"><a name="l10084"></a><span class="lineno">10084</span>&#160;                {</div>
+<div class="line"><a name="l10085"></a><span class="lineno">10085</span>&#160;                    <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))</div>
+<div class="line"><a name="l10086"></a><span class="lineno">10086</span>&#160;                    {</div>
+<div class="line"><a name="l10087"></a><span class="lineno">10087</span>&#160;                        VMA_ASSERT(nextSuballoc.hAllocation != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l10088"></a><span class="lineno">10088</span>&#160;                        <span class="keywordflow">if</span>(nextSuballoc.hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
+<div class="line"><a name="l10089"></a><span class="lineno">10089</span>&#160;                            nextSuballoc.hAllocation-&gt;GetLastUseFrameIndex() + frameInUseCount &lt; currentFrameIndex)</div>
+<div class="line"><a name="l10090"></a><span class="lineno">10090</span>&#160;                        {</div>
+<div class="line"><a name="l10091"></a><span class="lineno">10091</span>&#160;                            ++*itemsToMakeLostCount;</div>
+<div class="line"><a name="l10092"></a><span class="lineno">10092</span>&#160;                        }</div>
+<div class="line"><a name="l10093"></a><span class="lineno">10093</span>&#160;                        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10094"></a><span class="lineno">10094</span>&#160;                        {</div>
+<div class="line"><a name="l10095"></a><span class="lineno">10095</span>&#160;                            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l10096"></a><span class="lineno">10096</span>&#160;                        }</div>
+<div class="line"><a name="l10097"></a><span class="lineno">10097</span>&#160;                    }</div>
+<div class="line"><a name="l10098"></a><span class="lineno">10098</span>&#160;                }</div>
+<div class="line"><a name="l10099"></a><span class="lineno">10099</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10100"></a><span class="lineno">10100</span>&#160;                {</div>
+<div class="line"><a name="l10101"></a><span class="lineno">10101</span>&#160;                    <span class="comment">// Already on next page.</span></div>
+<div class="line"><a name="l10102"></a><span class="lineno">10102</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l10103"></a><span class="lineno">10103</span>&#160;                }</div>
+<div class="line"><a name="l10104"></a><span class="lineno">10104</span>&#160;                ++nextSuballocItem;</div>
+<div class="line"><a name="l10105"></a><span class="lineno">10105</span>&#160;            }</div>
+<div class="line"><a name="l10106"></a><span class="lineno">10106</span>&#160;        }</div>
+<div class="line"><a name="l10107"></a><span class="lineno">10107</span>&#160;    }</div>
+<div class="line"><a name="l10108"></a><span class="lineno">10108</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10109"></a><span class="lineno">10109</span>&#160;    {</div>
+<div class="line"><a name="l10110"></a><span class="lineno">10110</span>&#160;        <span class="keyword">const</span> VmaSuballocation&amp; suballoc = *suballocItem;</div>
+<div class="line"><a name="l10111"></a><span class="lineno">10111</span>&#160;        VMA_ASSERT(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l10112"></a><span class="lineno">10112</span>&#160; </div>
+<div class="line"><a name="l10113"></a><span class="lineno">10113</span>&#160;        *pSumFreeSize = suballoc.size;</div>
+<div class="line"><a name="l10114"></a><span class="lineno">10114</span>&#160; </div>
+<div class="line"><a name="l10115"></a><span class="lineno">10115</span>&#160;        <span class="comment">// Size of this suballocation is too small for this request: Early return.</span></div>
+<div class="line"><a name="l10116"></a><span class="lineno">10116</span>&#160;        <span class="keywordflow">if</span>(suballoc.size &lt; allocSize)</div>
+<div class="line"><a name="l10117"></a><span class="lineno">10117</span>&#160;        {</div>
+<div class="line"><a name="l10118"></a><span class="lineno">10118</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l10119"></a><span class="lineno">10119</span>&#160;        }</div>
+<div class="line"><a name="l10120"></a><span class="lineno">10120</span>&#160; </div>
+<div class="line"><a name="l10121"></a><span class="lineno">10121</span>&#160;        <span class="comment">// Start from offset equal to beginning of this suballocation.</span></div>
+<div class="line"><a name="l10122"></a><span class="lineno">10122</span>&#160;        *pOffset = suballoc.offset;</div>
+<div class="line"><a name="l10123"></a><span class="lineno">10123</span>&#160; </div>
+<div class="line"><a name="l10124"></a><span class="lineno">10124</span>&#160;        <span class="comment">// Apply VMA_DEBUG_MARGIN at the beginning.</span></div>
+<div class="line"><a name="l10125"></a><span class="lineno">10125</span>&#160;        <span class="keywordflow">if</span>(VMA_DEBUG_MARGIN &gt; 0)</div>
+<div class="line"><a name="l10126"></a><span class="lineno">10126</span>&#160;        {</div>
+<div class="line"><a name="l10127"></a><span class="lineno">10127</span>&#160;            *pOffset += VMA_DEBUG_MARGIN;</div>
+<div class="line"><a name="l10128"></a><span class="lineno">10128</span>&#160;        }</div>
+<div class="line"><a name="l10129"></a><span class="lineno">10129</span>&#160; </div>
+<div class="line"><a name="l10130"></a><span class="lineno">10130</span>&#160;        <span class="comment">// Apply alignment.</span></div>
+<div class="line"><a name="l10131"></a><span class="lineno">10131</span>&#160;        *pOffset = VmaAlignUp(*pOffset, allocAlignment);</div>
+<div class="line"><a name="l10132"></a><span class="lineno">10132</span>&#160; </div>
+<div class="line"><a name="l10133"></a><span class="lineno">10133</span>&#160;        <span class="comment">// Check previous suballocations for BufferImageGranularity conflicts.</span></div>
+<div class="line"><a name="l10134"></a><span class="lineno">10134</span>&#160;        <span class="comment">// Make bigger alignment if necessary.</span></div>
+<div class="line"><a name="l10135"></a><span class="lineno">10135</span>&#160;        <span class="keywordflow">if</span>(bufferImageGranularity &gt; 1 &amp;&amp; bufferImageGranularity != allocAlignment)</div>
+<div class="line"><a name="l10136"></a><span class="lineno">10136</span>&#160;        {</div>
+<div class="line"><a name="l10137"></a><span class="lineno">10137</span>&#160;            <span class="keywordtype">bool</span> bufferImageGranularityConflict = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l10138"></a><span class="lineno">10138</span>&#160;            VmaSuballocationList::const_iterator prevSuballocItem = suballocItem;</div>
+<div class="line"><a name="l10139"></a><span class="lineno">10139</span>&#160;            <span class="keywordflow">while</span>(prevSuballocItem != m_Suballocations.cbegin())</div>
+<div class="line"><a name="l10140"></a><span class="lineno">10140</span>&#160;            {</div>
+<div class="line"><a name="l10141"></a><span class="lineno">10141</span>&#160;                --prevSuballocItem;</div>
+<div class="line"><a name="l10142"></a><span class="lineno">10142</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; prevSuballoc = *prevSuballocItem;</div>
+<div class="line"><a name="l10143"></a><span class="lineno">10143</span>&#160;                <span class="keywordflow">if</span>(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, *pOffset, bufferImageGranularity))</div>
+<div class="line"><a name="l10144"></a><span class="lineno">10144</span>&#160;                {</div>
+<div class="line"><a name="l10145"></a><span class="lineno">10145</span>&#160;                    <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))</div>
+<div class="line"><a name="l10146"></a><span class="lineno">10146</span>&#160;                    {</div>
+<div class="line"><a name="l10147"></a><span class="lineno">10147</span>&#160;                        bufferImageGranularityConflict = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l10148"></a><span class="lineno">10148</span>&#160;                        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l10149"></a><span class="lineno">10149</span>&#160;                    }</div>
+<div class="line"><a name="l10150"></a><span class="lineno">10150</span>&#160;                }</div>
+<div class="line"><a name="l10151"></a><span class="lineno">10151</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10152"></a><span class="lineno">10152</span>&#160;                    <span class="comment">// Already on previous page.</span></div>
+<div class="line"><a name="l10153"></a><span class="lineno">10153</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l10154"></a><span class="lineno">10154</span>&#160;            }</div>
+<div class="line"><a name="l10155"></a><span class="lineno">10155</span>&#160;            <span class="keywordflow">if</span>(bufferImageGranularityConflict)</div>
+<div class="line"><a name="l10156"></a><span class="lineno">10156</span>&#160;            {</div>
+<div class="line"><a name="l10157"></a><span class="lineno">10157</span>&#160;                *pOffset = VmaAlignUp(*pOffset, bufferImageGranularity);</div>
+<div class="line"><a name="l10158"></a><span class="lineno">10158</span>&#160;            }</div>
+<div class="line"><a name="l10159"></a><span class="lineno">10159</span>&#160;        }</div>
+<div class="line"><a name="l10160"></a><span class="lineno">10160</span>&#160; </div>
+<div class="line"><a name="l10161"></a><span class="lineno">10161</span>&#160;        <span class="comment">// Calculate padding at the beginning based on current offset.</span></div>
+<div class="line"><a name="l10162"></a><span class="lineno">10162</span>&#160;        <span class="keyword">const</span> VkDeviceSize paddingBegin = *pOffset - suballoc.offset;</div>
+<div class="line"><a name="l10163"></a><span class="lineno">10163</span>&#160; </div>
+<div class="line"><a name="l10164"></a><span class="lineno">10164</span>&#160;        <span class="comment">// Calculate required margin at the end.</span></div>
+<div class="line"><a name="l10165"></a><span class="lineno">10165</span>&#160;        <span class="keyword">const</span> VkDeviceSize requiredEndMargin = VMA_DEBUG_MARGIN;</div>
+<div class="line"><a name="l10166"></a><span class="lineno">10166</span>&#160; </div>
+<div class="line"><a name="l10167"></a><span class="lineno">10167</span>&#160;        <span class="comment">// Fail if requested size plus margin before and after is bigger than size of this suballocation.</span></div>
+<div class="line"><a name="l10168"></a><span class="lineno">10168</span>&#160;        <span class="keywordflow">if</span>(paddingBegin + allocSize + requiredEndMargin &gt; suballoc.size)</div>
+<div class="line"><a name="l10169"></a><span class="lineno">10169</span>&#160;        {</div>
+<div class="line"><a name="l10170"></a><span class="lineno">10170</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l10171"></a><span class="lineno">10171</span>&#160;        }</div>
+<div class="line"><a name="l10172"></a><span class="lineno">10172</span>&#160; </div>
+<div class="line"><a name="l10173"></a><span class="lineno">10173</span>&#160;        <span class="comment">// Check next suballocations for BufferImageGranularity conflicts.</span></div>
+<div class="line"><a name="l10174"></a><span class="lineno">10174</span>&#160;        <span class="comment">// If conflict exists, allocation cannot be made here.</span></div>
+<div class="line"><a name="l10175"></a><span class="lineno">10175</span>&#160;        <span class="keywordflow">if</span>(allocSize % bufferImageGranularity || *pOffset % bufferImageGranularity)</div>
+<div class="line"><a name="l10176"></a><span class="lineno">10176</span>&#160;        {</div>
+<div class="line"><a name="l10177"></a><span class="lineno">10177</span>&#160;            VmaSuballocationList::const_iterator nextSuballocItem = suballocItem;</div>
+<div class="line"><a name="l10178"></a><span class="lineno">10178</span>&#160;            ++nextSuballocItem;</div>
+<div class="line"><a name="l10179"></a><span class="lineno">10179</span>&#160;            <span class="keywordflow">while</span>(nextSuballocItem != m_Suballocations.cend())</div>
+<div class="line"><a name="l10180"></a><span class="lineno">10180</span>&#160;            {</div>
+<div class="line"><a name="l10181"></a><span class="lineno">10181</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; nextSuballoc = *nextSuballocItem;</div>
+<div class="line"><a name="l10182"></a><span class="lineno">10182</span>&#160;                <span class="keywordflow">if</span>(VmaBlocksOnSamePage(*pOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))</div>
+<div class="line"><a name="l10183"></a><span class="lineno">10183</span>&#160;                {</div>
+<div class="line"><a name="l10184"></a><span class="lineno">10184</span>&#160;                    <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))</div>
+<div class="line"><a name="l10185"></a><span class="lineno">10185</span>&#160;                    {</div>
+<div class="line"><a name="l10186"></a><span class="lineno">10186</span>&#160;                        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l10187"></a><span class="lineno">10187</span>&#160;                    }</div>
+<div class="line"><a name="l10188"></a><span class="lineno">10188</span>&#160;                }</div>
+<div class="line"><a name="l10189"></a><span class="lineno">10189</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10190"></a><span class="lineno">10190</span>&#160;                {</div>
+<div class="line"><a name="l10191"></a><span class="lineno">10191</span>&#160;                    <span class="comment">// Already on next page.</span></div>
+<div class="line"><a name="l10192"></a><span class="lineno">10192</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l10193"></a><span class="lineno">10193</span>&#160;                }</div>
+<div class="line"><a name="l10194"></a><span class="lineno">10194</span>&#160;                ++nextSuballocItem;</div>
+<div class="line"><a name="l10195"></a><span class="lineno">10195</span>&#160;            }</div>
+<div class="line"><a name="l10196"></a><span class="lineno">10196</span>&#160;        }</div>
+<div class="line"><a name="l10197"></a><span class="lineno">10197</span>&#160;    }</div>
+<div class="line"><a name="l10198"></a><span class="lineno">10198</span>&#160; </div>
+<div class="line"><a name="l10199"></a><span class="lineno">10199</span>&#160;    <span class="comment">// All tests passed: Success. pOffset is already filled.</span></div>
+<div class="line"><a name="l10200"></a><span class="lineno">10200</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l10201"></a><span class="lineno">10201</span>&#160;}</div>
+<div class="line"><a name="l10202"></a><span class="lineno">10202</span>&#160; </div>
+<div class="line"><a name="l10203"></a><span class="lineno">10203</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Generic::MergeFreeWithNext(VmaSuballocationList::iterator item)</div>
+<div class="line"><a name="l10204"></a><span class="lineno">10204</span>&#160;{</div>
+<div class="line"><a name="l10205"></a><span class="lineno">10205</span>&#160;    VMA_ASSERT(item != m_Suballocations.end());</div>
+<div class="line"><a name="l10206"></a><span class="lineno">10206</span>&#160;    VMA_ASSERT(item-&gt;type == VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l10207"></a><span class="lineno">10207</span>&#160; </div>
+<div class="line"><a name="l10208"></a><span class="lineno">10208</span>&#160;    VmaSuballocationList::iterator nextItem = item;</div>
+<div class="line"><a name="l10209"></a><span class="lineno">10209</span>&#160;    ++nextItem;</div>
+<div class="line"><a name="l10210"></a><span class="lineno">10210</span>&#160;    VMA_ASSERT(nextItem != m_Suballocations.end());</div>
+<div class="line"><a name="l10211"></a><span class="lineno">10211</span>&#160;    VMA_ASSERT(nextItem-&gt;type == VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l10212"></a><span class="lineno">10212</span>&#160; </div>
+<div class="line"><a name="l10213"></a><span class="lineno">10213</span>&#160;    item-&gt;size += nextItem-&gt;size;</div>
+<div class="line"><a name="l10214"></a><span class="lineno">10214</span>&#160;    --m_FreeCount;</div>
+<div class="line"><a name="l10215"></a><span class="lineno">10215</span>&#160;    m_Suballocations.erase(nextItem);</div>
+<div class="line"><a name="l10216"></a><span class="lineno">10216</span>&#160;}</div>
+<div class="line"><a name="l10217"></a><span class="lineno">10217</span>&#160; </div>
+<div class="line"><a name="l10218"></a><span class="lineno">10218</span>&#160;VmaSuballocationList::iterator VmaBlockMetadata_Generic::FreeSuballocation(VmaSuballocationList::iterator suballocItem)</div>
+<div class="line"><a name="l10219"></a><span class="lineno">10219</span>&#160;{</div>
+<div class="line"><a name="l10220"></a><span class="lineno">10220</span>&#160;    <span class="comment">// Change this suballocation to be marked as free.</span></div>
+<div class="line"><a name="l10221"></a><span class="lineno">10221</span>&#160;    VmaSuballocation&amp; suballoc = *suballocItem;</div>
+<div class="line"><a name="l10222"></a><span class="lineno">10222</span>&#160;    suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;</div>
+<div class="line"><a name="l10223"></a><span class="lineno">10223</span>&#160;    suballoc.hAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l10224"></a><span class="lineno">10224</span>&#160; </div>
+<div class="line"><a name="l10225"></a><span class="lineno">10225</span>&#160;    <span class="comment">// Update totals.</span></div>
+<div class="line"><a name="l10226"></a><span class="lineno">10226</span>&#160;    ++m_FreeCount;</div>
+<div class="line"><a name="l10227"></a><span class="lineno">10227</span>&#160;    m_SumFreeSize += suballoc.size;</div>
+<div class="line"><a name="l10228"></a><span class="lineno">10228</span>&#160; </div>
+<div class="line"><a name="l10229"></a><span class="lineno">10229</span>&#160;    <span class="comment">// Merge with previous and/or next suballocation if it&#39;s also free.</span></div>
+<div class="line"><a name="l10230"></a><span class="lineno">10230</span>&#160;    <span class="keywordtype">bool</span> mergeWithNext = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l10231"></a><span class="lineno">10231</span>&#160;    <span class="keywordtype">bool</span> mergeWithPrev = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l10232"></a><span class="lineno">10232</span>&#160; </div>
+<div class="line"><a name="l10233"></a><span class="lineno">10233</span>&#160;    VmaSuballocationList::iterator nextItem = suballocItem;</div>
+<div class="line"><a name="l10234"></a><span class="lineno">10234</span>&#160;    ++nextItem;</div>
+<div class="line"><a name="l10235"></a><span class="lineno">10235</span>&#160;    <span class="keywordflow">if</span>((nextItem != m_Suballocations.end()) &amp;&amp; (nextItem-&gt;type == VMA_SUBALLOCATION_TYPE_FREE))</div>
+<div class="line"><a name="l10236"></a><span class="lineno">10236</span>&#160;    {</div>
+<div class="line"><a name="l10237"></a><span class="lineno">10237</span>&#160;        mergeWithNext = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l10238"></a><span class="lineno">10238</span>&#160;    }</div>
+<div class="line"><a name="l10239"></a><span class="lineno">10239</span>&#160; </div>
+<div class="line"><a name="l10240"></a><span class="lineno">10240</span>&#160;    VmaSuballocationList::iterator prevItem = suballocItem;</div>
+<div class="line"><a name="l10241"></a><span class="lineno">10241</span>&#160;    <span class="keywordflow">if</span>(suballocItem != m_Suballocations.begin())</div>
+<div class="line"><a name="l10242"></a><span class="lineno">10242</span>&#160;    {</div>
+<div class="line"><a name="l10243"></a><span class="lineno">10243</span>&#160;        --prevItem;</div>
+<div class="line"><a name="l10244"></a><span class="lineno">10244</span>&#160;        <span class="keywordflow">if</span>(prevItem-&gt;type == VMA_SUBALLOCATION_TYPE_FREE)</div>
+<div class="line"><a name="l10245"></a><span class="lineno">10245</span>&#160;        {</div>
+<div class="line"><a name="l10246"></a><span class="lineno">10246</span>&#160;            mergeWithPrev = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l10247"></a><span class="lineno">10247</span>&#160;        }</div>
+<div class="line"><a name="l10248"></a><span class="lineno">10248</span>&#160;    }</div>
+<div class="line"><a name="l10249"></a><span class="lineno">10249</span>&#160; </div>
+<div class="line"><a name="l10250"></a><span class="lineno">10250</span>&#160;    <span class="keywordflow">if</span>(mergeWithNext)</div>
+<div class="line"><a name="l10251"></a><span class="lineno">10251</span>&#160;    {</div>
+<div class="line"><a name="l10252"></a><span class="lineno">10252</span>&#160;        UnregisterFreeSuballocation(nextItem);</div>
+<div class="line"><a name="l10253"></a><span class="lineno">10253</span>&#160;        MergeFreeWithNext(suballocItem);</div>
+<div class="line"><a name="l10254"></a><span class="lineno">10254</span>&#160;    }</div>
+<div class="line"><a name="l10255"></a><span class="lineno">10255</span>&#160; </div>
+<div class="line"><a name="l10256"></a><span class="lineno">10256</span>&#160;    <span class="keywordflow">if</span>(mergeWithPrev)</div>
+<div class="line"><a name="l10257"></a><span class="lineno">10257</span>&#160;    {</div>
+<div class="line"><a name="l10258"></a><span class="lineno">10258</span>&#160;        UnregisterFreeSuballocation(prevItem);</div>
+<div class="line"><a name="l10259"></a><span class="lineno">10259</span>&#160;        MergeFreeWithNext(prevItem);</div>
+<div class="line"><a name="l10260"></a><span class="lineno">10260</span>&#160;        RegisterFreeSuballocation(prevItem);</div>
+<div class="line"><a name="l10261"></a><span class="lineno">10261</span>&#160;        <span class="keywordflow">return</span> prevItem;</div>
+<div class="line"><a name="l10262"></a><span class="lineno">10262</span>&#160;    }</div>
+<div class="line"><a name="l10263"></a><span class="lineno">10263</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10264"></a><span class="lineno">10264</span>&#160;    {</div>
+<div class="line"><a name="l10265"></a><span class="lineno">10265</span>&#160;        RegisterFreeSuballocation(suballocItem);</div>
+<div class="line"><a name="l10266"></a><span class="lineno">10266</span>&#160;        <span class="keywordflow">return</span> suballocItem;</div>
+<div class="line"><a name="l10267"></a><span class="lineno">10267</span>&#160;    }</div>
+<div class="line"><a name="l10268"></a><span class="lineno">10268</span>&#160;}</div>
+<div class="line"><a name="l10269"></a><span class="lineno">10269</span>&#160; </div>
+<div class="line"><a name="l10270"></a><span class="lineno">10270</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Generic::RegisterFreeSuballocation(VmaSuballocationList::iterator item)</div>
+<div class="line"><a name="l10271"></a><span class="lineno">10271</span>&#160;{</div>
+<div class="line"><a name="l10272"></a><span class="lineno">10272</span>&#160;    VMA_ASSERT(item-&gt;type == VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l10273"></a><span class="lineno">10273</span>&#160;    VMA_ASSERT(item-&gt;size &gt; 0);</div>
+<div class="line"><a name="l10274"></a><span class="lineno">10274</span>&#160; </div>
+<div class="line"><a name="l10275"></a><span class="lineno">10275</span>&#160;    <span class="comment">// You may want to enable this validation at the beginning or at the end of</span></div>
+<div class="line"><a name="l10276"></a><span class="lineno">10276</span>&#160;    <span class="comment">// this function, depending on what do you want to check.</span></div>
+<div class="line"><a name="l10277"></a><span class="lineno">10277</span>&#160;    VMA_HEAVY_ASSERT(ValidateFreeSuballocationList());</div>
+<div class="line"><a name="l10278"></a><span class="lineno">10278</span>&#160; </div>
+<div class="line"><a name="l10279"></a><span class="lineno">10279</span>&#160;    <span class="keywordflow">if</span>(item-&gt;size &gt;= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)</div>
+<div class="line"><a name="l10280"></a><span class="lineno">10280</span>&#160;    {</div>
+<div class="line"><a name="l10281"></a><span class="lineno">10281</span>&#160;        <span class="keywordflow">if</span>(m_FreeSuballocationsBySize.empty())</div>
+<div class="line"><a name="l10282"></a><span class="lineno">10282</span>&#160;        {</div>
+<div class="line"><a name="l10283"></a><span class="lineno">10283</span>&#160;            m_FreeSuballocationsBySize.push_back(item);</div>
+<div class="line"><a name="l10284"></a><span class="lineno">10284</span>&#160;        }</div>
+<div class="line"><a name="l10285"></a><span class="lineno">10285</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10286"></a><span class="lineno">10286</span>&#160;        {</div>
+<div class="line"><a name="l10287"></a><span class="lineno">10287</span>&#160;            VmaVectorInsertSorted&lt;VmaSuballocationItemSizeLess&gt;(m_FreeSuballocationsBySize, item);</div>
+<div class="line"><a name="l10288"></a><span class="lineno">10288</span>&#160;        }</div>
+<div class="line"><a name="l10289"></a><span class="lineno">10289</span>&#160;    }</div>
+<div class="line"><a name="l10290"></a><span class="lineno">10290</span>&#160; </div>
+<div class="line"><a name="l10291"></a><span class="lineno">10291</span>&#160;    <span class="comment">//VMA_HEAVY_ASSERT(ValidateFreeSuballocationList());</span></div>
+<div class="line"><a name="l10292"></a><span class="lineno">10292</span>&#160;}</div>
+<div class="line"><a name="l10293"></a><span class="lineno">10293</span>&#160; </div>
 <div class="line"><a name="l10294"></a><span class="lineno">10294</span>&#160; </div>
-<div class="line"><a name="l10295"></a><span class="lineno">10295</span>&#160; </div>
-<div class="line"><a name="l10296"></a><span class="lineno">10296</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Generic::UnregisterFreeSuballocation(VmaSuballocationList::iterator item)</div>
-<div class="line"><a name="l10297"></a><span class="lineno">10297</span>&#160;{</div>
-<div class="line"><a name="l10298"></a><span class="lineno">10298</span>&#160;    VMA_ASSERT(item-&gt;type == VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l10299"></a><span class="lineno">10299</span>&#160;    VMA_ASSERT(item-&gt;size &gt; 0);</div>
-<div class="line"><a name="l10300"></a><span class="lineno">10300</span>&#160; </div>
-<div class="line"><a name="l10301"></a><span class="lineno">10301</span>&#160;    <span class="comment">// You may want to enable this validation at the beginning or at the end of</span></div>
-<div class="line"><a name="l10302"></a><span class="lineno">10302</span>&#160;    <span class="comment">// this function, depending on what do you want to check.</span></div>
-<div class="line"><a name="l10303"></a><span class="lineno">10303</span>&#160;    VMA_HEAVY_ASSERT(ValidateFreeSuballocationList());</div>
-<div class="line"><a name="l10304"></a><span class="lineno">10304</span>&#160; </div>
-<div class="line"><a name="l10305"></a><span class="lineno">10305</span>&#160;    <span class="keywordflow">if</span>(item-&gt;size &gt;= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)</div>
-<div class="line"><a name="l10306"></a><span class="lineno">10306</span>&#160;    {</div>
-<div class="line"><a name="l10307"></a><span class="lineno">10307</span>&#160;        VmaSuballocationList::iterator* <span class="keyword">const</span> it = VmaBinaryFindFirstNotLess(</div>
-<div class="line"><a name="l10308"></a><span class="lineno">10308</span>&#160;            m_FreeSuballocationsBySize.data(),</div>
-<div class="line"><a name="l10309"></a><span class="lineno">10309</span>&#160;            m_FreeSuballocationsBySize.data() + m_FreeSuballocationsBySize.size(),</div>
-<div class="line"><a name="l10310"></a><span class="lineno">10310</span>&#160;            item,</div>
-<div class="line"><a name="l10311"></a><span class="lineno">10311</span>&#160;            VmaSuballocationItemSizeLess());</div>
-<div class="line"><a name="l10312"></a><span class="lineno">10312</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> index = it - m_FreeSuballocationsBySize.data();</div>
-<div class="line"><a name="l10313"></a><span class="lineno">10313</span>&#160;            index &lt; m_FreeSuballocationsBySize.size();</div>
-<div class="line"><a name="l10314"></a><span class="lineno">10314</span>&#160;            ++index)</div>
-<div class="line"><a name="l10315"></a><span class="lineno">10315</span>&#160;        {</div>
-<div class="line"><a name="l10316"></a><span class="lineno">10316</span>&#160;            <span class="keywordflow">if</span>(m_FreeSuballocationsBySize[index] == item)</div>
-<div class="line"><a name="l10317"></a><span class="lineno">10317</span>&#160;            {</div>
-<div class="line"><a name="l10318"></a><span class="lineno">10318</span>&#160;                VmaVectorRemove(m_FreeSuballocationsBySize, index);</div>
-<div class="line"><a name="l10319"></a><span class="lineno">10319</span>&#160;                <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l10320"></a><span class="lineno">10320</span>&#160;            }</div>
-<div class="line"><a name="l10321"></a><span class="lineno">10321</span>&#160;            VMA_ASSERT((m_FreeSuballocationsBySize[index]-&gt;size == item-&gt;size) &amp;&amp; <span class="stringliteral">&quot;Not found.&quot;</span>);</div>
-<div class="line"><a name="l10322"></a><span class="lineno">10322</span>&#160;        }</div>
-<div class="line"><a name="l10323"></a><span class="lineno">10323</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Not found.&quot;</span>);</div>
-<div class="line"><a name="l10324"></a><span class="lineno">10324</span>&#160;    }</div>
-<div class="line"><a name="l10325"></a><span class="lineno">10325</span>&#160; </div>
-<div class="line"><a name="l10326"></a><span class="lineno">10326</span>&#160;    <span class="comment">//VMA_HEAVY_ASSERT(ValidateFreeSuballocationList());</span></div>
-<div class="line"><a name="l10327"></a><span class="lineno">10327</span>&#160;}</div>
-<div class="line"><a name="l10328"></a><span class="lineno">10328</span>&#160; </div>
-<div class="line"><a name="l10329"></a><span class="lineno">10329</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Generic::IsBufferImageGranularityConflictPossible(</div>
-<div class="line"><a name="l10330"></a><span class="lineno">10330</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
-<div class="line"><a name="l10331"></a><span class="lineno">10331</span>&#160;    VmaSuballocationType&amp; inOutPrevSuballocType)<span class="keyword"> const</span></div>
-<div class="line"><a name="l10332"></a><span class="lineno">10332</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l10333"></a><span class="lineno">10333</span>&#160;    <span class="keywordflow">if</span>(bufferImageGranularity == 1 || IsEmpty())</div>
-<div class="line"><a name="l10334"></a><span class="lineno">10334</span>&#160;    {</div>
-<div class="line"><a name="l10335"></a><span class="lineno">10335</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l10336"></a><span class="lineno">10336</span>&#160;    }</div>
-<div class="line"><a name="l10337"></a><span class="lineno">10337</span>&#160; </div>
-<div class="line"><a name="l10338"></a><span class="lineno">10338</span>&#160;    VkDeviceSize minAlignment = VK_WHOLE_SIZE;</div>
-<div class="line"><a name="l10339"></a><span class="lineno">10339</span>&#160;    <span class="keywordtype">bool</span> typeConflictFound = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l10340"></a><span class="lineno">10340</span>&#160;    <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span>&amp; suballoc : m_Suballocations)</div>
-<div class="line"><a name="l10341"></a><span class="lineno">10341</span>&#160;    {</div>
-<div class="line"><a name="l10342"></a><span class="lineno">10342</span>&#160;        <span class="keyword">const</span> VmaSuballocationType suballocType = suballoc.type;</div>
-<div class="line"><a name="l10343"></a><span class="lineno">10343</span>&#160;        <span class="keywordflow">if</span>(suballocType != VMA_SUBALLOCATION_TYPE_FREE)</div>
-<div class="line"><a name="l10344"></a><span class="lineno">10344</span>&#160;        {</div>
-<div class="line"><a name="l10345"></a><span class="lineno">10345</span>&#160;            minAlignment = VMA_MIN(minAlignment, suballoc.hAllocation-&gt;GetAlignment());</div>
-<div class="line"><a name="l10346"></a><span class="lineno">10346</span>&#160;            <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(inOutPrevSuballocType, suballocType))</div>
-<div class="line"><a name="l10347"></a><span class="lineno">10347</span>&#160;            {</div>
-<div class="line"><a name="l10348"></a><span class="lineno">10348</span>&#160;                typeConflictFound = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l10349"></a><span class="lineno">10349</span>&#160;            }</div>
-<div class="line"><a name="l10350"></a><span class="lineno">10350</span>&#160;            inOutPrevSuballocType = suballocType;</div>
-<div class="line"><a name="l10351"></a><span class="lineno">10351</span>&#160;        }</div>
-<div class="line"><a name="l10352"></a><span class="lineno">10352</span>&#160;    }</div>
-<div class="line"><a name="l10353"></a><span class="lineno">10353</span>&#160; </div>
-<div class="line"><a name="l10354"></a><span class="lineno">10354</span>&#160;    <span class="keywordflow">return</span> typeConflictFound || minAlignment &gt;= bufferImageGranularity;</div>
-<div class="line"><a name="l10355"></a><span class="lineno">10355</span>&#160;}</div>
-<div class="line"><a name="l10356"></a><span class="lineno">10356</span>&#160; </div>
-<div class="line"><a name="l10358"></a><span class="lineno">10358</span>&#160;<span class="comment">// class VmaBlockMetadata_Linear</span></div>
-<div class="line"><a name="l10359"></a><span class="lineno">10359</span>&#160; </div>
-<div class="line"><a name="l10360"></a><span class="lineno">10360</span>&#160;VmaBlockMetadata_Linear::VmaBlockMetadata_Linear(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator) :</div>
-<div class="line"><a name="l10361"></a><span class="lineno">10361</span>&#160;    VmaBlockMetadata(hAllocator),</div>
-<div class="line"><a name="l10362"></a><span class="lineno">10362</span>&#160;    m_SumFreeSize(0),</div>
-<div class="line"><a name="l10363"></a><span class="lineno">10363</span>&#160;    m_Suballocations0(VmaStlAllocator&lt;VmaSuballocation&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
-<div class="line"><a name="l10364"></a><span class="lineno">10364</span>&#160;    m_Suballocations1(VmaStlAllocator&lt;VmaSuballocation&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
-<div class="line"><a name="l10365"></a><span class="lineno">10365</span>&#160;    m_1stVectorIndex(0),</div>
-<div class="line"><a name="l10366"></a><span class="lineno">10366</span>&#160;    m_2ndVectorMode(SECOND_VECTOR_EMPTY),</div>
-<div class="line"><a name="l10367"></a><span class="lineno">10367</span>&#160;    m_1stNullItemsBeginCount(0),</div>
-<div class="line"><a name="l10368"></a><span class="lineno">10368</span>&#160;    m_1stNullItemsMiddleCount(0),</div>
-<div class="line"><a name="l10369"></a><span class="lineno">10369</span>&#160;    m_2ndNullItemsCount(0)</div>
-<div class="line"><a name="l10370"></a><span class="lineno">10370</span>&#160;{</div>
-<div class="line"><a name="l10371"></a><span class="lineno">10371</span>&#160;}</div>
-<div class="line"><a name="l10372"></a><span class="lineno">10372</span>&#160; </div>
-<div class="line"><a name="l10373"></a><span class="lineno">10373</span>&#160;VmaBlockMetadata_Linear::~VmaBlockMetadata_Linear()</div>
-<div class="line"><a name="l10374"></a><span class="lineno">10374</span>&#160;{</div>
-<div class="line"><a name="l10375"></a><span class="lineno">10375</span>&#160;}</div>
-<div class="line"><a name="l10376"></a><span class="lineno">10376</span>&#160; </div>
-<div class="line"><a name="l10377"></a><span class="lineno">10377</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::Init(VkDeviceSize size)</div>
-<div class="line"><a name="l10378"></a><span class="lineno">10378</span>&#160;{</div>
-<div class="line"><a name="l10379"></a><span class="lineno">10379</span>&#160;    VmaBlockMetadata::Init(size);</div>
-<div class="line"><a name="l10380"></a><span class="lineno">10380</span>&#160;    m_SumFreeSize = size;</div>
-<div class="line"><a name="l10381"></a><span class="lineno">10381</span>&#160;}</div>
-<div class="line"><a name="l10382"></a><span class="lineno">10382</span>&#160; </div>
-<div class="line"><a name="l10383"></a><span class="lineno">10383</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Linear::Validate()<span class="keyword"> const</span></div>
-<div class="line"><a name="l10384"></a><span class="lineno">10384</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l10385"></a><span class="lineno">10385</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
-<div class="line"><a name="l10386"></a><span class="lineno">10386</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
-<div class="line"><a name="l10387"></a><span class="lineno">10387</span>&#160; </div>
-<div class="line"><a name="l10388"></a><span class="lineno">10388</span>&#160;    VMA_VALIDATE(suballocations2nd.empty() == (m_2ndVectorMode == SECOND_VECTOR_EMPTY));</div>
-<div class="line"><a name="l10389"></a><span class="lineno">10389</span>&#160;    VMA_VALIDATE(!suballocations1st.empty() ||</div>
-<div class="line"><a name="l10390"></a><span class="lineno">10390</span>&#160;        suballocations2nd.empty() ||</div>
-<div class="line"><a name="l10391"></a><span class="lineno">10391</span>&#160;        m_2ndVectorMode != SECOND_VECTOR_RING_BUFFER);</div>
-<div class="line"><a name="l10392"></a><span class="lineno">10392</span>&#160; </div>
-<div class="line"><a name="l10393"></a><span class="lineno">10393</span>&#160;    <span class="keywordflow">if</span>(!suballocations1st.empty())</div>
-<div class="line"><a name="l10394"></a><span class="lineno">10394</span>&#160;    {</div>
-<div class="line"><a name="l10395"></a><span class="lineno">10395</span>&#160;        <span class="comment">// Null item at the beginning should be accounted into m_1stNullItemsBeginCount.</span></div>
-<div class="line"><a name="l10396"></a><span class="lineno">10396</span>&#160;        VMA_VALIDATE(suballocations1st[m_1stNullItemsBeginCount].hAllocation != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l10397"></a><span class="lineno">10397</span>&#160;        <span class="comment">// Null item at the end should be just pop_back().</span></div>
-<div class="line"><a name="l10398"></a><span class="lineno">10398</span>&#160;        VMA_VALIDATE(suballocations1st.back().hAllocation != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l10399"></a><span class="lineno">10399</span>&#160;    }</div>
-<div class="line"><a name="l10400"></a><span class="lineno">10400</span>&#160;    <span class="keywordflow">if</span>(!suballocations2nd.empty())</div>
-<div class="line"><a name="l10401"></a><span class="lineno">10401</span>&#160;    {</div>
-<div class="line"><a name="l10402"></a><span class="lineno">10402</span>&#160;        <span class="comment">// Null item at the end should be just pop_back().</span></div>
-<div class="line"><a name="l10403"></a><span class="lineno">10403</span>&#160;        VMA_VALIDATE(suballocations2nd.back().hAllocation != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l10404"></a><span class="lineno">10404</span>&#160;    }</div>
-<div class="line"><a name="l10405"></a><span class="lineno">10405</span>&#160; </div>
-<div class="line"><a name="l10406"></a><span class="lineno">10406</span>&#160;    VMA_VALIDATE(m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount &lt;= suballocations1st.size());</div>
-<div class="line"><a name="l10407"></a><span class="lineno">10407</span>&#160;    VMA_VALIDATE(m_2ndNullItemsCount &lt;= suballocations2nd.size());</div>
-<div class="line"><a name="l10408"></a><span class="lineno">10408</span>&#160; </div>
-<div class="line"><a name="l10409"></a><span class="lineno">10409</span>&#160;    VkDeviceSize sumUsedSize = 0;</div>
-<div class="line"><a name="l10410"></a><span class="lineno">10410</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc1stCount = suballocations1st.size();</div>
-<div class="line"><a name="l10411"></a><span class="lineno">10411</span>&#160;    VkDeviceSize offset = VMA_DEBUG_MARGIN;</div>
-<div class="line"><a name="l10412"></a><span class="lineno">10412</span>&#160; </div>
-<div class="line"><a name="l10413"></a><span class="lineno">10413</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
-<div class="line"><a name="l10414"></a><span class="lineno">10414</span>&#160;    {</div>
-<div class="line"><a name="l10415"></a><span class="lineno">10415</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc2ndCount = suballocations2nd.size();</div>
-<div class="line"><a name="l10416"></a><span class="lineno">10416</span>&#160;        <span class="keywordtype">size_t</span> nullItem2ndCount = 0;</div>
-<div class="line"><a name="l10417"></a><span class="lineno">10417</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; suballoc2ndCount; ++i)</div>
-<div class="line"><a name="l10418"></a><span class="lineno">10418</span>&#160;        {</div>
-<div class="line"><a name="l10419"></a><span class="lineno">10419</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[i];</div>
-<div class="line"><a name="l10420"></a><span class="lineno">10420</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">bool</span> currFree = (suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l10421"></a><span class="lineno">10421</span>&#160; </div>
-<div class="line"><a name="l10422"></a><span class="lineno">10422</span>&#160;            VMA_VALIDATE(currFree == (suballoc.hAllocation == VK_NULL_HANDLE));</div>
-<div class="line"><a name="l10423"></a><span class="lineno">10423</span>&#160;            VMA_VALIDATE(suballoc.offset &gt;= offset);</div>
-<div class="line"><a name="l10424"></a><span class="lineno">10424</span>&#160; </div>
-<div class="line"><a name="l10425"></a><span class="lineno">10425</span>&#160;            <span class="keywordflow">if</span>(!currFree)</div>
-<div class="line"><a name="l10426"></a><span class="lineno">10426</span>&#160;            {</div>
-<div class="line"><a name="l10427"></a><span class="lineno">10427</span>&#160;                VMA_VALIDATE(suballoc.hAllocation-&gt;GetOffset() == suballoc.offset);</div>
-<div class="line"><a name="l10428"></a><span class="lineno">10428</span>&#160;                VMA_VALIDATE(suballoc.hAllocation-&gt;GetSize() == suballoc.size);</div>
-<div class="line"><a name="l10429"></a><span class="lineno">10429</span>&#160;                sumUsedSize += suballoc.size;</div>
-<div class="line"><a name="l10430"></a><span class="lineno">10430</span>&#160;            }</div>
-<div class="line"><a name="l10431"></a><span class="lineno">10431</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10432"></a><span class="lineno">10432</span>&#160;            {</div>
-<div class="line"><a name="l10433"></a><span class="lineno">10433</span>&#160;                ++nullItem2ndCount;</div>
-<div class="line"><a name="l10434"></a><span class="lineno">10434</span>&#160;            }</div>
-<div class="line"><a name="l10435"></a><span class="lineno">10435</span>&#160; </div>
-<div class="line"><a name="l10436"></a><span class="lineno">10436</span>&#160;            offset = suballoc.offset + suballoc.size + VMA_DEBUG_MARGIN;</div>
-<div class="line"><a name="l10437"></a><span class="lineno">10437</span>&#160;        }</div>
-<div class="line"><a name="l10438"></a><span class="lineno">10438</span>&#160; </div>
-<div class="line"><a name="l10439"></a><span class="lineno">10439</span>&#160;        VMA_VALIDATE(nullItem2ndCount == m_2ndNullItemsCount);</div>
-<div class="line"><a name="l10440"></a><span class="lineno">10440</span>&#160;    }</div>
-<div class="line"><a name="l10441"></a><span class="lineno">10441</span>&#160; </div>
-<div class="line"><a name="l10442"></a><span class="lineno">10442</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; m_1stNullItemsBeginCount; ++i)</div>
-<div class="line"><a name="l10443"></a><span class="lineno">10443</span>&#160;    {</div>
-<div class="line"><a name="l10444"></a><span class="lineno">10444</span>&#160;        <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[i];</div>
-<div class="line"><a name="l10445"></a><span class="lineno">10445</span>&#160;        VMA_VALIDATE(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE &amp;&amp;</div>
-<div class="line"><a name="l10446"></a><span class="lineno">10446</span>&#160;            suballoc.hAllocation == VK_NULL_HANDLE);</div>
-<div class="line"><a name="l10447"></a><span class="lineno">10447</span>&#160;    }</div>
-<div class="line"><a name="l10448"></a><span class="lineno">10448</span>&#160; </div>
-<div class="line"><a name="l10449"></a><span class="lineno">10449</span>&#160;    <span class="keywordtype">size_t</span> nullItem1stCount = m_1stNullItemsBeginCount;</div>
-<div class="line"><a name="l10450"></a><span class="lineno">10450</span>&#160; </div>
-<div class="line"><a name="l10451"></a><span class="lineno">10451</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_1stNullItemsBeginCount; i &lt; suballoc1stCount; ++i)</div>
-<div class="line"><a name="l10452"></a><span class="lineno">10452</span>&#160;    {</div>
-<div class="line"><a name="l10453"></a><span class="lineno">10453</span>&#160;        <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[i];</div>
-<div class="line"><a name="l10454"></a><span class="lineno">10454</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">bool</span> currFree = (suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l10455"></a><span class="lineno">10455</span>&#160; </div>
-<div class="line"><a name="l10456"></a><span class="lineno">10456</span>&#160;        VMA_VALIDATE(currFree == (suballoc.hAllocation == VK_NULL_HANDLE));</div>
-<div class="line"><a name="l10457"></a><span class="lineno">10457</span>&#160;        VMA_VALIDATE(suballoc.offset &gt;= offset);</div>
-<div class="line"><a name="l10458"></a><span class="lineno">10458</span>&#160;        VMA_VALIDATE(i &gt;= m_1stNullItemsBeginCount || currFree);</div>
-<div class="line"><a name="l10459"></a><span class="lineno">10459</span>&#160; </div>
-<div class="line"><a name="l10460"></a><span class="lineno">10460</span>&#160;        <span class="keywordflow">if</span>(!currFree)</div>
-<div class="line"><a name="l10461"></a><span class="lineno">10461</span>&#160;        {</div>
-<div class="line"><a name="l10462"></a><span class="lineno">10462</span>&#160;            VMA_VALIDATE(suballoc.hAllocation-&gt;GetOffset() == suballoc.offset);</div>
-<div class="line"><a name="l10463"></a><span class="lineno">10463</span>&#160;            VMA_VALIDATE(suballoc.hAllocation-&gt;GetSize() == suballoc.size);</div>
-<div class="line"><a name="l10464"></a><span class="lineno">10464</span>&#160;            sumUsedSize += suballoc.size;</div>
-<div class="line"><a name="l10465"></a><span class="lineno">10465</span>&#160;        }</div>
-<div class="line"><a name="l10466"></a><span class="lineno">10466</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10467"></a><span class="lineno">10467</span>&#160;        {</div>
-<div class="line"><a name="l10468"></a><span class="lineno">10468</span>&#160;            ++nullItem1stCount;</div>
-<div class="line"><a name="l10469"></a><span class="lineno">10469</span>&#160;        }</div>
-<div class="line"><a name="l10470"></a><span class="lineno">10470</span>&#160; </div>
-<div class="line"><a name="l10471"></a><span class="lineno">10471</span>&#160;        offset = suballoc.offset + suballoc.size + VMA_DEBUG_MARGIN;</div>
-<div class="line"><a name="l10472"></a><span class="lineno">10472</span>&#160;    }</div>
-<div class="line"><a name="l10473"></a><span class="lineno">10473</span>&#160;    VMA_VALIDATE(nullItem1stCount == m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount);</div>
-<div class="line"><a name="l10474"></a><span class="lineno">10474</span>&#160; </div>
-<div class="line"><a name="l10475"></a><span class="lineno">10475</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
-<div class="line"><a name="l10476"></a><span class="lineno">10476</span>&#160;    {</div>
-<div class="line"><a name="l10477"></a><span class="lineno">10477</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc2ndCount = suballocations2nd.size();</div>
-<div class="line"><a name="l10478"></a><span class="lineno">10478</span>&#160;        <span class="keywordtype">size_t</span> nullItem2ndCount = 0;</div>
-<div class="line"><a name="l10479"></a><span class="lineno">10479</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = suballoc2ndCount; i--; )</div>
-<div class="line"><a name="l10480"></a><span class="lineno">10480</span>&#160;        {</div>
-<div class="line"><a name="l10481"></a><span class="lineno">10481</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[i];</div>
-<div class="line"><a name="l10482"></a><span class="lineno">10482</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">bool</span> currFree = (suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l10483"></a><span class="lineno">10483</span>&#160; </div>
-<div class="line"><a name="l10484"></a><span class="lineno">10484</span>&#160;            VMA_VALIDATE(currFree == (suballoc.hAllocation == VK_NULL_HANDLE));</div>
-<div class="line"><a name="l10485"></a><span class="lineno">10485</span>&#160;            VMA_VALIDATE(suballoc.offset &gt;= offset);</div>
-<div class="line"><a name="l10486"></a><span class="lineno">10486</span>&#160; </div>
-<div class="line"><a name="l10487"></a><span class="lineno">10487</span>&#160;            <span class="keywordflow">if</span>(!currFree)</div>
-<div class="line"><a name="l10488"></a><span class="lineno">10488</span>&#160;            {</div>
-<div class="line"><a name="l10489"></a><span class="lineno">10489</span>&#160;                VMA_VALIDATE(suballoc.hAllocation-&gt;GetOffset() == suballoc.offset);</div>
-<div class="line"><a name="l10490"></a><span class="lineno">10490</span>&#160;                VMA_VALIDATE(suballoc.hAllocation-&gt;GetSize() == suballoc.size);</div>
-<div class="line"><a name="l10491"></a><span class="lineno">10491</span>&#160;                sumUsedSize += suballoc.size;</div>
-<div class="line"><a name="l10492"></a><span class="lineno">10492</span>&#160;            }</div>
-<div class="line"><a name="l10493"></a><span class="lineno">10493</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10494"></a><span class="lineno">10494</span>&#160;            {</div>
-<div class="line"><a name="l10495"></a><span class="lineno">10495</span>&#160;                ++nullItem2ndCount;</div>
-<div class="line"><a name="l10496"></a><span class="lineno">10496</span>&#160;            }</div>
-<div class="line"><a name="l10497"></a><span class="lineno">10497</span>&#160; </div>
-<div class="line"><a name="l10498"></a><span class="lineno">10498</span>&#160;            offset = suballoc.offset + suballoc.size + VMA_DEBUG_MARGIN;</div>
-<div class="line"><a name="l10499"></a><span class="lineno">10499</span>&#160;        }</div>
-<div class="line"><a name="l10500"></a><span class="lineno">10500</span>&#160; </div>
-<div class="line"><a name="l10501"></a><span class="lineno">10501</span>&#160;        VMA_VALIDATE(nullItem2ndCount == m_2ndNullItemsCount);</div>
-<div class="line"><a name="l10502"></a><span class="lineno">10502</span>&#160;    }</div>
-<div class="line"><a name="l10503"></a><span class="lineno">10503</span>&#160; </div>
-<div class="line"><a name="l10504"></a><span class="lineno">10504</span>&#160;    VMA_VALIDATE(offset &lt;= GetSize());</div>
-<div class="line"><a name="l10505"></a><span class="lineno">10505</span>&#160;    VMA_VALIDATE(m_SumFreeSize == GetSize() - sumUsedSize);</div>
-<div class="line"><a name="l10506"></a><span class="lineno">10506</span>&#160; </div>
-<div class="line"><a name="l10507"></a><span class="lineno">10507</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l10508"></a><span class="lineno">10508</span>&#160;}</div>
-<div class="line"><a name="l10509"></a><span class="lineno">10509</span>&#160; </div>
-<div class="line"><a name="l10510"></a><span class="lineno">10510</span>&#160;<span class="keywordtype">size_t</span> VmaBlockMetadata_Linear::GetAllocationCount()<span class="keyword"> const</span></div>
-<div class="line"><a name="l10511"></a><span class="lineno">10511</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l10512"></a><span class="lineno">10512</span>&#160;    <span class="keywordflow">return</span> AccessSuballocations1st().size() - (m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount) +</div>
-<div class="line"><a name="l10513"></a><span class="lineno">10513</span>&#160;        AccessSuballocations2nd().size() - m_2ndNullItemsCount;</div>
-<div class="line"><a name="l10514"></a><span class="lineno">10514</span>&#160;}</div>
-<div class="line"><a name="l10515"></a><span class="lineno">10515</span>&#160; </div>
-<div class="line"><a name="l10516"></a><span class="lineno">10516</span>&#160;VkDeviceSize VmaBlockMetadata_Linear::GetUnusedRangeSizeMax()<span class="keyword"> const</span></div>
-<div class="line"><a name="l10517"></a><span class="lineno">10517</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l10518"></a><span class="lineno">10518</span>&#160;    <span class="keyword">const</span> VkDeviceSize size = GetSize();</div>
-<div class="line"><a name="l10519"></a><span class="lineno">10519</span>&#160; </div>
-<div class="line"><a name="l10520"></a><span class="lineno">10520</span>&#160;    <span class="comment">/*</span></div>
-<div class="line"><a name="l10521"></a><span class="lineno">10521</span>&#160;<span class="comment">    We don&#39;t consider gaps inside allocation vectors with freed allocations because</span></div>
-<div class="line"><a name="l10522"></a><span class="lineno">10522</span>&#160;<span class="comment">    they are not suitable for reuse in linear allocator. We consider only space that</span></div>
-<div class="line"><a name="l10523"></a><span class="lineno">10523</span>&#160;<span class="comment">    is available for new allocations.</span></div>
-<div class="line"><a name="l10524"></a><span class="lineno">10524</span>&#160;<span class="comment">    */</span></div>
-<div class="line"><a name="l10525"></a><span class="lineno">10525</span>&#160;    <span class="keywordflow">if</span>(IsEmpty())</div>
-<div class="line"><a name="l10526"></a><span class="lineno">10526</span>&#160;    {</div>
-<div class="line"><a name="l10527"></a><span class="lineno">10527</span>&#160;        <span class="keywordflow">return</span> size;</div>
-<div class="line"><a name="l10528"></a><span class="lineno">10528</span>&#160;    }</div>
-<div class="line"><a name="l10529"></a><span class="lineno">10529</span>&#160; </div>
-<div class="line"><a name="l10530"></a><span class="lineno">10530</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
-<div class="line"><a name="l10531"></a><span class="lineno">10531</span>&#160; </div>
-<div class="line"><a name="l10532"></a><span class="lineno">10532</span>&#160;    <span class="keywordflow">switch</span>(m_2ndVectorMode)</div>
-<div class="line"><a name="l10533"></a><span class="lineno">10533</span>&#160;    {</div>
-<div class="line"><a name="l10534"></a><span class="lineno">10534</span>&#160;    <span class="keywordflow">case</span> SECOND_VECTOR_EMPTY:</div>
-<div class="line"><a name="l10535"></a><span class="lineno">10535</span>&#160;        <span class="comment">/*</span></div>
-<div class="line"><a name="l10536"></a><span class="lineno">10536</span>&#160;<span class="comment">        Available space is after end of 1st, as well as before beginning of 1st (which</span></div>
-<div class="line"><a name="l10537"></a><span class="lineno">10537</span>&#160;<span class="comment">        would make it a ring buffer).</span></div>
-<div class="line"><a name="l10538"></a><span class="lineno">10538</span>&#160;<span class="comment">        */</span></div>
-<div class="line"><a name="l10539"></a><span class="lineno">10539</span>&#160;        {</div>
-<div class="line"><a name="l10540"></a><span class="lineno">10540</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballocations1stCount = suballocations1st.size();</div>
-<div class="line"><a name="l10541"></a><span class="lineno">10541</span>&#160;            VMA_ASSERT(suballocations1stCount &gt; m_1stNullItemsBeginCount);</div>
-<div class="line"><a name="l10542"></a><span class="lineno">10542</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; firstSuballoc = suballocations1st[m_1stNullItemsBeginCount];</div>
-<div class="line"><a name="l10543"></a><span class="lineno">10543</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; lastSuballoc  = suballocations1st[suballocations1stCount - 1];</div>
-<div class="line"><a name="l10544"></a><span class="lineno">10544</span>&#160;            <span class="keywordflow">return</span> VMA_MAX(</div>
-<div class="line"><a name="l10545"></a><span class="lineno">10545</span>&#160;                firstSuballoc.offset,</div>
-<div class="line"><a name="l10546"></a><span class="lineno">10546</span>&#160;                size - (lastSuballoc.offset + lastSuballoc.size));</div>
-<div class="line"><a name="l10547"></a><span class="lineno">10547</span>&#160;        }</div>
-<div class="line"><a name="l10548"></a><span class="lineno">10548</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l10549"></a><span class="lineno">10549</span>&#160; </div>
-<div class="line"><a name="l10550"></a><span class="lineno">10550</span>&#160;    <span class="keywordflow">case</span> SECOND_VECTOR_RING_BUFFER:</div>
-<div class="line"><a name="l10551"></a><span class="lineno">10551</span>&#160;        <span class="comment">/*</span></div>
-<div class="line"><a name="l10552"></a><span class="lineno">10552</span>&#160;<span class="comment">        Available space is only between end of 2nd and beginning of 1st.</span></div>
-<div class="line"><a name="l10553"></a><span class="lineno">10553</span>&#160;<span class="comment">        */</span></div>
-<div class="line"><a name="l10554"></a><span class="lineno">10554</span>&#160;        {</div>
-<div class="line"><a name="l10555"></a><span class="lineno">10555</span>&#160;            <span class="keyword">const</span> SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
-<div class="line"><a name="l10556"></a><span class="lineno">10556</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; lastSuballoc2nd = suballocations2nd.back();</div>
-<div class="line"><a name="l10557"></a><span class="lineno">10557</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; firstSuballoc1st = suballocations1st[m_1stNullItemsBeginCount];</div>
-<div class="line"><a name="l10558"></a><span class="lineno">10558</span>&#160;            <span class="keywordflow">return</span> firstSuballoc1st.offset - (lastSuballoc2nd.offset + lastSuballoc2nd.size);</div>
-<div class="line"><a name="l10559"></a><span class="lineno">10559</span>&#160;        }</div>
-<div class="line"><a name="l10560"></a><span class="lineno">10560</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l10561"></a><span class="lineno">10561</span>&#160; </div>
-<div class="line"><a name="l10562"></a><span class="lineno">10562</span>&#160;    <span class="keywordflow">case</span> SECOND_VECTOR_DOUBLE_STACK:</div>
-<div class="line"><a name="l10563"></a><span class="lineno">10563</span>&#160;        <span class="comment">/*</span></div>
-<div class="line"><a name="l10564"></a><span class="lineno">10564</span>&#160;<span class="comment">        Available space is only between end of 1st and top of 2nd.</span></div>
-<div class="line"><a name="l10565"></a><span class="lineno">10565</span>&#160;<span class="comment">        */</span></div>
-<div class="line"><a name="l10566"></a><span class="lineno">10566</span>&#160;        {</div>
-<div class="line"><a name="l10567"></a><span class="lineno">10567</span>&#160;            <span class="keyword">const</span> SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
-<div class="line"><a name="l10568"></a><span class="lineno">10568</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; topSuballoc2nd = suballocations2nd.back();</div>
-<div class="line"><a name="l10569"></a><span class="lineno">10569</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; lastSuballoc1st = suballocations1st.back();</div>
-<div class="line"><a name="l10570"></a><span class="lineno">10570</span>&#160;            <span class="keywordflow">return</span> topSuballoc2nd.offset - (lastSuballoc1st.offset + lastSuballoc1st.size);</div>
-<div class="line"><a name="l10571"></a><span class="lineno">10571</span>&#160;        }</div>
-<div class="line"><a name="l10572"></a><span class="lineno">10572</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l10573"></a><span class="lineno">10573</span>&#160; </div>
-<div class="line"><a name="l10574"></a><span class="lineno">10574</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l10575"></a><span class="lineno">10575</span>&#160;        VMA_ASSERT(0);</div>
-<div class="line"><a name="l10576"></a><span class="lineno">10576</span>&#160;        <span class="keywordflow">return</span> 0;</div>
-<div class="line"><a name="l10577"></a><span class="lineno">10577</span>&#160;    }</div>
-<div class="line"><a name="l10578"></a><span class="lineno">10578</span>&#160;}</div>
-<div class="line"><a name="l10579"></a><span class="lineno">10579</span>&#160; </div>
-<div class="line"><a name="l10580"></a><span class="lineno">10580</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::CalcAllocationStatInfo(<a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a>&amp; outInfo)<span class="keyword"> const</span></div>
-<div class="line"><a name="l10581"></a><span class="lineno">10581</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l10582"></a><span class="lineno">10582</span>&#160;    <span class="keyword">const</span> VkDeviceSize size = GetSize();</div>
-<div class="line"><a name="l10583"></a><span class="lineno">10583</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
-<div class="line"><a name="l10584"></a><span class="lineno">10584</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
-<div class="line"><a name="l10585"></a><span class="lineno">10585</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc1stCount = suballocations1st.size();</div>
-<div class="line"><a name="l10586"></a><span class="lineno">10586</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc2ndCount = suballocations2nd.size();</div>
-<div class="line"><a name="l10587"></a><span class="lineno">10587</span>&#160; </div>
-<div class="line"><a name="l10588"></a><span class="lineno">10588</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a> = 1;</div>
-<div class="line"><a name="l10589"></a><span class="lineno">10589</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a> = (uint32_t)GetAllocationCount();</div>
-<div class="line"><a name="l10590"></a><span class="lineno">10590</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a> = 0;</div>
-<div class="line"><a name="l10591"></a><span class="lineno">10591</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a> = 0;</div>
-<div class="line"><a name="l10592"></a><span class="lineno">10592</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = UINT64_MAX;</div>
-<div class="line"><a name="l10593"></a><span class="lineno">10593</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a> = 0;</div>
-<div class="line"><a name="l10594"></a><span class="lineno">10594</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = UINT64_MAX;</div>
-<div class="line"><a name="l10595"></a><span class="lineno">10595</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = 0;</div>
-<div class="line"><a name="l10596"></a><span class="lineno">10596</span>&#160; </div>
-<div class="line"><a name="l10597"></a><span class="lineno">10597</span>&#160;    VkDeviceSize lastOffset = 0;</div>
-<div class="line"><a name="l10598"></a><span class="lineno">10598</span>&#160; </div>
-<div class="line"><a name="l10599"></a><span class="lineno">10599</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
-<div class="line"><a name="l10600"></a><span class="lineno">10600</span>&#160;    {</div>
-<div class="line"><a name="l10601"></a><span class="lineno">10601</span>&#160;        <span class="keyword">const</span> VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset;</div>
-<div class="line"><a name="l10602"></a><span class="lineno">10602</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = 0;</div>
-<div class="line"><a name="l10603"></a><span class="lineno">10603</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
-<div class="line"><a name="l10604"></a><span class="lineno">10604</span>&#160;        {</div>
-<div class="line"><a name="l10605"></a><span class="lineno">10605</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAllocIndex to the end.</span></div>
-<div class="line"><a name="l10606"></a><span class="lineno">10606</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex &lt; suballoc2ndCount &amp;&amp;</div>
-<div class="line"><a name="l10607"></a><span class="lineno">10607</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l10608"></a><span class="lineno">10608</span>&#160;            {</div>
-<div class="line"><a name="l10609"></a><span class="lineno">10609</span>&#160;                ++nextAlloc2ndIndex;</div>
-<div class="line"><a name="l10610"></a><span class="lineno">10610</span>&#160;            }</div>
-<div class="line"><a name="l10611"></a><span class="lineno">10611</span>&#160; </div>
-<div class="line"><a name="l10612"></a><span class="lineno">10612</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
-<div class="line"><a name="l10613"></a><span class="lineno">10613</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex &lt; suballoc2ndCount)</div>
-<div class="line"><a name="l10614"></a><span class="lineno">10614</span>&#160;            {</div>
-<div class="line"><a name="l10615"></a><span class="lineno">10615</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
-<div class="line"><a name="l10616"></a><span class="lineno">10616</span>&#160; </div>
-<div class="line"><a name="l10617"></a><span class="lineno">10617</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
-<div class="line"><a name="l10618"></a><span class="lineno">10618</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
-<div class="line"><a name="l10619"></a><span class="lineno">10619</span>&#160;                {</div>
-<div class="line"><a name="l10620"></a><span class="lineno">10620</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
-<div class="line"><a name="l10621"></a><span class="lineno">10621</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
-<div class="line"><a name="l10622"></a><span class="lineno">10622</span>&#160;                    ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
-<div class="line"><a name="l10623"></a><span class="lineno">10623</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusedRangeSize;</div>
-<div class="line"><a name="l10624"></a><span class="lineno">10624</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10625"></a><span class="lineno">10625</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10626"></a><span class="lineno">10626</span>&#160;                }</div>
-<div class="line"><a name="l10627"></a><span class="lineno">10627</span>&#160; </div>
-<div class="line"><a name="l10628"></a><span class="lineno">10628</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
-<div class="line"><a name="l10629"></a><span class="lineno">10629</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
-<div class="line"><a name="l10630"></a><span class="lineno">10630</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a> += suballoc.size;</div>
-<div class="line"><a name="l10631"></a><span class="lineno">10631</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>, suballoc.size);</div>
-<div class="line"><a name="l10632"></a><span class="lineno">10632</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a>, suballoc.size);</div>
-<div class="line"><a name="l10633"></a><span class="lineno">10633</span>&#160; </div>
-<div class="line"><a name="l10634"></a><span class="lineno">10634</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
-<div class="line"><a name="l10635"></a><span class="lineno">10635</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
-<div class="line"><a name="l10636"></a><span class="lineno">10636</span>&#160;                ++nextAlloc2ndIndex;</div>
-<div class="line"><a name="l10637"></a><span class="lineno">10637</span>&#160;            }</div>
-<div class="line"><a name="l10638"></a><span class="lineno">10638</span>&#160;            <span class="comment">// We are at the end.</span></div>
-<div class="line"><a name="l10639"></a><span class="lineno">10639</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10640"></a><span class="lineno">10640</span>&#160;            {</div>
-<div class="line"><a name="l10641"></a><span class="lineno">10641</span>&#160;                <span class="comment">// There is free space from lastOffset to freeSpace2ndTo1stEnd.</span></div>
-<div class="line"><a name="l10642"></a><span class="lineno">10642</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
-<div class="line"><a name="l10643"></a><span class="lineno">10643</span>&#160;                {</div>
-<div class="line"><a name="l10644"></a><span class="lineno">10644</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = freeSpace2ndTo1stEnd - lastOffset;</div>
-<div class="line"><a name="l10645"></a><span class="lineno">10645</span>&#160;                    ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
-<div class="line"><a name="l10646"></a><span class="lineno">10646</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusedRangeSize;</div>
-<div class="line"><a name="l10647"></a><span class="lineno">10647</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10648"></a><span class="lineno">10648</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10649"></a><span class="lineno">10649</span>&#160;               }</div>
-<div class="line"><a name="l10650"></a><span class="lineno">10650</span>&#160; </div>
-<div class="line"><a name="l10651"></a><span class="lineno">10651</span>&#160;                <span class="comment">// End of loop.</span></div>
-<div class="line"><a name="l10652"></a><span class="lineno">10652</span>&#160;                lastOffset = freeSpace2ndTo1stEnd;</div>
-<div class="line"><a name="l10653"></a><span class="lineno">10653</span>&#160;            }</div>
-<div class="line"><a name="l10654"></a><span class="lineno">10654</span>&#160;        }</div>
-<div class="line"><a name="l10655"></a><span class="lineno">10655</span>&#160;    }</div>
-<div class="line"><a name="l10656"></a><span class="lineno">10656</span>&#160; </div>
-<div class="line"><a name="l10657"></a><span class="lineno">10657</span>&#160;    <span class="keywordtype">size_t</span> nextAlloc1stIndex = m_1stNullItemsBeginCount;</div>
-<div class="line"><a name="l10658"></a><span class="lineno">10658</span>&#160;    <span class="keyword">const</span> VkDeviceSize freeSpace1stTo2ndEnd =</div>
-<div class="line"><a name="l10659"></a><span class="lineno">10659</span>&#160;        m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ? suballocations2nd.back().offset : size;</div>
-<div class="line"><a name="l10660"></a><span class="lineno">10660</span>&#160;    <span class="keywordflow">while</span>(lastOffset &lt; freeSpace1stTo2ndEnd)</div>
-<div class="line"><a name="l10661"></a><span class="lineno">10661</span>&#160;    {</div>
-<div class="line"><a name="l10662"></a><span class="lineno">10662</span>&#160;        <span class="comment">// Find next non-null allocation or move nextAllocIndex to the end.</span></div>
-<div class="line"><a name="l10663"></a><span class="lineno">10663</span>&#160;        <span class="keywordflow">while</span>(nextAlloc1stIndex &lt; suballoc1stCount &amp;&amp;</div>
-<div class="line"><a name="l10664"></a><span class="lineno">10664</span>&#160;            suballocations1st[nextAlloc1stIndex].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l10665"></a><span class="lineno">10665</span>&#160;        {</div>
-<div class="line"><a name="l10666"></a><span class="lineno">10666</span>&#160;            ++nextAlloc1stIndex;</div>
-<div class="line"><a name="l10667"></a><span class="lineno">10667</span>&#160;        }</div>
-<div class="line"><a name="l10668"></a><span class="lineno">10668</span>&#160; </div>
-<div class="line"><a name="l10669"></a><span class="lineno">10669</span>&#160;        <span class="comment">// Found non-null allocation.</span></div>
-<div class="line"><a name="l10670"></a><span class="lineno">10670</span>&#160;        <span class="keywordflow">if</span>(nextAlloc1stIndex &lt; suballoc1stCount)</div>
-<div class="line"><a name="l10671"></a><span class="lineno">10671</span>&#160;        {</div>
-<div class="line"><a name="l10672"></a><span class="lineno">10672</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[nextAlloc1stIndex];</div>
-<div class="line"><a name="l10673"></a><span class="lineno">10673</span>&#160; </div>
-<div class="line"><a name="l10674"></a><span class="lineno">10674</span>&#160;            <span class="comment">// 1. Process free space before this allocation.</span></div>
-<div class="line"><a name="l10675"></a><span class="lineno">10675</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
-<div class="line"><a name="l10676"></a><span class="lineno">10676</span>&#160;            {</div>
-<div class="line"><a name="l10677"></a><span class="lineno">10677</span>&#160;                <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
-<div class="line"><a name="l10678"></a><span class="lineno">10678</span>&#160;                <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
-<div class="line"><a name="l10679"></a><span class="lineno">10679</span>&#160;                ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
-<div class="line"><a name="l10680"></a><span class="lineno">10680</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusedRangeSize;</div>
-<div class="line"><a name="l10681"></a><span class="lineno">10681</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10682"></a><span class="lineno">10682</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10683"></a><span class="lineno">10683</span>&#160;            }</div>
-<div class="line"><a name="l10684"></a><span class="lineno">10684</span>&#160; </div>
-<div class="line"><a name="l10685"></a><span class="lineno">10685</span>&#160;            <span class="comment">// 2. Process this allocation.</span></div>
-<div class="line"><a name="l10686"></a><span class="lineno">10686</span>&#160;            <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
-<div class="line"><a name="l10687"></a><span class="lineno">10687</span>&#160;            outInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a> += suballoc.size;</div>
-<div class="line"><a name="l10688"></a><span class="lineno">10688</span>&#160;            outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>, suballoc.size);</div>
-<div class="line"><a name="l10689"></a><span class="lineno">10689</span>&#160;            outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a>, suballoc.size);</div>
-<div class="line"><a name="l10690"></a><span class="lineno">10690</span>&#160; </div>
-<div class="line"><a name="l10691"></a><span class="lineno">10691</span>&#160;            <span class="comment">// 3. Prepare for next iteration.</span></div>
-<div class="line"><a name="l10692"></a><span class="lineno">10692</span>&#160;            lastOffset = suballoc.offset + suballoc.size;</div>
-<div class="line"><a name="l10693"></a><span class="lineno">10693</span>&#160;            ++nextAlloc1stIndex;</div>
-<div class="line"><a name="l10694"></a><span class="lineno">10694</span>&#160;        }</div>
-<div class="line"><a name="l10695"></a><span class="lineno">10695</span>&#160;        <span class="comment">// We are at the end.</span></div>
-<div class="line"><a name="l10696"></a><span class="lineno">10696</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10697"></a><span class="lineno">10697</span>&#160;        {</div>
-<div class="line"><a name="l10698"></a><span class="lineno">10698</span>&#160;            <span class="comment">// There is free space from lastOffset to freeSpace1stTo2ndEnd.</span></div>
-<div class="line"><a name="l10699"></a><span class="lineno">10699</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; freeSpace1stTo2ndEnd)</div>
-<div class="line"><a name="l10700"></a><span class="lineno">10700</span>&#160;            {</div>
-<div class="line"><a name="l10701"></a><span class="lineno">10701</span>&#160;                <span class="keyword">const</span> VkDeviceSize unusedRangeSize = freeSpace1stTo2ndEnd - lastOffset;</div>
-<div class="line"><a name="l10702"></a><span class="lineno">10702</span>&#160;                ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
-<div class="line"><a name="l10703"></a><span class="lineno">10703</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusedRangeSize;</div>
-<div class="line"><a name="l10704"></a><span class="lineno">10704</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10705"></a><span class="lineno">10705</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10706"></a><span class="lineno">10706</span>&#160;           }</div>
-<div class="line"><a name="l10707"></a><span class="lineno">10707</span>&#160; </div>
-<div class="line"><a name="l10708"></a><span class="lineno">10708</span>&#160;            <span class="comment">// End of loop.</span></div>
-<div class="line"><a name="l10709"></a><span class="lineno">10709</span>&#160;            lastOffset = freeSpace1stTo2ndEnd;</div>
-<div class="line"><a name="l10710"></a><span class="lineno">10710</span>&#160;        }</div>
-<div class="line"><a name="l10711"></a><span class="lineno">10711</span>&#160;    }</div>
-<div class="line"><a name="l10712"></a><span class="lineno">10712</span>&#160; </div>
-<div class="line"><a name="l10713"></a><span class="lineno">10713</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
-<div class="line"><a name="l10714"></a><span class="lineno">10714</span>&#160;    {</div>
-<div class="line"><a name="l10715"></a><span class="lineno">10715</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = suballocations2nd.size() - 1;</div>
-<div class="line"><a name="l10716"></a><span class="lineno">10716</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; size)</div>
-<div class="line"><a name="l10717"></a><span class="lineno">10717</span>&#160;        {</div>
-<div class="line"><a name="l10718"></a><span class="lineno">10718</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAllocIndex to the end.</span></div>
-<div class="line"><a name="l10719"></a><span class="lineno">10719</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex != SIZE_MAX &amp;&amp;</div>
-<div class="line"><a name="l10720"></a><span class="lineno">10720</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l10721"></a><span class="lineno">10721</span>&#160;            {</div>
-<div class="line"><a name="l10722"></a><span class="lineno">10722</span>&#160;                --nextAlloc2ndIndex;</div>
-<div class="line"><a name="l10723"></a><span class="lineno">10723</span>&#160;            }</div>
-<div class="line"><a name="l10724"></a><span class="lineno">10724</span>&#160; </div>
-<div class="line"><a name="l10725"></a><span class="lineno">10725</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
-<div class="line"><a name="l10726"></a><span class="lineno">10726</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex != SIZE_MAX)</div>
-<div class="line"><a name="l10727"></a><span class="lineno">10727</span>&#160;            {</div>
-<div class="line"><a name="l10728"></a><span class="lineno">10728</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
-<div class="line"><a name="l10729"></a><span class="lineno">10729</span>&#160; </div>
-<div class="line"><a name="l10730"></a><span class="lineno">10730</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
-<div class="line"><a name="l10731"></a><span class="lineno">10731</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
-<div class="line"><a name="l10732"></a><span class="lineno">10732</span>&#160;                {</div>
-<div class="line"><a name="l10733"></a><span class="lineno">10733</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
-<div class="line"><a name="l10734"></a><span class="lineno">10734</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
-<div class="line"><a name="l10735"></a><span class="lineno">10735</span>&#160;                    ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
-<div class="line"><a name="l10736"></a><span class="lineno">10736</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusedRangeSize;</div>
-<div class="line"><a name="l10737"></a><span class="lineno">10737</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10738"></a><span class="lineno">10738</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10739"></a><span class="lineno">10739</span>&#160;                }</div>
-<div class="line"><a name="l10740"></a><span class="lineno">10740</span>&#160; </div>
-<div class="line"><a name="l10741"></a><span class="lineno">10741</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
-<div class="line"><a name="l10742"></a><span class="lineno">10742</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
-<div class="line"><a name="l10743"></a><span class="lineno">10743</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a> += suballoc.size;</div>
-<div class="line"><a name="l10744"></a><span class="lineno">10744</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>, suballoc.size);</div>
-<div class="line"><a name="l10745"></a><span class="lineno">10745</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a>, suballoc.size);</div>
-<div class="line"><a name="l10746"></a><span class="lineno">10746</span>&#160; </div>
-<div class="line"><a name="l10747"></a><span class="lineno">10747</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
-<div class="line"><a name="l10748"></a><span class="lineno">10748</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
-<div class="line"><a name="l10749"></a><span class="lineno">10749</span>&#160;                --nextAlloc2ndIndex;</div>
-<div class="line"><a name="l10750"></a><span class="lineno">10750</span>&#160;            }</div>
-<div class="line"><a name="l10751"></a><span class="lineno">10751</span>&#160;            <span class="comment">// We are at the end.</span></div>
-<div class="line"><a name="l10752"></a><span class="lineno">10752</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10753"></a><span class="lineno">10753</span>&#160;            {</div>
-<div class="line"><a name="l10754"></a><span class="lineno">10754</span>&#160;                <span class="comment">// There is free space from lastOffset to size.</span></div>
-<div class="line"><a name="l10755"></a><span class="lineno">10755</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; size)</div>
-<div class="line"><a name="l10756"></a><span class="lineno">10756</span>&#160;                {</div>
-<div class="line"><a name="l10757"></a><span class="lineno">10757</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = size - lastOffset;</div>
-<div class="line"><a name="l10758"></a><span class="lineno">10758</span>&#160;                    ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
-<div class="line"><a name="l10759"></a><span class="lineno">10759</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusedRangeSize;</div>
-<div class="line"><a name="l10760"></a><span class="lineno">10760</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10761"></a><span class="lineno">10761</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10762"></a><span class="lineno">10762</span>&#160;               }</div>
-<div class="line"><a name="l10763"></a><span class="lineno">10763</span>&#160; </div>
-<div class="line"><a name="l10764"></a><span class="lineno">10764</span>&#160;                <span class="comment">// End of loop.</span></div>
-<div class="line"><a name="l10765"></a><span class="lineno">10765</span>&#160;                lastOffset = size;</div>
-<div class="line"><a name="l10766"></a><span class="lineno">10766</span>&#160;            }</div>
-<div class="line"><a name="l10767"></a><span class="lineno">10767</span>&#160;        }</div>
-<div class="line"><a name="l10768"></a><span class="lineno">10768</span>&#160;    }</div>
-<div class="line"><a name="l10769"></a><span class="lineno">10769</span>&#160; </div>
-<div class="line"><a name="l10770"></a><span class="lineno">10770</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> = size - outInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a>;</div>
-<div class="line"><a name="l10771"></a><span class="lineno">10771</span>&#160;}</div>
-<div class="line"><a name="l10772"></a><span class="lineno">10772</span>&#160; </div>
-<div class="line"><a name="l10773"></a><span class="lineno">10773</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::AddPoolStats(<a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>&amp; inoutStats)<span class="keyword"> const</span></div>
-<div class="line"><a name="l10774"></a><span class="lineno">10774</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l10775"></a><span class="lineno">10775</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
-<div class="line"><a name="l10776"></a><span class="lineno">10776</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
-<div class="line"><a name="l10777"></a><span class="lineno">10777</span>&#160;    <span class="keyword">const</span> VkDeviceSize size = GetSize();</div>
-<div class="line"><a name="l10778"></a><span class="lineno">10778</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc1stCount = suballocations1st.size();</div>
-<div class="line"><a name="l10779"></a><span class="lineno">10779</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc2ndCount = suballocations2nd.size();</div>
-<div class="line"><a name="l10780"></a><span class="lineno">10780</span>&#160; </div>
-<div class="line"><a name="l10781"></a><span class="lineno">10781</span>&#160;    inoutStats.<a class="code" href="struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c">size</a> += size;</div>
-<div class="line"><a name="l10782"></a><span class="lineno">10782</span>&#160; </div>
-<div class="line"><a name="l10783"></a><span class="lineno">10783</span>&#160;    VkDeviceSize lastOffset = 0;</div>
-<div class="line"><a name="l10784"></a><span class="lineno">10784</span>&#160; </div>
-<div class="line"><a name="l10785"></a><span class="lineno">10785</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
-<div class="line"><a name="l10786"></a><span class="lineno">10786</span>&#160;    {</div>
-<div class="line"><a name="l10787"></a><span class="lineno">10787</span>&#160;        <span class="keyword">const</span> VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset;</div>
-<div class="line"><a name="l10788"></a><span class="lineno">10788</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = m_1stNullItemsBeginCount;</div>
-<div class="line"><a name="l10789"></a><span class="lineno">10789</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
-<div class="line"><a name="l10790"></a><span class="lineno">10790</span>&#160;        {</div>
-<div class="line"><a name="l10791"></a><span class="lineno">10791</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAlloc2ndIndex to the end.</span></div>
-<div class="line"><a name="l10792"></a><span class="lineno">10792</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex &lt; suballoc2ndCount &amp;&amp;</div>
-<div class="line"><a name="l10793"></a><span class="lineno">10793</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l10794"></a><span class="lineno">10794</span>&#160;            {</div>
-<div class="line"><a name="l10795"></a><span class="lineno">10795</span>&#160;                ++nextAlloc2ndIndex;</div>
-<div class="line"><a name="l10796"></a><span class="lineno">10796</span>&#160;            }</div>
-<div class="line"><a name="l10797"></a><span class="lineno">10797</span>&#160; </div>
-<div class="line"><a name="l10798"></a><span class="lineno">10798</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
-<div class="line"><a name="l10799"></a><span class="lineno">10799</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex &lt; suballoc2ndCount)</div>
-<div class="line"><a name="l10800"></a><span class="lineno">10800</span>&#160;            {</div>
-<div class="line"><a name="l10801"></a><span class="lineno">10801</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
-<div class="line"><a name="l10802"></a><span class="lineno">10802</span>&#160; </div>
-<div class="line"><a name="l10803"></a><span class="lineno">10803</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
-<div class="line"><a name="l10804"></a><span class="lineno">10804</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
-<div class="line"><a name="l10805"></a><span class="lineno">10805</span>&#160;                {</div>
-<div class="line"><a name="l10806"></a><span class="lineno">10806</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
-<div class="line"><a name="l10807"></a><span class="lineno">10807</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
-<div class="line"><a name="l10808"></a><span class="lineno">10808</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> += unusedRangeSize;</div>
-<div class="line"><a name="l10809"></a><span class="lineno">10809</span>&#160;                    ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
-<div class="line"><a name="l10810"></a><span class="lineno">10810</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = VMA_MAX(inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10811"></a><span class="lineno">10811</span>&#160;                }</div>
-<div class="line"><a name="l10812"></a><span class="lineno">10812</span>&#160; </div>
-<div class="line"><a name="l10813"></a><span class="lineno">10813</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
-<div class="line"><a name="l10814"></a><span class="lineno">10814</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
-<div class="line"><a name="l10815"></a><span class="lineno">10815</span>&#160;                ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">allocationCount</a>;</div>
-<div class="line"><a name="l10816"></a><span class="lineno">10816</span>&#160; </div>
-<div class="line"><a name="l10817"></a><span class="lineno">10817</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
-<div class="line"><a name="l10818"></a><span class="lineno">10818</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
-<div class="line"><a name="l10819"></a><span class="lineno">10819</span>&#160;                ++nextAlloc2ndIndex;</div>
-<div class="line"><a name="l10820"></a><span class="lineno">10820</span>&#160;            }</div>
-<div class="line"><a name="l10821"></a><span class="lineno">10821</span>&#160;            <span class="comment">// We are at the end.</span></div>
-<div class="line"><a name="l10822"></a><span class="lineno">10822</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10823"></a><span class="lineno">10823</span>&#160;            {</div>
-<div class="line"><a name="l10824"></a><span class="lineno">10824</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
-<div class="line"><a name="l10825"></a><span class="lineno">10825</span>&#160;                {</div>
-<div class="line"><a name="l10826"></a><span class="lineno">10826</span>&#160;                    <span class="comment">// There is free space from lastOffset to freeSpace2ndTo1stEnd.</span></div>
-<div class="line"><a name="l10827"></a><span class="lineno">10827</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = freeSpace2ndTo1stEnd - lastOffset;</div>
-<div class="line"><a name="l10828"></a><span class="lineno">10828</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> += unusedRangeSize;</div>
-<div class="line"><a name="l10829"></a><span class="lineno">10829</span>&#160;                    ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
-<div class="line"><a name="l10830"></a><span class="lineno">10830</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = VMA_MAX(inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10831"></a><span class="lineno">10831</span>&#160;                }</div>
-<div class="line"><a name="l10832"></a><span class="lineno">10832</span>&#160; </div>
-<div class="line"><a name="l10833"></a><span class="lineno">10833</span>&#160;                <span class="comment">// End of loop.</span></div>
-<div class="line"><a name="l10834"></a><span class="lineno">10834</span>&#160;                lastOffset = freeSpace2ndTo1stEnd;</div>
-<div class="line"><a name="l10835"></a><span class="lineno">10835</span>&#160;            }</div>
-<div class="line"><a name="l10836"></a><span class="lineno">10836</span>&#160;        }</div>
-<div class="line"><a name="l10837"></a><span class="lineno">10837</span>&#160;    }</div>
-<div class="line"><a name="l10838"></a><span class="lineno">10838</span>&#160; </div>
-<div class="line"><a name="l10839"></a><span class="lineno">10839</span>&#160;    <span class="keywordtype">size_t</span> nextAlloc1stIndex = m_1stNullItemsBeginCount;</div>
-<div class="line"><a name="l10840"></a><span class="lineno">10840</span>&#160;    <span class="keyword">const</span> VkDeviceSize freeSpace1stTo2ndEnd =</div>
-<div class="line"><a name="l10841"></a><span class="lineno">10841</span>&#160;        m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ? suballocations2nd.back().offset : size;</div>
-<div class="line"><a name="l10842"></a><span class="lineno">10842</span>&#160;    <span class="keywordflow">while</span>(lastOffset &lt; freeSpace1stTo2ndEnd)</div>
-<div class="line"><a name="l10843"></a><span class="lineno">10843</span>&#160;    {</div>
-<div class="line"><a name="l10844"></a><span class="lineno">10844</span>&#160;        <span class="comment">// Find next non-null allocation or move nextAllocIndex to the end.</span></div>
-<div class="line"><a name="l10845"></a><span class="lineno">10845</span>&#160;        <span class="keywordflow">while</span>(nextAlloc1stIndex &lt; suballoc1stCount &amp;&amp;</div>
-<div class="line"><a name="l10846"></a><span class="lineno">10846</span>&#160;            suballocations1st[nextAlloc1stIndex].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l10847"></a><span class="lineno">10847</span>&#160;        {</div>
-<div class="line"><a name="l10848"></a><span class="lineno">10848</span>&#160;            ++nextAlloc1stIndex;</div>
-<div class="line"><a name="l10849"></a><span class="lineno">10849</span>&#160;        }</div>
-<div class="line"><a name="l10850"></a><span class="lineno">10850</span>&#160; </div>
-<div class="line"><a name="l10851"></a><span class="lineno">10851</span>&#160;        <span class="comment">// Found non-null allocation.</span></div>
-<div class="line"><a name="l10852"></a><span class="lineno">10852</span>&#160;        <span class="keywordflow">if</span>(nextAlloc1stIndex &lt; suballoc1stCount)</div>
-<div class="line"><a name="l10853"></a><span class="lineno">10853</span>&#160;        {</div>
-<div class="line"><a name="l10854"></a><span class="lineno">10854</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[nextAlloc1stIndex];</div>
-<div class="line"><a name="l10855"></a><span class="lineno">10855</span>&#160; </div>
-<div class="line"><a name="l10856"></a><span class="lineno">10856</span>&#160;            <span class="comment">// 1. Process free space before this allocation.</span></div>
-<div class="line"><a name="l10857"></a><span class="lineno">10857</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
-<div class="line"><a name="l10858"></a><span class="lineno">10858</span>&#160;            {</div>
-<div class="line"><a name="l10859"></a><span class="lineno">10859</span>&#160;                <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
-<div class="line"><a name="l10860"></a><span class="lineno">10860</span>&#160;                <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
-<div class="line"><a name="l10861"></a><span class="lineno">10861</span>&#160;                inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> += unusedRangeSize;</div>
-<div class="line"><a name="l10862"></a><span class="lineno">10862</span>&#160;                ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
-<div class="line"><a name="l10863"></a><span class="lineno">10863</span>&#160;                inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = VMA_MAX(inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10864"></a><span class="lineno">10864</span>&#160;            }</div>
-<div class="line"><a name="l10865"></a><span class="lineno">10865</span>&#160; </div>
-<div class="line"><a name="l10866"></a><span class="lineno">10866</span>&#160;            <span class="comment">// 2. Process this allocation.</span></div>
-<div class="line"><a name="l10867"></a><span class="lineno">10867</span>&#160;            <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
-<div class="line"><a name="l10868"></a><span class="lineno">10868</span>&#160;            ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">allocationCount</a>;</div>
-<div class="line"><a name="l10869"></a><span class="lineno">10869</span>&#160; </div>
-<div class="line"><a name="l10870"></a><span class="lineno">10870</span>&#160;            <span class="comment">// 3. Prepare for next iteration.</span></div>
-<div class="line"><a name="l10871"></a><span class="lineno">10871</span>&#160;            lastOffset = suballoc.offset + suballoc.size;</div>
-<div class="line"><a name="l10872"></a><span class="lineno">10872</span>&#160;            ++nextAlloc1stIndex;</div>
-<div class="line"><a name="l10873"></a><span class="lineno">10873</span>&#160;        }</div>
-<div class="line"><a name="l10874"></a><span class="lineno">10874</span>&#160;        <span class="comment">// We are at the end.</span></div>
-<div class="line"><a name="l10875"></a><span class="lineno">10875</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10876"></a><span class="lineno">10876</span>&#160;        {</div>
-<div class="line"><a name="l10877"></a><span class="lineno">10877</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; freeSpace1stTo2ndEnd)</div>
-<div class="line"><a name="l10878"></a><span class="lineno">10878</span>&#160;            {</div>
-<div class="line"><a name="l10879"></a><span class="lineno">10879</span>&#160;                <span class="comment">// There is free space from lastOffset to freeSpace1stTo2ndEnd.</span></div>
-<div class="line"><a name="l10880"></a><span class="lineno">10880</span>&#160;                <span class="keyword">const</span> VkDeviceSize unusedRangeSize = freeSpace1stTo2ndEnd - lastOffset;</div>
-<div class="line"><a name="l10881"></a><span class="lineno">10881</span>&#160;                inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> += unusedRangeSize;</div>
-<div class="line"><a name="l10882"></a><span class="lineno">10882</span>&#160;                ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
-<div class="line"><a name="l10883"></a><span class="lineno">10883</span>&#160;                inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = VMA_MAX(inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10884"></a><span class="lineno">10884</span>&#160;            }</div>
-<div class="line"><a name="l10885"></a><span class="lineno">10885</span>&#160; </div>
-<div class="line"><a name="l10886"></a><span class="lineno">10886</span>&#160;            <span class="comment">// End of loop.</span></div>
-<div class="line"><a name="l10887"></a><span class="lineno">10887</span>&#160;            lastOffset = freeSpace1stTo2ndEnd;</div>
-<div class="line"><a name="l10888"></a><span class="lineno">10888</span>&#160;        }</div>
-<div class="line"><a name="l10889"></a><span class="lineno">10889</span>&#160;    }</div>
-<div class="line"><a name="l10890"></a><span class="lineno">10890</span>&#160; </div>
-<div class="line"><a name="l10891"></a><span class="lineno">10891</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
-<div class="line"><a name="l10892"></a><span class="lineno">10892</span>&#160;    {</div>
-<div class="line"><a name="l10893"></a><span class="lineno">10893</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = suballocations2nd.size() - 1;</div>
-<div class="line"><a name="l10894"></a><span class="lineno">10894</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; size)</div>
-<div class="line"><a name="l10895"></a><span class="lineno">10895</span>&#160;        {</div>
-<div class="line"><a name="l10896"></a><span class="lineno">10896</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAlloc2ndIndex to the end.</span></div>
-<div class="line"><a name="l10897"></a><span class="lineno">10897</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex != SIZE_MAX &amp;&amp;</div>
-<div class="line"><a name="l10898"></a><span class="lineno">10898</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l10899"></a><span class="lineno">10899</span>&#160;            {</div>
-<div class="line"><a name="l10900"></a><span class="lineno">10900</span>&#160;                --nextAlloc2ndIndex;</div>
-<div class="line"><a name="l10901"></a><span class="lineno">10901</span>&#160;            }</div>
-<div class="line"><a name="l10902"></a><span class="lineno">10902</span>&#160; </div>
-<div class="line"><a name="l10903"></a><span class="lineno">10903</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
-<div class="line"><a name="l10904"></a><span class="lineno">10904</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex != SIZE_MAX)</div>
-<div class="line"><a name="l10905"></a><span class="lineno">10905</span>&#160;            {</div>
-<div class="line"><a name="l10906"></a><span class="lineno">10906</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
-<div class="line"><a name="l10907"></a><span class="lineno">10907</span>&#160; </div>
-<div class="line"><a name="l10908"></a><span class="lineno">10908</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
-<div class="line"><a name="l10909"></a><span class="lineno">10909</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
-<div class="line"><a name="l10910"></a><span class="lineno">10910</span>&#160;                {</div>
-<div class="line"><a name="l10911"></a><span class="lineno">10911</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
-<div class="line"><a name="l10912"></a><span class="lineno">10912</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
-<div class="line"><a name="l10913"></a><span class="lineno">10913</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> += unusedRangeSize;</div>
-<div class="line"><a name="l10914"></a><span class="lineno">10914</span>&#160;                    ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
-<div class="line"><a name="l10915"></a><span class="lineno">10915</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = VMA_MAX(inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10916"></a><span class="lineno">10916</span>&#160;                }</div>
-<div class="line"><a name="l10917"></a><span class="lineno">10917</span>&#160; </div>
-<div class="line"><a name="l10918"></a><span class="lineno">10918</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
-<div class="line"><a name="l10919"></a><span class="lineno">10919</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
-<div class="line"><a name="l10920"></a><span class="lineno">10920</span>&#160;                ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">allocationCount</a>;</div>
-<div class="line"><a name="l10921"></a><span class="lineno">10921</span>&#160; </div>
-<div class="line"><a name="l10922"></a><span class="lineno">10922</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
-<div class="line"><a name="l10923"></a><span class="lineno">10923</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
-<div class="line"><a name="l10924"></a><span class="lineno">10924</span>&#160;                --nextAlloc2ndIndex;</div>
-<div class="line"><a name="l10925"></a><span class="lineno">10925</span>&#160;            }</div>
-<div class="line"><a name="l10926"></a><span class="lineno">10926</span>&#160;            <span class="comment">// We are at the end.</span></div>
-<div class="line"><a name="l10927"></a><span class="lineno">10927</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10928"></a><span class="lineno">10928</span>&#160;            {</div>
-<div class="line"><a name="l10929"></a><span class="lineno">10929</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; size)</div>
-<div class="line"><a name="l10930"></a><span class="lineno">10930</span>&#160;                {</div>
-<div class="line"><a name="l10931"></a><span class="lineno">10931</span>&#160;                    <span class="comment">// There is free space from lastOffset to size.</span></div>
-<div class="line"><a name="l10932"></a><span class="lineno">10932</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = size - lastOffset;</div>
-<div class="line"><a name="l10933"></a><span class="lineno">10933</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> += unusedRangeSize;</div>
-<div class="line"><a name="l10934"></a><span class="lineno">10934</span>&#160;                    ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
-<div class="line"><a name="l10935"></a><span class="lineno">10935</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = VMA_MAX(inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>, unusedRangeSize);</div>
-<div class="line"><a name="l10936"></a><span class="lineno">10936</span>&#160;                }</div>
-<div class="line"><a name="l10937"></a><span class="lineno">10937</span>&#160; </div>
-<div class="line"><a name="l10938"></a><span class="lineno">10938</span>&#160;                <span class="comment">// End of loop.</span></div>
-<div class="line"><a name="l10939"></a><span class="lineno">10939</span>&#160;                lastOffset = size;</div>
-<div class="line"><a name="l10940"></a><span class="lineno">10940</span>&#160;            }</div>
-<div class="line"><a name="l10941"></a><span class="lineno">10941</span>&#160;        }</div>
-<div class="line"><a name="l10942"></a><span class="lineno">10942</span>&#160;    }</div>
-<div class="line"><a name="l10943"></a><span class="lineno">10943</span>&#160;}</div>
-<div class="line"><a name="l10944"></a><span class="lineno">10944</span>&#160; </div>
-<div class="line"><a name="l10945"></a><span class="lineno">10945</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l10946"></a><span class="lineno">10946</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::PrintDetailedMap(<span class="keyword">class</span> VmaJsonWriter&amp; json)<span class="keyword"> const</span></div>
-<div class="line"><a name="l10947"></a><span class="lineno">10947</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l10948"></a><span class="lineno">10948</span>&#160;    <span class="keyword">const</span> VkDeviceSize size = GetSize();</div>
-<div class="line"><a name="l10949"></a><span class="lineno">10949</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
-<div class="line"><a name="l10950"></a><span class="lineno">10950</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
-<div class="line"><a name="l10951"></a><span class="lineno">10951</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc1stCount = suballocations1st.size();</div>
-<div class="line"><a name="l10952"></a><span class="lineno">10952</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc2ndCount = suballocations2nd.size();</div>
-<div class="line"><a name="l10953"></a><span class="lineno">10953</span>&#160; </div>
-<div class="line"><a name="l10954"></a><span class="lineno">10954</span>&#160;    <span class="comment">// FIRST PASS</span></div>
-<div class="line"><a name="l10955"></a><span class="lineno">10955</span>&#160; </div>
-<div class="line"><a name="l10956"></a><span class="lineno">10956</span>&#160;    <span class="keywordtype">size_t</span> unusedRangeCount = 0;</div>
-<div class="line"><a name="l10957"></a><span class="lineno">10957</span>&#160;    VkDeviceSize usedBytes = 0;</div>
-<div class="line"><a name="l10958"></a><span class="lineno">10958</span>&#160; </div>
-<div class="line"><a name="l10959"></a><span class="lineno">10959</span>&#160;    VkDeviceSize lastOffset = 0;</div>
-<div class="line"><a name="l10960"></a><span class="lineno">10960</span>&#160; </div>
-<div class="line"><a name="l10961"></a><span class="lineno">10961</span>&#160;    <span class="keywordtype">size_t</span> alloc2ndCount = 0;</div>
-<div class="line"><a name="l10962"></a><span class="lineno">10962</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
-<div class="line"><a name="l10963"></a><span class="lineno">10963</span>&#160;    {</div>
-<div class="line"><a name="l10964"></a><span class="lineno">10964</span>&#160;        <span class="keyword">const</span> VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset;</div>
-<div class="line"><a name="l10965"></a><span class="lineno">10965</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = 0;</div>
-<div class="line"><a name="l10966"></a><span class="lineno">10966</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
-<div class="line"><a name="l10967"></a><span class="lineno">10967</span>&#160;        {</div>
-<div class="line"><a name="l10968"></a><span class="lineno">10968</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAlloc2ndIndex to the end.</span></div>
-<div class="line"><a name="l10969"></a><span class="lineno">10969</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex &lt; suballoc2ndCount &amp;&amp;</div>
-<div class="line"><a name="l10970"></a><span class="lineno">10970</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l10971"></a><span class="lineno">10971</span>&#160;            {</div>
-<div class="line"><a name="l10972"></a><span class="lineno">10972</span>&#160;                ++nextAlloc2ndIndex;</div>
-<div class="line"><a name="l10973"></a><span class="lineno">10973</span>&#160;            }</div>
-<div class="line"><a name="l10974"></a><span class="lineno">10974</span>&#160; </div>
-<div class="line"><a name="l10975"></a><span class="lineno">10975</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
-<div class="line"><a name="l10976"></a><span class="lineno">10976</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex &lt; suballoc2ndCount)</div>
-<div class="line"><a name="l10977"></a><span class="lineno">10977</span>&#160;            {</div>
-<div class="line"><a name="l10978"></a><span class="lineno">10978</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
-<div class="line"><a name="l10979"></a><span class="lineno">10979</span>&#160; </div>
-<div class="line"><a name="l10980"></a><span class="lineno">10980</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
-<div class="line"><a name="l10981"></a><span class="lineno">10981</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
-<div class="line"><a name="l10982"></a><span class="lineno">10982</span>&#160;                {</div>
-<div class="line"><a name="l10983"></a><span class="lineno">10983</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
-<div class="line"><a name="l10984"></a><span class="lineno">10984</span>&#160;                    ++unusedRangeCount;</div>
-<div class="line"><a name="l10985"></a><span class="lineno">10985</span>&#160;                }</div>
-<div class="line"><a name="l10986"></a><span class="lineno">10986</span>&#160; </div>
-<div class="line"><a name="l10987"></a><span class="lineno">10987</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
-<div class="line"><a name="l10988"></a><span class="lineno">10988</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
-<div class="line"><a name="l10989"></a><span class="lineno">10989</span>&#160;                ++alloc2ndCount;</div>
-<div class="line"><a name="l10990"></a><span class="lineno">10990</span>&#160;                usedBytes += suballoc.size;</div>
-<div class="line"><a name="l10991"></a><span class="lineno">10991</span>&#160; </div>
-<div class="line"><a name="l10992"></a><span class="lineno">10992</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
-<div class="line"><a name="l10993"></a><span class="lineno">10993</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
-<div class="line"><a name="l10994"></a><span class="lineno">10994</span>&#160;                ++nextAlloc2ndIndex;</div>
-<div class="line"><a name="l10995"></a><span class="lineno">10995</span>&#160;            }</div>
-<div class="line"><a name="l10996"></a><span class="lineno">10996</span>&#160;            <span class="comment">// We are at the end.</span></div>
-<div class="line"><a name="l10997"></a><span class="lineno">10997</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l10998"></a><span class="lineno">10998</span>&#160;            {</div>
-<div class="line"><a name="l10999"></a><span class="lineno">10999</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
-<div class="line"><a name="l11000"></a><span class="lineno">11000</span>&#160;                {</div>
-<div class="line"><a name="l11001"></a><span class="lineno">11001</span>&#160;                    <span class="comment">// There is free space from lastOffset to freeSpace2ndTo1stEnd.</span></div>
-<div class="line"><a name="l11002"></a><span class="lineno">11002</span>&#160;                    ++unusedRangeCount;</div>
-<div class="line"><a name="l11003"></a><span class="lineno">11003</span>&#160;                }</div>
-<div class="line"><a name="l11004"></a><span class="lineno">11004</span>&#160; </div>
-<div class="line"><a name="l11005"></a><span class="lineno">11005</span>&#160;                <span class="comment">// End of loop.</span></div>
-<div class="line"><a name="l11006"></a><span class="lineno">11006</span>&#160;                lastOffset = freeSpace2ndTo1stEnd;</div>
-<div class="line"><a name="l11007"></a><span class="lineno">11007</span>&#160;            }</div>
-<div class="line"><a name="l11008"></a><span class="lineno">11008</span>&#160;        }</div>
-<div class="line"><a name="l11009"></a><span class="lineno">11009</span>&#160;    }</div>
-<div class="line"><a name="l11010"></a><span class="lineno">11010</span>&#160; </div>
-<div class="line"><a name="l11011"></a><span class="lineno">11011</span>&#160;    <span class="keywordtype">size_t</span> nextAlloc1stIndex = m_1stNullItemsBeginCount;</div>
-<div class="line"><a name="l11012"></a><span class="lineno">11012</span>&#160;    <span class="keywordtype">size_t</span> alloc1stCount = 0;</div>
-<div class="line"><a name="l11013"></a><span class="lineno">11013</span>&#160;    <span class="keyword">const</span> VkDeviceSize freeSpace1stTo2ndEnd =</div>
-<div class="line"><a name="l11014"></a><span class="lineno">11014</span>&#160;        m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ? suballocations2nd.back().offset : size;</div>
-<div class="line"><a name="l11015"></a><span class="lineno">11015</span>&#160;    <span class="keywordflow">while</span>(lastOffset &lt; freeSpace1stTo2ndEnd)</div>
-<div class="line"><a name="l11016"></a><span class="lineno">11016</span>&#160;    {</div>
-<div class="line"><a name="l11017"></a><span class="lineno">11017</span>&#160;        <span class="comment">// Find next non-null allocation or move nextAllocIndex to the end.</span></div>
-<div class="line"><a name="l11018"></a><span class="lineno">11018</span>&#160;        <span class="keywordflow">while</span>(nextAlloc1stIndex &lt; suballoc1stCount &amp;&amp;</div>
-<div class="line"><a name="l11019"></a><span class="lineno">11019</span>&#160;            suballocations1st[nextAlloc1stIndex].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l11020"></a><span class="lineno">11020</span>&#160;        {</div>
-<div class="line"><a name="l11021"></a><span class="lineno">11021</span>&#160;            ++nextAlloc1stIndex;</div>
-<div class="line"><a name="l11022"></a><span class="lineno">11022</span>&#160;        }</div>
-<div class="line"><a name="l11023"></a><span class="lineno">11023</span>&#160; </div>
-<div class="line"><a name="l11024"></a><span class="lineno">11024</span>&#160;        <span class="comment">// Found non-null allocation.</span></div>
-<div class="line"><a name="l11025"></a><span class="lineno">11025</span>&#160;        <span class="keywordflow">if</span>(nextAlloc1stIndex &lt; suballoc1stCount)</div>
-<div class="line"><a name="l11026"></a><span class="lineno">11026</span>&#160;        {</div>
-<div class="line"><a name="l11027"></a><span class="lineno">11027</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[nextAlloc1stIndex];</div>
-<div class="line"><a name="l11028"></a><span class="lineno">11028</span>&#160; </div>
-<div class="line"><a name="l11029"></a><span class="lineno">11029</span>&#160;            <span class="comment">// 1. Process free space before this allocation.</span></div>
-<div class="line"><a name="l11030"></a><span class="lineno">11030</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
-<div class="line"><a name="l11031"></a><span class="lineno">11031</span>&#160;            {</div>
-<div class="line"><a name="l11032"></a><span class="lineno">11032</span>&#160;                <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
-<div class="line"><a name="l11033"></a><span class="lineno">11033</span>&#160;                ++unusedRangeCount;</div>
-<div class="line"><a name="l11034"></a><span class="lineno">11034</span>&#160;            }</div>
-<div class="line"><a name="l11035"></a><span class="lineno">11035</span>&#160; </div>
-<div class="line"><a name="l11036"></a><span class="lineno">11036</span>&#160;            <span class="comment">// 2. Process this allocation.</span></div>
-<div class="line"><a name="l11037"></a><span class="lineno">11037</span>&#160;            <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
-<div class="line"><a name="l11038"></a><span class="lineno">11038</span>&#160;            ++alloc1stCount;</div>
-<div class="line"><a name="l11039"></a><span class="lineno">11039</span>&#160;            usedBytes += suballoc.size;</div>
-<div class="line"><a name="l11040"></a><span class="lineno">11040</span>&#160; </div>
-<div class="line"><a name="l11041"></a><span class="lineno">11041</span>&#160;            <span class="comment">// 3. Prepare for next iteration.</span></div>
-<div class="line"><a name="l11042"></a><span class="lineno">11042</span>&#160;            lastOffset = suballoc.offset + suballoc.size;</div>
-<div class="line"><a name="l11043"></a><span class="lineno">11043</span>&#160;            ++nextAlloc1stIndex;</div>
-<div class="line"><a name="l11044"></a><span class="lineno">11044</span>&#160;        }</div>
-<div class="line"><a name="l11045"></a><span class="lineno">11045</span>&#160;        <span class="comment">// We are at the end.</span></div>
-<div class="line"><a name="l11046"></a><span class="lineno">11046</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11047"></a><span class="lineno">11047</span>&#160;        {</div>
-<div class="line"><a name="l11048"></a><span class="lineno">11048</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; size)</div>
-<div class="line"><a name="l11049"></a><span class="lineno">11049</span>&#160;            {</div>
-<div class="line"><a name="l11050"></a><span class="lineno">11050</span>&#160;                <span class="comment">// There is free space from lastOffset to freeSpace1stTo2ndEnd.</span></div>
-<div class="line"><a name="l11051"></a><span class="lineno">11051</span>&#160;                ++unusedRangeCount;</div>
-<div class="line"><a name="l11052"></a><span class="lineno">11052</span>&#160;            }</div>
-<div class="line"><a name="l11053"></a><span class="lineno">11053</span>&#160; </div>
-<div class="line"><a name="l11054"></a><span class="lineno">11054</span>&#160;            <span class="comment">// End of loop.</span></div>
-<div class="line"><a name="l11055"></a><span class="lineno">11055</span>&#160;            lastOffset = freeSpace1stTo2ndEnd;</div>
-<div class="line"><a name="l11056"></a><span class="lineno">11056</span>&#160;        }</div>
-<div class="line"><a name="l11057"></a><span class="lineno">11057</span>&#160;    }</div>
-<div class="line"><a name="l11058"></a><span class="lineno">11058</span>&#160; </div>
-<div class="line"><a name="l11059"></a><span class="lineno">11059</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
-<div class="line"><a name="l11060"></a><span class="lineno">11060</span>&#160;    {</div>
-<div class="line"><a name="l11061"></a><span class="lineno">11061</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = suballocations2nd.size() - 1;</div>
-<div class="line"><a name="l11062"></a><span class="lineno">11062</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; size)</div>
-<div class="line"><a name="l11063"></a><span class="lineno">11063</span>&#160;        {</div>
-<div class="line"><a name="l11064"></a><span class="lineno">11064</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAlloc2ndIndex to the end.</span></div>
-<div class="line"><a name="l11065"></a><span class="lineno">11065</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex != SIZE_MAX &amp;&amp;</div>
-<div class="line"><a name="l11066"></a><span class="lineno">11066</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l11067"></a><span class="lineno">11067</span>&#160;            {</div>
-<div class="line"><a name="l11068"></a><span class="lineno">11068</span>&#160;                --nextAlloc2ndIndex;</div>
-<div class="line"><a name="l11069"></a><span class="lineno">11069</span>&#160;            }</div>
-<div class="line"><a name="l11070"></a><span class="lineno">11070</span>&#160; </div>
-<div class="line"><a name="l11071"></a><span class="lineno">11071</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
-<div class="line"><a name="l11072"></a><span class="lineno">11072</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex != SIZE_MAX)</div>
-<div class="line"><a name="l11073"></a><span class="lineno">11073</span>&#160;            {</div>
-<div class="line"><a name="l11074"></a><span class="lineno">11074</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
-<div class="line"><a name="l11075"></a><span class="lineno">11075</span>&#160; </div>
-<div class="line"><a name="l11076"></a><span class="lineno">11076</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
-<div class="line"><a name="l11077"></a><span class="lineno">11077</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
-<div class="line"><a name="l11078"></a><span class="lineno">11078</span>&#160;                {</div>
-<div class="line"><a name="l11079"></a><span class="lineno">11079</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
-<div class="line"><a name="l11080"></a><span class="lineno">11080</span>&#160;                    ++unusedRangeCount;</div>
-<div class="line"><a name="l11081"></a><span class="lineno">11081</span>&#160;                }</div>
-<div class="line"><a name="l11082"></a><span class="lineno">11082</span>&#160; </div>
-<div class="line"><a name="l11083"></a><span class="lineno">11083</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
-<div class="line"><a name="l11084"></a><span class="lineno">11084</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
-<div class="line"><a name="l11085"></a><span class="lineno">11085</span>&#160;                ++alloc2ndCount;</div>
-<div class="line"><a name="l11086"></a><span class="lineno">11086</span>&#160;                usedBytes += suballoc.size;</div>
-<div class="line"><a name="l11087"></a><span class="lineno">11087</span>&#160; </div>
-<div class="line"><a name="l11088"></a><span class="lineno">11088</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
-<div class="line"><a name="l11089"></a><span class="lineno">11089</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
-<div class="line"><a name="l11090"></a><span class="lineno">11090</span>&#160;                --nextAlloc2ndIndex;</div>
-<div class="line"><a name="l11091"></a><span class="lineno">11091</span>&#160;            }</div>
-<div class="line"><a name="l11092"></a><span class="lineno">11092</span>&#160;            <span class="comment">// We are at the end.</span></div>
-<div class="line"><a name="l11093"></a><span class="lineno">11093</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11094"></a><span class="lineno">11094</span>&#160;            {</div>
-<div class="line"><a name="l11095"></a><span class="lineno">11095</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; size)</div>
-<div class="line"><a name="l11096"></a><span class="lineno">11096</span>&#160;                {</div>
-<div class="line"><a name="l11097"></a><span class="lineno">11097</span>&#160;                    <span class="comment">// There is free space from lastOffset to size.</span></div>
-<div class="line"><a name="l11098"></a><span class="lineno">11098</span>&#160;                    ++unusedRangeCount;</div>
-<div class="line"><a name="l11099"></a><span class="lineno">11099</span>&#160;                }</div>
-<div class="line"><a name="l11100"></a><span class="lineno">11100</span>&#160; </div>
-<div class="line"><a name="l11101"></a><span class="lineno">11101</span>&#160;                <span class="comment">// End of loop.</span></div>
-<div class="line"><a name="l11102"></a><span class="lineno">11102</span>&#160;                lastOffset = size;</div>
-<div class="line"><a name="l11103"></a><span class="lineno">11103</span>&#160;            }</div>
-<div class="line"><a name="l11104"></a><span class="lineno">11104</span>&#160;        }</div>
-<div class="line"><a name="l11105"></a><span class="lineno">11105</span>&#160;    }</div>
-<div class="line"><a name="l11106"></a><span class="lineno">11106</span>&#160; </div>
-<div class="line"><a name="l11107"></a><span class="lineno">11107</span>&#160;    <span class="keyword">const</span> VkDeviceSize unusedBytes = size - usedBytes;</div>
-<div class="line"><a name="l11108"></a><span class="lineno">11108</span>&#160;    PrintDetailedMap_Begin(json, unusedBytes, alloc1stCount + alloc2ndCount, unusedRangeCount);</div>
-<div class="line"><a name="l11109"></a><span class="lineno">11109</span>&#160; </div>
-<div class="line"><a name="l11110"></a><span class="lineno">11110</span>&#160;    <span class="comment">// SECOND PASS</span></div>
-<div class="line"><a name="l11111"></a><span class="lineno">11111</span>&#160;    lastOffset = 0;</div>
-<div class="line"><a name="l11112"></a><span class="lineno">11112</span>&#160; </div>
-<div class="line"><a name="l11113"></a><span class="lineno">11113</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
-<div class="line"><a name="l11114"></a><span class="lineno">11114</span>&#160;    {</div>
-<div class="line"><a name="l11115"></a><span class="lineno">11115</span>&#160;        <span class="keyword">const</span> VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset;</div>
-<div class="line"><a name="l11116"></a><span class="lineno">11116</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = 0;</div>
-<div class="line"><a name="l11117"></a><span class="lineno">11117</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
-<div class="line"><a name="l11118"></a><span class="lineno">11118</span>&#160;        {</div>
-<div class="line"><a name="l11119"></a><span class="lineno">11119</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAlloc2ndIndex to the end.</span></div>
-<div class="line"><a name="l11120"></a><span class="lineno">11120</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex &lt; suballoc2ndCount &amp;&amp;</div>
-<div class="line"><a name="l11121"></a><span class="lineno">11121</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l11122"></a><span class="lineno">11122</span>&#160;            {</div>
-<div class="line"><a name="l11123"></a><span class="lineno">11123</span>&#160;                ++nextAlloc2ndIndex;</div>
-<div class="line"><a name="l11124"></a><span class="lineno">11124</span>&#160;            }</div>
-<div class="line"><a name="l11125"></a><span class="lineno">11125</span>&#160; </div>
-<div class="line"><a name="l11126"></a><span class="lineno">11126</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
-<div class="line"><a name="l11127"></a><span class="lineno">11127</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex &lt; suballoc2ndCount)</div>
-<div class="line"><a name="l11128"></a><span class="lineno">11128</span>&#160;            {</div>
-<div class="line"><a name="l11129"></a><span class="lineno">11129</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
-<div class="line"><a name="l11130"></a><span class="lineno">11130</span>&#160; </div>
-<div class="line"><a name="l11131"></a><span class="lineno">11131</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
-<div class="line"><a name="l11132"></a><span class="lineno">11132</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
-<div class="line"><a name="l11133"></a><span class="lineno">11133</span>&#160;                {</div>
-<div class="line"><a name="l11134"></a><span class="lineno">11134</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
-<div class="line"><a name="l11135"></a><span class="lineno">11135</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
-<div class="line"><a name="l11136"></a><span class="lineno">11136</span>&#160;                    PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize);</div>
-<div class="line"><a name="l11137"></a><span class="lineno">11137</span>&#160;                }</div>
-<div class="line"><a name="l11138"></a><span class="lineno">11138</span>&#160; </div>
-<div class="line"><a name="l11139"></a><span class="lineno">11139</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
-<div class="line"><a name="l11140"></a><span class="lineno">11140</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
-<div class="line"><a name="l11141"></a><span class="lineno">11141</span>&#160;                PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.hAllocation);</div>
-<div class="line"><a name="l11142"></a><span class="lineno">11142</span>&#160; </div>
-<div class="line"><a name="l11143"></a><span class="lineno">11143</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
-<div class="line"><a name="l11144"></a><span class="lineno">11144</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
-<div class="line"><a name="l11145"></a><span class="lineno">11145</span>&#160;                ++nextAlloc2ndIndex;</div>
-<div class="line"><a name="l11146"></a><span class="lineno">11146</span>&#160;            }</div>
-<div class="line"><a name="l11147"></a><span class="lineno">11147</span>&#160;            <span class="comment">// We are at the end.</span></div>
-<div class="line"><a name="l11148"></a><span class="lineno">11148</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11149"></a><span class="lineno">11149</span>&#160;            {</div>
-<div class="line"><a name="l11150"></a><span class="lineno">11150</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
-<div class="line"><a name="l11151"></a><span class="lineno">11151</span>&#160;                {</div>
-<div class="line"><a name="l11152"></a><span class="lineno">11152</span>&#160;                    <span class="comment">// There is free space from lastOffset to freeSpace2ndTo1stEnd.</span></div>
-<div class="line"><a name="l11153"></a><span class="lineno">11153</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = freeSpace2ndTo1stEnd - lastOffset;</div>
-<div class="line"><a name="l11154"></a><span class="lineno">11154</span>&#160;                    PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize);</div>
-<div class="line"><a name="l11155"></a><span class="lineno">11155</span>&#160;                }</div>
-<div class="line"><a name="l11156"></a><span class="lineno">11156</span>&#160; </div>
-<div class="line"><a name="l11157"></a><span class="lineno">11157</span>&#160;                <span class="comment">// End of loop.</span></div>
-<div class="line"><a name="l11158"></a><span class="lineno">11158</span>&#160;                lastOffset = freeSpace2ndTo1stEnd;</div>
-<div class="line"><a name="l11159"></a><span class="lineno">11159</span>&#160;            }</div>
-<div class="line"><a name="l11160"></a><span class="lineno">11160</span>&#160;        }</div>
-<div class="line"><a name="l11161"></a><span class="lineno">11161</span>&#160;    }</div>
-<div class="line"><a name="l11162"></a><span class="lineno">11162</span>&#160; </div>
-<div class="line"><a name="l11163"></a><span class="lineno">11163</span>&#160;    nextAlloc1stIndex = m_1stNullItemsBeginCount;</div>
-<div class="line"><a name="l11164"></a><span class="lineno">11164</span>&#160;    <span class="keywordflow">while</span>(lastOffset &lt; freeSpace1stTo2ndEnd)</div>
-<div class="line"><a name="l11165"></a><span class="lineno">11165</span>&#160;    {</div>
-<div class="line"><a name="l11166"></a><span class="lineno">11166</span>&#160;        <span class="comment">// Find next non-null allocation or move nextAllocIndex to the end.</span></div>
-<div class="line"><a name="l11167"></a><span class="lineno">11167</span>&#160;        <span class="keywordflow">while</span>(nextAlloc1stIndex &lt; suballoc1stCount &amp;&amp;</div>
-<div class="line"><a name="l11168"></a><span class="lineno">11168</span>&#160;            suballocations1st[nextAlloc1stIndex].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l11169"></a><span class="lineno">11169</span>&#160;        {</div>
-<div class="line"><a name="l11170"></a><span class="lineno">11170</span>&#160;            ++nextAlloc1stIndex;</div>
-<div class="line"><a name="l11171"></a><span class="lineno">11171</span>&#160;        }</div>
-<div class="line"><a name="l11172"></a><span class="lineno">11172</span>&#160; </div>
-<div class="line"><a name="l11173"></a><span class="lineno">11173</span>&#160;        <span class="comment">// Found non-null allocation.</span></div>
-<div class="line"><a name="l11174"></a><span class="lineno">11174</span>&#160;        <span class="keywordflow">if</span>(nextAlloc1stIndex &lt; suballoc1stCount)</div>
-<div class="line"><a name="l11175"></a><span class="lineno">11175</span>&#160;        {</div>
-<div class="line"><a name="l11176"></a><span class="lineno">11176</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[nextAlloc1stIndex];</div>
-<div class="line"><a name="l11177"></a><span class="lineno">11177</span>&#160; </div>
-<div class="line"><a name="l11178"></a><span class="lineno">11178</span>&#160;            <span class="comment">// 1. Process free space before this allocation.</span></div>
-<div class="line"><a name="l11179"></a><span class="lineno">11179</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
-<div class="line"><a name="l11180"></a><span class="lineno">11180</span>&#160;            {</div>
-<div class="line"><a name="l11181"></a><span class="lineno">11181</span>&#160;                <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
-<div class="line"><a name="l11182"></a><span class="lineno">11182</span>&#160;                <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
-<div class="line"><a name="l11183"></a><span class="lineno">11183</span>&#160;                PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize);</div>
-<div class="line"><a name="l11184"></a><span class="lineno">11184</span>&#160;            }</div>
-<div class="line"><a name="l11185"></a><span class="lineno">11185</span>&#160; </div>
-<div class="line"><a name="l11186"></a><span class="lineno">11186</span>&#160;            <span class="comment">// 2. Process this allocation.</span></div>
-<div class="line"><a name="l11187"></a><span class="lineno">11187</span>&#160;            <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
-<div class="line"><a name="l11188"></a><span class="lineno">11188</span>&#160;            PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.hAllocation);</div>
-<div class="line"><a name="l11189"></a><span class="lineno">11189</span>&#160; </div>
-<div class="line"><a name="l11190"></a><span class="lineno">11190</span>&#160;            <span class="comment">// 3. Prepare for next iteration.</span></div>
-<div class="line"><a name="l11191"></a><span class="lineno">11191</span>&#160;            lastOffset = suballoc.offset + suballoc.size;</div>
-<div class="line"><a name="l11192"></a><span class="lineno">11192</span>&#160;            ++nextAlloc1stIndex;</div>
-<div class="line"><a name="l11193"></a><span class="lineno">11193</span>&#160;        }</div>
-<div class="line"><a name="l11194"></a><span class="lineno">11194</span>&#160;        <span class="comment">// We are at the end.</span></div>
-<div class="line"><a name="l11195"></a><span class="lineno">11195</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11196"></a><span class="lineno">11196</span>&#160;        {</div>
-<div class="line"><a name="l11197"></a><span class="lineno">11197</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; freeSpace1stTo2ndEnd)</div>
-<div class="line"><a name="l11198"></a><span class="lineno">11198</span>&#160;            {</div>
-<div class="line"><a name="l11199"></a><span class="lineno">11199</span>&#160;                <span class="comment">// There is free space from lastOffset to freeSpace1stTo2ndEnd.</span></div>
-<div class="line"><a name="l11200"></a><span class="lineno">11200</span>&#160;                <span class="keyword">const</span> VkDeviceSize unusedRangeSize = freeSpace1stTo2ndEnd - lastOffset;</div>
-<div class="line"><a name="l11201"></a><span class="lineno">11201</span>&#160;                PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize);</div>
-<div class="line"><a name="l11202"></a><span class="lineno">11202</span>&#160;            }</div>
-<div class="line"><a name="l11203"></a><span class="lineno">11203</span>&#160; </div>
-<div class="line"><a name="l11204"></a><span class="lineno">11204</span>&#160;            <span class="comment">// End of loop.</span></div>
-<div class="line"><a name="l11205"></a><span class="lineno">11205</span>&#160;            lastOffset = freeSpace1stTo2ndEnd;</div>
-<div class="line"><a name="l11206"></a><span class="lineno">11206</span>&#160;        }</div>
-<div class="line"><a name="l11207"></a><span class="lineno">11207</span>&#160;    }</div>
-<div class="line"><a name="l11208"></a><span class="lineno">11208</span>&#160; </div>
-<div class="line"><a name="l11209"></a><span class="lineno">11209</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
-<div class="line"><a name="l11210"></a><span class="lineno">11210</span>&#160;    {</div>
-<div class="line"><a name="l11211"></a><span class="lineno">11211</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = suballocations2nd.size() - 1;</div>
-<div class="line"><a name="l11212"></a><span class="lineno">11212</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; size)</div>
-<div class="line"><a name="l11213"></a><span class="lineno">11213</span>&#160;        {</div>
-<div class="line"><a name="l11214"></a><span class="lineno">11214</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAlloc2ndIndex to the end.</span></div>
-<div class="line"><a name="l11215"></a><span class="lineno">11215</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex != SIZE_MAX &amp;&amp;</div>
-<div class="line"><a name="l11216"></a><span class="lineno">11216</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l11217"></a><span class="lineno">11217</span>&#160;            {</div>
-<div class="line"><a name="l11218"></a><span class="lineno">11218</span>&#160;                --nextAlloc2ndIndex;</div>
-<div class="line"><a name="l11219"></a><span class="lineno">11219</span>&#160;            }</div>
-<div class="line"><a name="l11220"></a><span class="lineno">11220</span>&#160; </div>
-<div class="line"><a name="l11221"></a><span class="lineno">11221</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
-<div class="line"><a name="l11222"></a><span class="lineno">11222</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex != SIZE_MAX)</div>
-<div class="line"><a name="l11223"></a><span class="lineno">11223</span>&#160;            {</div>
-<div class="line"><a name="l11224"></a><span class="lineno">11224</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
-<div class="line"><a name="l11225"></a><span class="lineno">11225</span>&#160; </div>
-<div class="line"><a name="l11226"></a><span class="lineno">11226</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
-<div class="line"><a name="l11227"></a><span class="lineno">11227</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
-<div class="line"><a name="l11228"></a><span class="lineno">11228</span>&#160;                {</div>
-<div class="line"><a name="l11229"></a><span class="lineno">11229</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
-<div class="line"><a name="l11230"></a><span class="lineno">11230</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
-<div class="line"><a name="l11231"></a><span class="lineno">11231</span>&#160;                    PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize);</div>
-<div class="line"><a name="l11232"></a><span class="lineno">11232</span>&#160;                }</div>
-<div class="line"><a name="l11233"></a><span class="lineno">11233</span>&#160; </div>
-<div class="line"><a name="l11234"></a><span class="lineno">11234</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
-<div class="line"><a name="l11235"></a><span class="lineno">11235</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
-<div class="line"><a name="l11236"></a><span class="lineno">11236</span>&#160;                PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.hAllocation);</div>
-<div class="line"><a name="l11237"></a><span class="lineno">11237</span>&#160; </div>
-<div class="line"><a name="l11238"></a><span class="lineno">11238</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
-<div class="line"><a name="l11239"></a><span class="lineno">11239</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
-<div class="line"><a name="l11240"></a><span class="lineno">11240</span>&#160;                --nextAlloc2ndIndex;</div>
-<div class="line"><a name="l11241"></a><span class="lineno">11241</span>&#160;            }</div>
-<div class="line"><a name="l11242"></a><span class="lineno">11242</span>&#160;            <span class="comment">// We are at the end.</span></div>
-<div class="line"><a name="l11243"></a><span class="lineno">11243</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11244"></a><span class="lineno">11244</span>&#160;            {</div>
-<div class="line"><a name="l11245"></a><span class="lineno">11245</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; size)</div>
-<div class="line"><a name="l11246"></a><span class="lineno">11246</span>&#160;                {</div>
-<div class="line"><a name="l11247"></a><span class="lineno">11247</span>&#160;                    <span class="comment">// There is free space from lastOffset to size.</span></div>
-<div class="line"><a name="l11248"></a><span class="lineno">11248</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = size - lastOffset;</div>
-<div class="line"><a name="l11249"></a><span class="lineno">11249</span>&#160;                    PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize);</div>
-<div class="line"><a name="l11250"></a><span class="lineno">11250</span>&#160;                }</div>
-<div class="line"><a name="l11251"></a><span class="lineno">11251</span>&#160; </div>
-<div class="line"><a name="l11252"></a><span class="lineno">11252</span>&#160;                <span class="comment">// End of loop.</span></div>
-<div class="line"><a name="l11253"></a><span class="lineno">11253</span>&#160;                lastOffset = size;</div>
-<div class="line"><a name="l11254"></a><span class="lineno">11254</span>&#160;            }</div>
-<div class="line"><a name="l11255"></a><span class="lineno">11255</span>&#160;        }</div>
-<div class="line"><a name="l11256"></a><span class="lineno">11256</span>&#160;    }</div>
-<div class="line"><a name="l11257"></a><span class="lineno">11257</span>&#160; </div>
-<div class="line"><a name="l11258"></a><span class="lineno">11258</span>&#160;    PrintDetailedMap_End(json);</div>
-<div class="line"><a name="l11259"></a><span class="lineno">11259</span>&#160;}</div>
-<div class="line"><a name="l11260"></a><span class="lineno">11260</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l11261"></a><span class="lineno">11261</span>&#160; </div>
-<div class="line"><a name="l11262"></a><span class="lineno">11262</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Linear::CreateAllocationRequest(</div>
-<div class="line"><a name="l11263"></a><span class="lineno">11263</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l11264"></a><span class="lineno">11264</span>&#160;    uint32_t frameInUseCount,</div>
-<div class="line"><a name="l11265"></a><span class="lineno">11265</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
-<div class="line"><a name="l11266"></a><span class="lineno">11266</span>&#160;    VkDeviceSize allocSize,</div>
-<div class="line"><a name="l11267"></a><span class="lineno">11267</span>&#160;    VkDeviceSize allocAlignment,</div>
-<div class="line"><a name="l11268"></a><span class="lineno">11268</span>&#160;    <span class="keywordtype">bool</span> upperAddress,</div>
-<div class="line"><a name="l11269"></a><span class="lineno">11269</span>&#160;    VmaSuballocationType allocType,</div>
-<div class="line"><a name="l11270"></a><span class="lineno">11270</span>&#160;    <span class="keywordtype">bool</span> canMakeOtherLost,</div>
-<div class="line"><a name="l11271"></a><span class="lineno">11271</span>&#160;    uint32_t strategy,</div>
-<div class="line"><a name="l11272"></a><span class="lineno">11272</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
-<div class="line"><a name="l11273"></a><span class="lineno">11273</span>&#160;{</div>
-<div class="line"><a name="l11274"></a><span class="lineno">11274</span>&#160;    VMA_ASSERT(allocSize &gt; 0);</div>
-<div class="line"><a name="l11275"></a><span class="lineno">11275</span>&#160;    VMA_ASSERT(allocType != VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l11276"></a><span class="lineno">11276</span>&#160;    VMA_ASSERT(pAllocationRequest != VMA_NULL);</div>
-<div class="line"><a name="l11277"></a><span class="lineno">11277</span>&#160;    VMA_HEAVY_ASSERT(Validate());</div>
-<div class="line"><a name="l11278"></a><span class="lineno">11278</span>&#160;    <span class="keywordflow">return</span> upperAddress ?</div>
-<div class="line"><a name="l11279"></a><span class="lineno">11279</span>&#160;        CreateAllocationRequest_UpperAddress(</div>
-<div class="line"><a name="l11280"></a><span class="lineno">11280</span>&#160;            currentFrameIndex, frameInUseCount, bufferImageGranularity,</div>
-<div class="line"><a name="l11281"></a><span class="lineno">11281</span>&#160;            allocSize, allocAlignment, allocType, canMakeOtherLost, strategy, pAllocationRequest) :</div>
-<div class="line"><a name="l11282"></a><span class="lineno">11282</span>&#160;        CreateAllocationRequest_LowerAddress(</div>
-<div class="line"><a name="l11283"></a><span class="lineno">11283</span>&#160;            currentFrameIndex, frameInUseCount, bufferImageGranularity,</div>
-<div class="line"><a name="l11284"></a><span class="lineno">11284</span>&#160;            allocSize, allocAlignment, allocType, canMakeOtherLost, strategy, pAllocationRequest);</div>
-<div class="line"><a name="l11285"></a><span class="lineno">11285</span>&#160;}</div>
-<div class="line"><a name="l11286"></a><span class="lineno">11286</span>&#160; </div>
-<div class="line"><a name="l11287"></a><span class="lineno">11287</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Linear::CreateAllocationRequest_UpperAddress(</div>
-<div class="line"><a name="l11288"></a><span class="lineno">11288</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l11289"></a><span class="lineno">11289</span>&#160;    uint32_t frameInUseCount,</div>
-<div class="line"><a name="l11290"></a><span class="lineno">11290</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
-<div class="line"><a name="l11291"></a><span class="lineno">11291</span>&#160;    VkDeviceSize allocSize,</div>
-<div class="line"><a name="l11292"></a><span class="lineno">11292</span>&#160;    VkDeviceSize allocAlignment,</div>
-<div class="line"><a name="l11293"></a><span class="lineno">11293</span>&#160;    VmaSuballocationType allocType,</div>
-<div class="line"><a name="l11294"></a><span class="lineno">11294</span>&#160;    <span class="keywordtype">bool</span> canMakeOtherLost,</div>
-<div class="line"><a name="l11295"></a><span class="lineno">11295</span>&#160;    uint32_t strategy,</div>
-<div class="line"><a name="l11296"></a><span class="lineno">11296</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
-<div class="line"><a name="l11297"></a><span class="lineno">11297</span>&#160;{</div>
-<div class="line"><a name="l11298"></a><span class="lineno">11298</span>&#160;    <span class="keyword">const</span> VkDeviceSize size = GetSize();</div>
-<div class="line"><a name="l11299"></a><span class="lineno">11299</span>&#160;    SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
-<div class="line"><a name="l11300"></a><span class="lineno">11300</span>&#160;    SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
-<div class="line"><a name="l11301"></a><span class="lineno">11301</span>&#160; </div>
-<div class="line"><a name="l11302"></a><span class="lineno">11302</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
-<div class="line"><a name="l11303"></a><span class="lineno">11303</span>&#160;    {</div>
-<div class="line"><a name="l11304"></a><span class="lineno">11304</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Trying to use pool with linear algorithm as double stack, while it is already being used as ring buffer.&quot;</span>);</div>
-<div class="line"><a name="l11305"></a><span class="lineno">11305</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11306"></a><span class="lineno">11306</span>&#160;    }</div>
-<div class="line"><a name="l11307"></a><span class="lineno">11307</span>&#160; </div>
-<div class="line"><a name="l11308"></a><span class="lineno">11308</span>&#160;    <span class="comment">// Try to allocate before 2nd.back(), or end of block if 2nd.empty().</span></div>
-<div class="line"><a name="l11309"></a><span class="lineno">11309</span>&#160;    <span class="keywordflow">if</span>(allocSize &gt; size)</div>
-<div class="line"><a name="l11310"></a><span class="lineno">11310</span>&#160;    {</div>
-<div class="line"><a name="l11311"></a><span class="lineno">11311</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11312"></a><span class="lineno">11312</span>&#160;    }</div>
-<div class="line"><a name="l11313"></a><span class="lineno">11313</span>&#160;    VkDeviceSize resultBaseOffset = size - allocSize;</div>
-<div class="line"><a name="l11314"></a><span class="lineno">11314</span>&#160;    <span class="keywordflow">if</span>(!suballocations2nd.empty())</div>
-<div class="line"><a name="l11315"></a><span class="lineno">11315</span>&#160;    {</div>
-<div class="line"><a name="l11316"></a><span class="lineno">11316</span>&#160;        <span class="keyword">const</span> VmaSuballocation&amp; lastSuballoc = suballocations2nd.back();</div>
-<div class="line"><a name="l11317"></a><span class="lineno">11317</span>&#160;        resultBaseOffset = lastSuballoc.offset - allocSize;</div>
-<div class="line"><a name="l11318"></a><span class="lineno">11318</span>&#160;        <span class="keywordflow">if</span>(allocSize &gt; lastSuballoc.offset)</div>
-<div class="line"><a name="l11319"></a><span class="lineno">11319</span>&#160;        {</div>
-<div class="line"><a name="l11320"></a><span class="lineno">11320</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11321"></a><span class="lineno">11321</span>&#160;        }</div>
-<div class="line"><a name="l11322"></a><span class="lineno">11322</span>&#160;    }</div>
-<div class="line"><a name="l11323"></a><span class="lineno">11323</span>&#160; </div>
-<div class="line"><a name="l11324"></a><span class="lineno">11324</span>&#160;    <span class="comment">// Start from offset equal to end of free space.</span></div>
-<div class="line"><a name="l11325"></a><span class="lineno">11325</span>&#160;    VkDeviceSize resultOffset = resultBaseOffset;</div>
-<div class="line"><a name="l11326"></a><span class="lineno">11326</span>&#160; </div>
-<div class="line"><a name="l11327"></a><span class="lineno">11327</span>&#160;    <span class="comment">// Apply VMA_DEBUG_MARGIN at the end.</span></div>
-<div class="line"><a name="l11328"></a><span class="lineno">11328</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_MARGIN &gt; 0)</div>
-<div class="line"><a name="l11329"></a><span class="lineno">11329</span>&#160;    {</div>
-<div class="line"><a name="l11330"></a><span class="lineno">11330</span>&#160;        <span class="keywordflow">if</span>(resultOffset &lt; VMA_DEBUG_MARGIN)</div>
-<div class="line"><a name="l11331"></a><span class="lineno">11331</span>&#160;        {</div>
-<div class="line"><a name="l11332"></a><span class="lineno">11332</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11333"></a><span class="lineno">11333</span>&#160;        }</div>
-<div class="line"><a name="l11334"></a><span class="lineno">11334</span>&#160;        resultOffset -= VMA_DEBUG_MARGIN;</div>
-<div class="line"><a name="l11335"></a><span class="lineno">11335</span>&#160;    }</div>
-<div class="line"><a name="l11336"></a><span class="lineno">11336</span>&#160; </div>
-<div class="line"><a name="l11337"></a><span class="lineno">11337</span>&#160;    <span class="comment">// Apply alignment.</span></div>
-<div class="line"><a name="l11338"></a><span class="lineno">11338</span>&#160;    resultOffset = VmaAlignDown(resultOffset, allocAlignment);</div>
-<div class="line"><a name="l11339"></a><span class="lineno">11339</span>&#160; </div>
-<div class="line"><a name="l11340"></a><span class="lineno">11340</span>&#160;    <span class="comment">// Check next suballocations from 2nd for BufferImageGranularity conflicts.</span></div>
-<div class="line"><a name="l11341"></a><span class="lineno">11341</span>&#160;    <span class="comment">// Make bigger alignment if necessary.</span></div>
-<div class="line"><a name="l11342"></a><span class="lineno">11342</span>&#160;    <span class="keywordflow">if</span>(bufferImageGranularity &gt; 1 &amp;&amp; bufferImageGranularity != allocAlignment &amp;&amp; !suballocations2nd.empty())</div>
-<div class="line"><a name="l11343"></a><span class="lineno">11343</span>&#160;    {</div>
-<div class="line"><a name="l11344"></a><span class="lineno">11344</span>&#160;        <span class="keywordtype">bool</span> bufferImageGranularityConflict = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11345"></a><span class="lineno">11345</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> nextSuballocIndex = suballocations2nd.size(); nextSuballocIndex--; )</div>
-<div class="line"><a name="l11346"></a><span class="lineno">11346</span>&#160;        {</div>
-<div class="line"><a name="l11347"></a><span class="lineno">11347</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; nextSuballoc = suballocations2nd[nextSuballocIndex];</div>
-<div class="line"><a name="l11348"></a><span class="lineno">11348</span>&#160;            <span class="keywordflow">if</span>(VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))</div>
-<div class="line"><a name="l11349"></a><span class="lineno">11349</span>&#160;            {</div>
-<div class="line"><a name="l11350"></a><span class="lineno">11350</span>&#160;                <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(nextSuballoc.type, allocType))</div>
-<div class="line"><a name="l11351"></a><span class="lineno">11351</span>&#160;                {</div>
-<div class="line"><a name="l11352"></a><span class="lineno">11352</span>&#160;                    bufferImageGranularityConflict = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l11353"></a><span class="lineno">11353</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11354"></a><span class="lineno">11354</span>&#160;                }</div>
-<div class="line"><a name="l11355"></a><span class="lineno">11355</span>&#160;            }</div>
-<div class="line"><a name="l11356"></a><span class="lineno">11356</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11357"></a><span class="lineno">11357</span>&#160;                <span class="comment">// Already on previous page.</span></div>
-<div class="line"><a name="l11358"></a><span class="lineno">11358</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11359"></a><span class="lineno">11359</span>&#160;        }</div>
-<div class="line"><a name="l11360"></a><span class="lineno">11360</span>&#160;        <span class="keywordflow">if</span>(bufferImageGranularityConflict)</div>
-<div class="line"><a name="l11361"></a><span class="lineno">11361</span>&#160;        {</div>
-<div class="line"><a name="l11362"></a><span class="lineno">11362</span>&#160;            resultOffset = VmaAlignDown(resultOffset, bufferImageGranularity);</div>
-<div class="line"><a name="l11363"></a><span class="lineno">11363</span>&#160;        }</div>
-<div class="line"><a name="l11364"></a><span class="lineno">11364</span>&#160;    }</div>
-<div class="line"><a name="l11365"></a><span class="lineno">11365</span>&#160; </div>
-<div class="line"><a name="l11366"></a><span class="lineno">11366</span>&#160;    <span class="comment">// There is enough free space.</span></div>
-<div class="line"><a name="l11367"></a><span class="lineno">11367</span>&#160;    <span class="keyword">const</span> VkDeviceSize endOf1st = !suballocations1st.empty() ?</div>
-<div class="line"><a name="l11368"></a><span class="lineno">11368</span>&#160;        suballocations1st.back().offset + suballocations1st.back().size :</div>
-<div class="line"><a name="l11369"></a><span class="lineno">11369</span>&#160;        0;</div>
-<div class="line"><a name="l11370"></a><span class="lineno">11370</span>&#160;    <span class="keywordflow">if</span>(endOf1st + VMA_DEBUG_MARGIN &lt;= resultOffset)</div>
-<div class="line"><a name="l11371"></a><span class="lineno">11371</span>&#160;    {</div>
-<div class="line"><a name="l11372"></a><span class="lineno">11372</span>&#160;        <span class="comment">// Check previous suballocations for BufferImageGranularity conflicts.</span></div>
-<div class="line"><a name="l11373"></a><span class="lineno">11373</span>&#160;        <span class="comment">// If conflict exists, allocation cannot be made here.</span></div>
-<div class="line"><a name="l11374"></a><span class="lineno">11374</span>&#160;        <span class="keywordflow">if</span>(bufferImageGranularity &gt; 1)</div>
-<div class="line"><a name="l11375"></a><span class="lineno">11375</span>&#160;        {</div>
-<div class="line"><a name="l11376"></a><span class="lineno">11376</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> prevSuballocIndex = suballocations1st.size(); prevSuballocIndex--; )</div>
-<div class="line"><a name="l11377"></a><span class="lineno">11377</span>&#160;            {</div>
-<div class="line"><a name="l11378"></a><span class="lineno">11378</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; prevSuballoc = suballocations1st[prevSuballocIndex];</div>
-<div class="line"><a name="l11379"></a><span class="lineno">11379</span>&#160;                <span class="keywordflow">if</span>(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity))</div>
-<div class="line"><a name="l11380"></a><span class="lineno">11380</span>&#160;                {</div>
-<div class="line"><a name="l11381"></a><span class="lineno">11381</span>&#160;                    <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(allocType, prevSuballoc.type))</div>
-<div class="line"><a name="l11382"></a><span class="lineno">11382</span>&#160;                    {</div>
-<div class="line"><a name="l11383"></a><span class="lineno">11383</span>&#160;                        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11384"></a><span class="lineno">11384</span>&#160;                    }</div>
-<div class="line"><a name="l11385"></a><span class="lineno">11385</span>&#160;                }</div>
-<div class="line"><a name="l11386"></a><span class="lineno">11386</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11387"></a><span class="lineno">11387</span>&#160;                {</div>
-<div class="line"><a name="l11388"></a><span class="lineno">11388</span>&#160;                    <span class="comment">// Already on next page.</span></div>
-<div class="line"><a name="l11389"></a><span class="lineno">11389</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11390"></a><span class="lineno">11390</span>&#160;                }</div>
-<div class="line"><a name="l11391"></a><span class="lineno">11391</span>&#160;            }</div>
-<div class="line"><a name="l11392"></a><span class="lineno">11392</span>&#160;        }</div>
-<div class="line"><a name="l11393"></a><span class="lineno">11393</span>&#160; </div>
-<div class="line"><a name="l11394"></a><span class="lineno">11394</span>&#160;        <span class="comment">// All tests passed: Success.</span></div>
-<div class="line"><a name="l11395"></a><span class="lineno">11395</span>&#160;        pAllocationRequest-&gt;offset = resultOffset;</div>
-<div class="line"><a name="l11396"></a><span class="lineno">11396</span>&#160;        pAllocationRequest-&gt;sumFreeSize = resultBaseOffset + allocSize - endOf1st;</div>
-<div class="line"><a name="l11397"></a><span class="lineno">11397</span>&#160;        pAllocationRequest-&gt;sumItemSize = 0;</div>
-<div class="line"><a name="l11398"></a><span class="lineno">11398</span>&#160;        <span class="comment">// pAllocationRequest-&gt;item unused.</span></div>
-<div class="line"><a name="l11399"></a><span class="lineno">11399</span>&#160;        pAllocationRequest-&gt;itemsToMakeLostCount = 0;</div>
-<div class="line"><a name="l11400"></a><span class="lineno">11400</span>&#160;        pAllocationRequest-&gt;type = VmaAllocationRequestType::UpperAddress;</div>
-<div class="line"><a name="l11401"></a><span class="lineno">11401</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l11402"></a><span class="lineno">11402</span>&#160;    }</div>
-<div class="line"><a name="l11403"></a><span class="lineno">11403</span>&#160; </div>
-<div class="line"><a name="l11404"></a><span class="lineno">11404</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11405"></a><span class="lineno">11405</span>&#160;}</div>
-<div class="line"><a name="l11406"></a><span class="lineno">11406</span>&#160; </div>
-<div class="line"><a name="l11407"></a><span class="lineno">11407</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Linear::CreateAllocationRequest_LowerAddress(</div>
-<div class="line"><a name="l11408"></a><span class="lineno">11408</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l11409"></a><span class="lineno">11409</span>&#160;    uint32_t frameInUseCount,</div>
-<div class="line"><a name="l11410"></a><span class="lineno">11410</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
-<div class="line"><a name="l11411"></a><span class="lineno">11411</span>&#160;    VkDeviceSize allocSize,</div>
-<div class="line"><a name="l11412"></a><span class="lineno">11412</span>&#160;    VkDeviceSize allocAlignment,</div>
-<div class="line"><a name="l11413"></a><span class="lineno">11413</span>&#160;    VmaSuballocationType allocType,</div>
-<div class="line"><a name="l11414"></a><span class="lineno">11414</span>&#160;    <span class="keywordtype">bool</span> canMakeOtherLost,</div>
-<div class="line"><a name="l11415"></a><span class="lineno">11415</span>&#160;    uint32_t strategy,</div>
-<div class="line"><a name="l11416"></a><span class="lineno">11416</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
-<div class="line"><a name="l11417"></a><span class="lineno">11417</span>&#160;{</div>
-<div class="line"><a name="l11418"></a><span class="lineno">11418</span>&#160;    <span class="keyword">const</span> VkDeviceSize size = GetSize();</div>
-<div class="line"><a name="l11419"></a><span class="lineno">11419</span>&#160;    SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
-<div class="line"><a name="l11420"></a><span class="lineno">11420</span>&#160;    SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
-<div class="line"><a name="l11421"></a><span class="lineno">11421</span>&#160; </div>
-<div class="line"><a name="l11422"></a><span class="lineno">11422</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_EMPTY || m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
-<div class="line"><a name="l11423"></a><span class="lineno">11423</span>&#160;    {</div>
-<div class="line"><a name="l11424"></a><span class="lineno">11424</span>&#160;        <span class="comment">// Try to allocate at the end of 1st vector.</span></div>
-<div class="line"><a name="l11425"></a><span class="lineno">11425</span>&#160; </div>
-<div class="line"><a name="l11426"></a><span class="lineno">11426</span>&#160;        VkDeviceSize resultBaseOffset = 0;</div>
-<div class="line"><a name="l11427"></a><span class="lineno">11427</span>&#160;        <span class="keywordflow">if</span>(!suballocations1st.empty())</div>
-<div class="line"><a name="l11428"></a><span class="lineno">11428</span>&#160;        {</div>
-<div class="line"><a name="l11429"></a><span class="lineno">11429</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; lastSuballoc = suballocations1st.back();</div>
-<div class="line"><a name="l11430"></a><span class="lineno">11430</span>&#160;            resultBaseOffset = lastSuballoc.offset + lastSuballoc.size;</div>
-<div class="line"><a name="l11431"></a><span class="lineno">11431</span>&#160;        }</div>
-<div class="line"><a name="l11432"></a><span class="lineno">11432</span>&#160; </div>
-<div class="line"><a name="l11433"></a><span class="lineno">11433</span>&#160;        <span class="comment">// Start from offset equal to beginning of free space.</span></div>
-<div class="line"><a name="l11434"></a><span class="lineno">11434</span>&#160;        VkDeviceSize resultOffset = resultBaseOffset;</div>
-<div class="line"><a name="l11435"></a><span class="lineno">11435</span>&#160; </div>
-<div class="line"><a name="l11436"></a><span class="lineno">11436</span>&#160;        <span class="comment">// Apply VMA_DEBUG_MARGIN at the beginning.</span></div>
-<div class="line"><a name="l11437"></a><span class="lineno">11437</span>&#160;        <span class="keywordflow">if</span>(VMA_DEBUG_MARGIN &gt; 0)</div>
-<div class="line"><a name="l11438"></a><span class="lineno">11438</span>&#160;        {</div>
-<div class="line"><a name="l11439"></a><span class="lineno">11439</span>&#160;            resultOffset += VMA_DEBUG_MARGIN;</div>
-<div class="line"><a name="l11440"></a><span class="lineno">11440</span>&#160;        }</div>
-<div class="line"><a name="l11441"></a><span class="lineno">11441</span>&#160; </div>
-<div class="line"><a name="l11442"></a><span class="lineno">11442</span>&#160;        <span class="comment">// Apply alignment.</span></div>
-<div class="line"><a name="l11443"></a><span class="lineno">11443</span>&#160;        resultOffset = VmaAlignUp(resultOffset, allocAlignment);</div>
-<div class="line"><a name="l11444"></a><span class="lineno">11444</span>&#160; </div>
-<div class="line"><a name="l11445"></a><span class="lineno">11445</span>&#160;        <span class="comment">// Check previous suballocations for BufferImageGranularity conflicts.</span></div>
-<div class="line"><a name="l11446"></a><span class="lineno">11446</span>&#160;        <span class="comment">// Make bigger alignment if necessary.</span></div>
-<div class="line"><a name="l11447"></a><span class="lineno">11447</span>&#160;        <span class="keywordflow">if</span>(bufferImageGranularity &gt; 1 &amp;&amp; bufferImageGranularity != allocAlignment &amp;&amp; !suballocations1st.empty())</div>
-<div class="line"><a name="l11448"></a><span class="lineno">11448</span>&#160;        {</div>
-<div class="line"><a name="l11449"></a><span class="lineno">11449</span>&#160;            <span class="keywordtype">bool</span> bufferImageGranularityConflict = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11450"></a><span class="lineno">11450</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> prevSuballocIndex = suballocations1st.size(); prevSuballocIndex--; )</div>
-<div class="line"><a name="l11451"></a><span class="lineno">11451</span>&#160;            {</div>
-<div class="line"><a name="l11452"></a><span class="lineno">11452</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; prevSuballoc = suballocations1st[prevSuballocIndex];</div>
-<div class="line"><a name="l11453"></a><span class="lineno">11453</span>&#160;                <span class="keywordflow">if</span>(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity))</div>
-<div class="line"><a name="l11454"></a><span class="lineno">11454</span>&#160;                {</div>
-<div class="line"><a name="l11455"></a><span class="lineno">11455</span>&#160;                    <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))</div>
-<div class="line"><a name="l11456"></a><span class="lineno">11456</span>&#160;                    {</div>
-<div class="line"><a name="l11457"></a><span class="lineno">11457</span>&#160;                        bufferImageGranularityConflict = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l11458"></a><span class="lineno">11458</span>&#160;                        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11459"></a><span class="lineno">11459</span>&#160;                    }</div>
-<div class="line"><a name="l11460"></a><span class="lineno">11460</span>&#160;                }</div>
-<div class="line"><a name="l11461"></a><span class="lineno">11461</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11462"></a><span class="lineno">11462</span>&#160;                    <span class="comment">// Already on previous page.</span></div>
-<div class="line"><a name="l11463"></a><span class="lineno">11463</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11464"></a><span class="lineno">11464</span>&#160;            }</div>
-<div class="line"><a name="l11465"></a><span class="lineno">11465</span>&#160;            <span class="keywordflow">if</span>(bufferImageGranularityConflict)</div>
-<div class="line"><a name="l11466"></a><span class="lineno">11466</span>&#160;            {</div>
-<div class="line"><a name="l11467"></a><span class="lineno">11467</span>&#160;                resultOffset = VmaAlignUp(resultOffset, bufferImageGranularity);</div>
-<div class="line"><a name="l11468"></a><span class="lineno">11468</span>&#160;            }</div>
-<div class="line"><a name="l11469"></a><span class="lineno">11469</span>&#160;        }</div>
-<div class="line"><a name="l11470"></a><span class="lineno">11470</span>&#160; </div>
-<div class="line"><a name="l11471"></a><span class="lineno">11471</span>&#160;        <span class="keyword">const</span> VkDeviceSize freeSpaceEnd = m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ?</div>
-<div class="line"><a name="l11472"></a><span class="lineno">11472</span>&#160;            suballocations2nd.back().offset : size;</div>
-<div class="line"><a name="l11473"></a><span class="lineno">11473</span>&#160; </div>
-<div class="line"><a name="l11474"></a><span class="lineno">11474</span>&#160;        <span class="comment">// There is enough free space at the end after alignment.</span></div>
-<div class="line"><a name="l11475"></a><span class="lineno">11475</span>&#160;        <span class="keywordflow">if</span>(resultOffset + allocSize + VMA_DEBUG_MARGIN &lt;= freeSpaceEnd)</div>
-<div class="line"><a name="l11476"></a><span class="lineno">11476</span>&#160;        {</div>
-<div class="line"><a name="l11477"></a><span class="lineno">11477</span>&#160;            <span class="comment">// Check next suballocations for BufferImageGranularity conflicts.</span></div>
-<div class="line"><a name="l11478"></a><span class="lineno">11478</span>&#160;            <span class="comment">// If conflict exists, allocation cannot be made here.</span></div>
-<div class="line"><a name="l11479"></a><span class="lineno">11479</span>&#160;            <span class="keywordflow">if</span>((allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity) &amp;&amp; m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
-<div class="line"><a name="l11480"></a><span class="lineno">11480</span>&#160;            {</div>
-<div class="line"><a name="l11481"></a><span class="lineno">11481</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> nextSuballocIndex = suballocations2nd.size(); nextSuballocIndex--; )</div>
-<div class="line"><a name="l11482"></a><span class="lineno">11482</span>&#160;                {</div>
-<div class="line"><a name="l11483"></a><span class="lineno">11483</span>&#160;                    <span class="keyword">const</span> VmaSuballocation&amp; nextSuballoc = suballocations2nd[nextSuballocIndex];</div>
-<div class="line"><a name="l11484"></a><span class="lineno">11484</span>&#160;                    <span class="keywordflow">if</span>(VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))</div>
-<div class="line"><a name="l11485"></a><span class="lineno">11485</span>&#160;                    {</div>
-<div class="line"><a name="l11486"></a><span class="lineno">11486</span>&#160;                        <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))</div>
-<div class="line"><a name="l11487"></a><span class="lineno">11487</span>&#160;                        {</div>
-<div class="line"><a name="l11488"></a><span class="lineno">11488</span>&#160;                            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11489"></a><span class="lineno">11489</span>&#160;                        }</div>
-<div class="line"><a name="l11490"></a><span class="lineno">11490</span>&#160;                    }</div>
-<div class="line"><a name="l11491"></a><span class="lineno">11491</span>&#160;                    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11492"></a><span class="lineno">11492</span>&#160;                    {</div>
-<div class="line"><a name="l11493"></a><span class="lineno">11493</span>&#160;                        <span class="comment">// Already on previous page.</span></div>
-<div class="line"><a name="l11494"></a><span class="lineno">11494</span>&#160;                        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11495"></a><span class="lineno">11495</span>&#160;                    }</div>
-<div class="line"><a name="l11496"></a><span class="lineno">11496</span>&#160;                }</div>
-<div class="line"><a name="l11497"></a><span class="lineno">11497</span>&#160;            }</div>
-<div class="line"><a name="l11498"></a><span class="lineno">11498</span>&#160; </div>
-<div class="line"><a name="l11499"></a><span class="lineno">11499</span>&#160;            <span class="comment">// All tests passed: Success.</span></div>
-<div class="line"><a name="l11500"></a><span class="lineno">11500</span>&#160;            pAllocationRequest-&gt;offset = resultOffset;</div>
-<div class="line"><a name="l11501"></a><span class="lineno">11501</span>&#160;            pAllocationRequest-&gt;sumFreeSize = freeSpaceEnd - resultBaseOffset;</div>
-<div class="line"><a name="l11502"></a><span class="lineno">11502</span>&#160;            pAllocationRequest-&gt;sumItemSize = 0;</div>
-<div class="line"><a name="l11503"></a><span class="lineno">11503</span>&#160;            <span class="comment">// pAllocationRequest-&gt;item, customData unused.</span></div>
-<div class="line"><a name="l11504"></a><span class="lineno">11504</span>&#160;            pAllocationRequest-&gt;type = VmaAllocationRequestType::EndOf1st;</div>
-<div class="line"><a name="l11505"></a><span class="lineno">11505</span>&#160;            pAllocationRequest-&gt;itemsToMakeLostCount = 0;</div>
-<div class="line"><a name="l11506"></a><span class="lineno">11506</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l11507"></a><span class="lineno">11507</span>&#160;        }</div>
-<div class="line"><a name="l11508"></a><span class="lineno">11508</span>&#160;    }</div>
-<div class="line"><a name="l11509"></a><span class="lineno">11509</span>&#160; </div>
-<div class="line"><a name="l11510"></a><span class="lineno">11510</span>&#160;    <span class="comment">// Wrap-around to end of 2nd vector. Try to allocate there, watching for the</span></div>
-<div class="line"><a name="l11511"></a><span class="lineno">11511</span>&#160;    <span class="comment">// beginning of 1st vector as the end of free space.</span></div>
-<div class="line"><a name="l11512"></a><span class="lineno">11512</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_EMPTY || m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
-<div class="line"><a name="l11513"></a><span class="lineno">11513</span>&#160;    {</div>
-<div class="line"><a name="l11514"></a><span class="lineno">11514</span>&#160;        VMA_ASSERT(!suballocations1st.empty());</div>
-<div class="line"><a name="l11515"></a><span class="lineno">11515</span>&#160; </div>
-<div class="line"><a name="l11516"></a><span class="lineno">11516</span>&#160;        VkDeviceSize resultBaseOffset = 0;</div>
-<div class="line"><a name="l11517"></a><span class="lineno">11517</span>&#160;        <span class="keywordflow">if</span>(!suballocations2nd.empty())</div>
-<div class="line"><a name="l11518"></a><span class="lineno">11518</span>&#160;        {</div>
-<div class="line"><a name="l11519"></a><span class="lineno">11519</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; lastSuballoc = suballocations2nd.back();</div>
-<div class="line"><a name="l11520"></a><span class="lineno">11520</span>&#160;            resultBaseOffset = lastSuballoc.offset + lastSuballoc.size;</div>
-<div class="line"><a name="l11521"></a><span class="lineno">11521</span>&#160;        }</div>
-<div class="line"><a name="l11522"></a><span class="lineno">11522</span>&#160; </div>
-<div class="line"><a name="l11523"></a><span class="lineno">11523</span>&#160;        <span class="comment">// Start from offset equal to beginning of free space.</span></div>
-<div class="line"><a name="l11524"></a><span class="lineno">11524</span>&#160;        VkDeviceSize resultOffset = resultBaseOffset;</div>
-<div class="line"><a name="l11525"></a><span class="lineno">11525</span>&#160; </div>
-<div class="line"><a name="l11526"></a><span class="lineno">11526</span>&#160;        <span class="comment">// Apply VMA_DEBUG_MARGIN at the beginning.</span></div>
-<div class="line"><a name="l11527"></a><span class="lineno">11527</span>&#160;        <span class="keywordflow">if</span>(VMA_DEBUG_MARGIN &gt; 0)</div>
-<div class="line"><a name="l11528"></a><span class="lineno">11528</span>&#160;        {</div>
-<div class="line"><a name="l11529"></a><span class="lineno">11529</span>&#160;            resultOffset += VMA_DEBUG_MARGIN;</div>
-<div class="line"><a name="l11530"></a><span class="lineno">11530</span>&#160;        }</div>
-<div class="line"><a name="l11531"></a><span class="lineno">11531</span>&#160; </div>
-<div class="line"><a name="l11532"></a><span class="lineno">11532</span>&#160;        <span class="comment">// Apply alignment.</span></div>
-<div class="line"><a name="l11533"></a><span class="lineno">11533</span>&#160;        resultOffset = VmaAlignUp(resultOffset, allocAlignment);</div>
-<div class="line"><a name="l11534"></a><span class="lineno">11534</span>&#160; </div>
-<div class="line"><a name="l11535"></a><span class="lineno">11535</span>&#160;        <span class="comment">// Check previous suballocations for BufferImageGranularity conflicts.</span></div>
-<div class="line"><a name="l11536"></a><span class="lineno">11536</span>&#160;        <span class="comment">// Make bigger alignment if necessary.</span></div>
-<div class="line"><a name="l11537"></a><span class="lineno">11537</span>&#160;        <span class="keywordflow">if</span>(bufferImageGranularity &gt; 1 &amp;&amp; bufferImageGranularity != allocAlignment &amp;&amp; !suballocations2nd.empty())</div>
-<div class="line"><a name="l11538"></a><span class="lineno">11538</span>&#160;        {</div>
-<div class="line"><a name="l11539"></a><span class="lineno">11539</span>&#160;            <span class="keywordtype">bool</span> bufferImageGranularityConflict = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11540"></a><span class="lineno">11540</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> prevSuballocIndex = suballocations2nd.size(); prevSuballocIndex--; )</div>
-<div class="line"><a name="l11541"></a><span class="lineno">11541</span>&#160;            {</div>
-<div class="line"><a name="l11542"></a><span class="lineno">11542</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; prevSuballoc = suballocations2nd[prevSuballocIndex];</div>
-<div class="line"><a name="l11543"></a><span class="lineno">11543</span>&#160;                <span class="keywordflow">if</span>(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity))</div>
-<div class="line"><a name="l11544"></a><span class="lineno">11544</span>&#160;                {</div>
-<div class="line"><a name="l11545"></a><span class="lineno">11545</span>&#160;                    <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))</div>
-<div class="line"><a name="l11546"></a><span class="lineno">11546</span>&#160;                    {</div>
-<div class="line"><a name="l11547"></a><span class="lineno">11547</span>&#160;                        bufferImageGranularityConflict = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l11548"></a><span class="lineno">11548</span>&#160;                        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11549"></a><span class="lineno">11549</span>&#160;                    }</div>
-<div class="line"><a name="l11550"></a><span class="lineno">11550</span>&#160;                }</div>
-<div class="line"><a name="l11551"></a><span class="lineno">11551</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11552"></a><span class="lineno">11552</span>&#160;                    <span class="comment">// Already on previous page.</span></div>
-<div class="line"><a name="l11553"></a><span class="lineno">11553</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11554"></a><span class="lineno">11554</span>&#160;            }</div>
-<div class="line"><a name="l11555"></a><span class="lineno">11555</span>&#160;            <span class="keywordflow">if</span>(bufferImageGranularityConflict)</div>
-<div class="line"><a name="l11556"></a><span class="lineno">11556</span>&#160;            {</div>
-<div class="line"><a name="l11557"></a><span class="lineno">11557</span>&#160;                resultOffset = VmaAlignUp(resultOffset, bufferImageGranularity);</div>
-<div class="line"><a name="l11558"></a><span class="lineno">11558</span>&#160;            }</div>
-<div class="line"><a name="l11559"></a><span class="lineno">11559</span>&#160;        }</div>
-<div class="line"><a name="l11560"></a><span class="lineno">11560</span>&#160; </div>
-<div class="line"><a name="l11561"></a><span class="lineno">11561</span>&#160;        pAllocationRequest-&gt;itemsToMakeLostCount = 0;</div>
-<div class="line"><a name="l11562"></a><span class="lineno">11562</span>&#160;        pAllocationRequest-&gt;sumItemSize = 0;</div>
-<div class="line"><a name="l11563"></a><span class="lineno">11563</span>&#160;        <span class="keywordtype">size_t</span> index1st = m_1stNullItemsBeginCount;</div>
-<div class="line"><a name="l11564"></a><span class="lineno">11564</span>&#160; </div>
-<div class="line"><a name="l11565"></a><span class="lineno">11565</span>&#160;        <span class="keywordflow">if</span>(canMakeOtherLost)</div>
-<div class="line"><a name="l11566"></a><span class="lineno">11566</span>&#160;        {</div>
-<div class="line"><a name="l11567"></a><span class="lineno">11567</span>&#160;            <span class="keywordflow">while</span>(index1st &lt; suballocations1st.size() &amp;&amp;</div>
-<div class="line"><a name="l11568"></a><span class="lineno">11568</span>&#160;                resultOffset + allocSize + VMA_DEBUG_MARGIN &gt; suballocations1st[index1st].offset)</div>
-<div class="line"><a name="l11569"></a><span class="lineno">11569</span>&#160;            {</div>
-<div class="line"><a name="l11570"></a><span class="lineno">11570</span>&#160;                <span class="comment">// Next colliding allocation at the beginning of 1st vector found. Try to make it lost.</span></div>
-<div class="line"><a name="l11571"></a><span class="lineno">11571</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[index1st];</div>
-<div class="line"><a name="l11572"></a><span class="lineno">11572</span>&#160;                <span class="keywordflow">if</span>(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE)</div>
-<div class="line"><a name="l11573"></a><span class="lineno">11573</span>&#160;                {</div>
-<div class="line"><a name="l11574"></a><span class="lineno">11574</span>&#160;                    <span class="comment">// No problem.</span></div>
-<div class="line"><a name="l11575"></a><span class="lineno">11575</span>&#160;                }</div>
-<div class="line"><a name="l11576"></a><span class="lineno">11576</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11577"></a><span class="lineno">11577</span>&#160;                {</div>
-<div class="line"><a name="l11578"></a><span class="lineno">11578</span>&#160;                    VMA_ASSERT(suballoc.hAllocation != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l11579"></a><span class="lineno">11579</span>&#160;                    <span class="keywordflow">if</span>(suballoc.hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
-<div class="line"><a name="l11580"></a><span class="lineno">11580</span>&#160;                        suballoc.hAllocation-&gt;GetLastUseFrameIndex() + frameInUseCount &lt; currentFrameIndex)</div>
-<div class="line"><a name="l11581"></a><span class="lineno">11581</span>&#160;                    {</div>
-<div class="line"><a name="l11582"></a><span class="lineno">11582</span>&#160;                        ++pAllocationRequest-&gt;itemsToMakeLostCount;</div>
-<div class="line"><a name="l11583"></a><span class="lineno">11583</span>&#160;                        pAllocationRequest-&gt;sumItemSize += suballoc.size;</div>
-<div class="line"><a name="l11584"></a><span class="lineno">11584</span>&#160;                    }</div>
-<div class="line"><a name="l11585"></a><span class="lineno">11585</span>&#160;                    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11586"></a><span class="lineno">11586</span>&#160;                    {</div>
-<div class="line"><a name="l11587"></a><span class="lineno">11587</span>&#160;                        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11588"></a><span class="lineno">11588</span>&#160;                    }</div>
-<div class="line"><a name="l11589"></a><span class="lineno">11589</span>&#160;                }</div>
-<div class="line"><a name="l11590"></a><span class="lineno">11590</span>&#160;                ++index1st;</div>
-<div class="line"><a name="l11591"></a><span class="lineno">11591</span>&#160;            }</div>
-<div class="line"><a name="l11592"></a><span class="lineno">11592</span>&#160; </div>
-<div class="line"><a name="l11593"></a><span class="lineno">11593</span>&#160;            <span class="comment">// Check next suballocations for BufferImageGranularity conflicts.</span></div>
-<div class="line"><a name="l11594"></a><span class="lineno">11594</span>&#160;            <span class="comment">// If conflict exists, we must mark more allocations lost or fail.</span></div>
-<div class="line"><a name="l11595"></a><span class="lineno">11595</span>&#160;            <span class="keywordflow">if</span>(allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity)</div>
-<div class="line"><a name="l11596"></a><span class="lineno">11596</span>&#160;            {</div>
-<div class="line"><a name="l11597"></a><span class="lineno">11597</span>&#160;                <span class="keywordflow">while</span>(index1st &lt; suballocations1st.size())</div>
-<div class="line"><a name="l11598"></a><span class="lineno">11598</span>&#160;                {</div>
-<div class="line"><a name="l11599"></a><span class="lineno">11599</span>&#160;                    <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[index1st];</div>
-<div class="line"><a name="l11600"></a><span class="lineno">11600</span>&#160;                    <span class="keywordflow">if</span>(VmaBlocksOnSamePage(resultOffset, allocSize, suballoc.offset, bufferImageGranularity))</div>
-<div class="line"><a name="l11601"></a><span class="lineno">11601</span>&#160;                    {</div>
-<div class="line"><a name="l11602"></a><span class="lineno">11602</span>&#160;                        <span class="keywordflow">if</span>(suballoc.hAllocation != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l11603"></a><span class="lineno">11603</span>&#160;                        {</div>
-<div class="line"><a name="l11604"></a><span class="lineno">11604</span>&#160;                            <span class="comment">// Not checking actual VmaIsBufferImageGranularityConflict(allocType, suballoc.type).</span></div>
-<div class="line"><a name="l11605"></a><span class="lineno">11605</span>&#160;                            <span class="keywordflow">if</span>(suballoc.hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
-<div class="line"><a name="l11606"></a><span class="lineno">11606</span>&#160;                                suballoc.hAllocation-&gt;GetLastUseFrameIndex() + frameInUseCount &lt; currentFrameIndex)</div>
-<div class="line"><a name="l11607"></a><span class="lineno">11607</span>&#160;                            {</div>
-<div class="line"><a name="l11608"></a><span class="lineno">11608</span>&#160;                                ++pAllocationRequest-&gt;itemsToMakeLostCount;</div>
-<div class="line"><a name="l11609"></a><span class="lineno">11609</span>&#160;                                pAllocationRequest-&gt;sumItemSize += suballoc.size;</div>
-<div class="line"><a name="l11610"></a><span class="lineno">11610</span>&#160;                            }</div>
-<div class="line"><a name="l11611"></a><span class="lineno">11611</span>&#160;                            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11612"></a><span class="lineno">11612</span>&#160;                            {</div>
-<div class="line"><a name="l11613"></a><span class="lineno">11613</span>&#160;                                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11614"></a><span class="lineno">11614</span>&#160;                            }</div>
-<div class="line"><a name="l11615"></a><span class="lineno">11615</span>&#160;                        }</div>
-<div class="line"><a name="l11616"></a><span class="lineno">11616</span>&#160;                    }</div>
-<div class="line"><a name="l11617"></a><span class="lineno">11617</span>&#160;                    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11618"></a><span class="lineno">11618</span>&#160;                    {</div>
-<div class="line"><a name="l11619"></a><span class="lineno">11619</span>&#160;                        <span class="comment">// Already on next page.</span></div>
-<div class="line"><a name="l11620"></a><span class="lineno">11620</span>&#160;                        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11621"></a><span class="lineno">11621</span>&#160;                    }</div>
-<div class="line"><a name="l11622"></a><span class="lineno">11622</span>&#160;                    ++index1st;</div>
-<div class="line"><a name="l11623"></a><span class="lineno">11623</span>&#160;                }</div>
-<div class="line"><a name="l11624"></a><span class="lineno">11624</span>&#160;            }</div>
-<div class="line"><a name="l11625"></a><span class="lineno">11625</span>&#160; </div>
-<div class="line"><a name="l11626"></a><span class="lineno">11626</span>&#160;            <span class="comment">// Special case: There is not enough room at the end for this allocation, even after making all from the 1st lost.</span></div>
-<div class="line"><a name="l11627"></a><span class="lineno">11627</span>&#160;            <span class="keywordflow">if</span>(index1st == suballocations1st.size() &amp;&amp;</div>
-<div class="line"><a name="l11628"></a><span class="lineno">11628</span>&#160;                resultOffset + allocSize + VMA_DEBUG_MARGIN &gt; size)</div>
-<div class="line"><a name="l11629"></a><span class="lineno">11629</span>&#160;            {</div>
-<div class="line"><a name="l11630"></a><span class="lineno">11630</span>&#160;                <span class="comment">// TODO: This is a known bug that it&#39;s not yet implemented and the allocation is failing.</span></div>
-<div class="line"><a name="l11631"></a><span class="lineno">11631</span>&#160;                VMA_DEBUG_LOG(<span class="stringliteral">&quot;Unsupported special case in custom pool with linear allocation algorithm used as ring buffer with allocations that can be lost.&quot;</span>);</div>
-<div class="line"><a name="l11632"></a><span class="lineno">11632</span>&#160;            }</div>
-<div class="line"><a name="l11633"></a><span class="lineno">11633</span>&#160;        }</div>
-<div class="line"><a name="l11634"></a><span class="lineno">11634</span>&#160; </div>
-<div class="line"><a name="l11635"></a><span class="lineno">11635</span>&#160;        <span class="comment">// There is enough free space at the end after alignment.</span></div>
-<div class="line"><a name="l11636"></a><span class="lineno">11636</span>&#160;        <span class="keywordflow">if</span>((index1st == suballocations1st.size() &amp;&amp; resultOffset + allocSize + VMA_DEBUG_MARGIN &lt;= size) ||</div>
-<div class="line"><a name="l11637"></a><span class="lineno">11637</span>&#160;            (index1st &lt; suballocations1st.size() &amp;&amp; resultOffset + allocSize + VMA_DEBUG_MARGIN &lt;= suballocations1st[index1st].offset))</div>
-<div class="line"><a name="l11638"></a><span class="lineno">11638</span>&#160;        {</div>
-<div class="line"><a name="l11639"></a><span class="lineno">11639</span>&#160;            <span class="comment">// Check next suballocations for BufferImageGranularity conflicts.</span></div>
-<div class="line"><a name="l11640"></a><span class="lineno">11640</span>&#160;            <span class="comment">// If conflict exists, allocation cannot be made here.</span></div>
-<div class="line"><a name="l11641"></a><span class="lineno">11641</span>&#160;            <span class="keywordflow">if</span>(allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity)</div>
-<div class="line"><a name="l11642"></a><span class="lineno">11642</span>&#160;            {</div>
-<div class="line"><a name="l11643"></a><span class="lineno">11643</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> nextSuballocIndex = index1st;</div>
-<div class="line"><a name="l11644"></a><span class="lineno">11644</span>&#160;                    nextSuballocIndex &lt; suballocations1st.size();</div>
-<div class="line"><a name="l11645"></a><span class="lineno">11645</span>&#160;                    nextSuballocIndex++)</div>
-<div class="line"><a name="l11646"></a><span class="lineno">11646</span>&#160;                {</div>
-<div class="line"><a name="l11647"></a><span class="lineno">11647</span>&#160;                    <span class="keyword">const</span> VmaSuballocation&amp; nextSuballoc = suballocations1st[nextSuballocIndex];</div>
-<div class="line"><a name="l11648"></a><span class="lineno">11648</span>&#160;                    <span class="keywordflow">if</span>(VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))</div>
-<div class="line"><a name="l11649"></a><span class="lineno">11649</span>&#160;                    {</div>
-<div class="line"><a name="l11650"></a><span class="lineno">11650</span>&#160;                        <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))</div>
-<div class="line"><a name="l11651"></a><span class="lineno">11651</span>&#160;                        {</div>
-<div class="line"><a name="l11652"></a><span class="lineno">11652</span>&#160;                            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11653"></a><span class="lineno">11653</span>&#160;                        }</div>
-<div class="line"><a name="l11654"></a><span class="lineno">11654</span>&#160;                    }</div>
-<div class="line"><a name="l11655"></a><span class="lineno">11655</span>&#160;                    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11656"></a><span class="lineno">11656</span>&#160;                    {</div>
-<div class="line"><a name="l11657"></a><span class="lineno">11657</span>&#160;                        <span class="comment">// Already on next page.</span></div>
-<div class="line"><a name="l11658"></a><span class="lineno">11658</span>&#160;                        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11659"></a><span class="lineno">11659</span>&#160;                    }</div>
-<div class="line"><a name="l11660"></a><span class="lineno">11660</span>&#160;                }</div>
-<div class="line"><a name="l11661"></a><span class="lineno">11661</span>&#160;            }</div>
-<div class="line"><a name="l11662"></a><span class="lineno">11662</span>&#160; </div>
-<div class="line"><a name="l11663"></a><span class="lineno">11663</span>&#160;            <span class="comment">// All tests passed: Success.</span></div>
-<div class="line"><a name="l11664"></a><span class="lineno">11664</span>&#160;            pAllocationRequest-&gt;offset = resultOffset;</div>
-<div class="line"><a name="l11665"></a><span class="lineno">11665</span>&#160;            pAllocationRequest-&gt;sumFreeSize =</div>
-<div class="line"><a name="l11666"></a><span class="lineno">11666</span>&#160;                (index1st &lt; suballocations1st.size() ? suballocations1st[index1st].offset : size)</div>
-<div class="line"><a name="l11667"></a><span class="lineno">11667</span>&#160;                - resultBaseOffset</div>
-<div class="line"><a name="l11668"></a><span class="lineno">11668</span>&#160;                - pAllocationRequest-&gt;sumItemSize;</div>
-<div class="line"><a name="l11669"></a><span class="lineno">11669</span>&#160;            pAllocationRequest-&gt;type = VmaAllocationRequestType::EndOf2nd;</div>
-<div class="line"><a name="l11670"></a><span class="lineno">11670</span>&#160;            <span class="comment">// pAllocationRequest-&gt;item, customData unused.</span></div>
-<div class="line"><a name="l11671"></a><span class="lineno">11671</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l11672"></a><span class="lineno">11672</span>&#160;        }</div>
-<div class="line"><a name="l11673"></a><span class="lineno">11673</span>&#160;    }</div>
-<div class="line"><a name="l11674"></a><span class="lineno">11674</span>&#160; </div>
-<div class="line"><a name="l11675"></a><span class="lineno">11675</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11676"></a><span class="lineno">11676</span>&#160;}</div>
-<div class="line"><a name="l11677"></a><span class="lineno">11677</span>&#160; </div>
-<div class="line"><a name="l11678"></a><span class="lineno">11678</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Linear::MakeRequestedAllocationsLost(</div>
-<div class="line"><a name="l11679"></a><span class="lineno">11679</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l11680"></a><span class="lineno">11680</span>&#160;    uint32_t frameInUseCount,</div>
-<div class="line"><a name="l11681"></a><span class="lineno">11681</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
-<div class="line"><a name="l11682"></a><span class="lineno">11682</span>&#160;{</div>
-<div class="line"><a name="l11683"></a><span class="lineno">11683</span>&#160;    <span class="keywordflow">if</span>(pAllocationRequest-&gt;itemsToMakeLostCount == 0)</div>
-<div class="line"><a name="l11684"></a><span class="lineno">11684</span>&#160;    {</div>
-<div class="line"><a name="l11685"></a><span class="lineno">11685</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l11686"></a><span class="lineno">11686</span>&#160;    }</div>
-<div class="line"><a name="l11687"></a><span class="lineno">11687</span>&#160; </div>
-<div class="line"><a name="l11688"></a><span class="lineno">11688</span>&#160;    VMA_ASSERT(m_2ndVectorMode == SECOND_VECTOR_EMPTY || m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER);</div>
-<div class="line"><a name="l11689"></a><span class="lineno">11689</span>&#160; </div>
-<div class="line"><a name="l11690"></a><span class="lineno">11690</span>&#160;    <span class="comment">// We always start from 1st.</span></div>
-<div class="line"><a name="l11691"></a><span class="lineno">11691</span>&#160;    SuballocationVectorType* suballocations = &amp;AccessSuballocations1st();</div>
-<div class="line"><a name="l11692"></a><span class="lineno">11692</span>&#160;    <span class="keywordtype">size_t</span> index = m_1stNullItemsBeginCount;</div>
-<div class="line"><a name="l11693"></a><span class="lineno">11693</span>&#160;    <span class="keywordtype">size_t</span> madeLostCount = 0;</div>
-<div class="line"><a name="l11694"></a><span class="lineno">11694</span>&#160;    <span class="keywordflow">while</span>(madeLostCount &lt; pAllocationRequest-&gt;itemsToMakeLostCount)</div>
-<div class="line"><a name="l11695"></a><span class="lineno">11695</span>&#160;    {</div>
-<div class="line"><a name="l11696"></a><span class="lineno">11696</span>&#160;        <span class="keywordflow">if</span>(index == suballocations-&gt;size())</div>
-<div class="line"><a name="l11697"></a><span class="lineno">11697</span>&#160;        {</div>
-<div class="line"><a name="l11698"></a><span class="lineno">11698</span>&#160;            index = 0;</div>
-<div class="line"><a name="l11699"></a><span class="lineno">11699</span>&#160;            <span class="comment">// If we get to the end of 1st, we wrap around to beginning of 2nd of 1st.</span></div>
-<div class="line"><a name="l11700"></a><span class="lineno">11700</span>&#160;            <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
-<div class="line"><a name="l11701"></a><span class="lineno">11701</span>&#160;            {</div>
-<div class="line"><a name="l11702"></a><span class="lineno">11702</span>&#160;                suballocations = &amp;AccessSuballocations2nd();</div>
-<div class="line"><a name="l11703"></a><span class="lineno">11703</span>&#160;            }</div>
-<div class="line"><a name="l11704"></a><span class="lineno">11704</span>&#160;            <span class="comment">// else: m_2ndVectorMode == SECOND_VECTOR_EMPTY:</span></div>
-<div class="line"><a name="l11705"></a><span class="lineno">11705</span>&#160;            <span class="comment">// suballocations continues pointing at AccessSuballocations1st().</span></div>
-<div class="line"><a name="l11706"></a><span class="lineno">11706</span>&#160;            VMA_ASSERT(!suballocations-&gt;empty());</div>
-<div class="line"><a name="l11707"></a><span class="lineno">11707</span>&#160;        }</div>
-<div class="line"><a name="l11708"></a><span class="lineno">11708</span>&#160;        VmaSuballocation&amp; suballoc = (*suballocations)[index];</div>
-<div class="line"><a name="l11709"></a><span class="lineno">11709</span>&#160;        <span class="keywordflow">if</span>(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)</div>
-<div class="line"><a name="l11710"></a><span class="lineno">11710</span>&#160;        {</div>
-<div class="line"><a name="l11711"></a><span class="lineno">11711</span>&#160;            VMA_ASSERT(suballoc.hAllocation != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l11712"></a><span class="lineno">11712</span>&#160;            VMA_ASSERT(suballoc.hAllocation-&gt;CanBecomeLost());</div>
-<div class="line"><a name="l11713"></a><span class="lineno">11713</span>&#160;            <span class="keywordflow">if</span>(suballoc.hAllocation-&gt;MakeLost(currentFrameIndex, frameInUseCount))</div>
-<div class="line"><a name="l11714"></a><span class="lineno">11714</span>&#160;            {</div>
-<div class="line"><a name="l11715"></a><span class="lineno">11715</span>&#160;                suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;</div>
-<div class="line"><a name="l11716"></a><span class="lineno">11716</span>&#160;                suballoc.hAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l11717"></a><span class="lineno">11717</span>&#160;                m_SumFreeSize += suballoc.size;</div>
-<div class="line"><a name="l11718"></a><span class="lineno">11718</span>&#160;                <span class="keywordflow">if</span>(suballocations == &amp;AccessSuballocations1st())</div>
-<div class="line"><a name="l11719"></a><span class="lineno">11719</span>&#160;                {</div>
-<div class="line"><a name="l11720"></a><span class="lineno">11720</span>&#160;                    ++m_1stNullItemsMiddleCount;</div>
-<div class="line"><a name="l11721"></a><span class="lineno">11721</span>&#160;                }</div>
-<div class="line"><a name="l11722"></a><span class="lineno">11722</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11723"></a><span class="lineno">11723</span>&#160;                {</div>
-<div class="line"><a name="l11724"></a><span class="lineno">11724</span>&#160;                    ++m_2ndNullItemsCount;</div>
-<div class="line"><a name="l11725"></a><span class="lineno">11725</span>&#160;                }</div>
-<div class="line"><a name="l11726"></a><span class="lineno">11726</span>&#160;                ++madeLostCount;</div>
-<div class="line"><a name="l11727"></a><span class="lineno">11727</span>&#160;            }</div>
-<div class="line"><a name="l11728"></a><span class="lineno">11728</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l11729"></a><span class="lineno">11729</span>&#160;            {</div>
-<div class="line"><a name="l11730"></a><span class="lineno">11730</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l11731"></a><span class="lineno">11731</span>&#160;            }</div>
-<div class="line"><a name="l11732"></a><span class="lineno">11732</span>&#160;        }</div>
-<div class="line"><a name="l11733"></a><span class="lineno">11733</span>&#160;        ++index;</div>
-<div class="line"><a name="l11734"></a><span class="lineno">11734</span>&#160;    }</div>
-<div class="line"><a name="l11735"></a><span class="lineno">11735</span>&#160; </div>
-<div class="line"><a name="l11736"></a><span class="lineno">11736</span>&#160;    CleanupAfterFree();</div>
-<div class="line"><a name="l11737"></a><span class="lineno">11737</span>&#160;    <span class="comment">//VMA_HEAVY_ASSERT(Validate()); // Already called by CleanupAfterFree().</span></div>
-<div class="line"><a name="l11738"></a><span class="lineno">11738</span>&#160; </div>
-<div class="line"><a name="l11739"></a><span class="lineno">11739</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l11740"></a><span class="lineno">11740</span>&#160;}</div>
-<div class="line"><a name="l11741"></a><span class="lineno">11741</span>&#160; </div>
-<div class="line"><a name="l11742"></a><span class="lineno">11742</span>&#160;uint32_t VmaBlockMetadata_Linear::MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount)</div>
-<div class="line"><a name="l11743"></a><span class="lineno">11743</span>&#160;{</div>
-<div class="line"><a name="l11744"></a><span class="lineno">11744</span>&#160;    uint32_t lostAllocationCount = 0;</div>
-<div class="line"><a name="l11745"></a><span class="lineno">11745</span>&#160; </div>
-<div class="line"><a name="l11746"></a><span class="lineno">11746</span>&#160;    SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
-<div class="line"><a name="l11747"></a><span class="lineno">11747</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_1stNullItemsBeginCount, count = suballocations1st.size(); i &lt; count; ++i)</div>
-<div class="line"><a name="l11748"></a><span class="lineno">11748</span>&#160;    {</div>
-<div class="line"><a name="l11749"></a><span class="lineno">11749</span>&#160;        VmaSuballocation&amp; suballoc = suballocations1st[i];</div>
-<div class="line"><a name="l11750"></a><span class="lineno">11750</span>&#160;        <span class="keywordflow">if</span>(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE &amp;&amp;</div>
-<div class="line"><a name="l11751"></a><span class="lineno">11751</span>&#160;            suballoc.hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
-<div class="line"><a name="l11752"></a><span class="lineno">11752</span>&#160;            suballoc.hAllocation-&gt;MakeLost(currentFrameIndex, frameInUseCount))</div>
-<div class="line"><a name="l11753"></a><span class="lineno">11753</span>&#160;        {</div>
-<div class="line"><a name="l11754"></a><span class="lineno">11754</span>&#160;            suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;</div>
-<div class="line"><a name="l11755"></a><span class="lineno">11755</span>&#160;            suballoc.hAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l11756"></a><span class="lineno">11756</span>&#160;            ++m_1stNullItemsMiddleCount;</div>
-<div class="line"><a name="l11757"></a><span class="lineno">11757</span>&#160;            m_SumFreeSize += suballoc.size;</div>
-<div class="line"><a name="l11758"></a><span class="lineno">11758</span>&#160;            ++lostAllocationCount;</div>
-<div class="line"><a name="l11759"></a><span class="lineno">11759</span>&#160;        }</div>
-<div class="line"><a name="l11760"></a><span class="lineno">11760</span>&#160;    }</div>
-<div class="line"><a name="l11761"></a><span class="lineno">11761</span>&#160; </div>
-<div class="line"><a name="l11762"></a><span class="lineno">11762</span>&#160;    SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
-<div class="line"><a name="l11763"></a><span class="lineno">11763</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0, count = suballocations2nd.size(); i &lt; count; ++i)</div>
-<div class="line"><a name="l11764"></a><span class="lineno">11764</span>&#160;    {</div>
-<div class="line"><a name="l11765"></a><span class="lineno">11765</span>&#160;        VmaSuballocation&amp; suballoc = suballocations2nd[i];</div>
-<div class="line"><a name="l11766"></a><span class="lineno">11766</span>&#160;        <span class="keywordflow">if</span>(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE &amp;&amp;</div>
-<div class="line"><a name="l11767"></a><span class="lineno">11767</span>&#160;            suballoc.hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
-<div class="line"><a name="l11768"></a><span class="lineno">11768</span>&#160;            suballoc.hAllocation-&gt;MakeLost(currentFrameIndex, frameInUseCount))</div>
-<div class="line"><a name="l11769"></a><span class="lineno">11769</span>&#160;        {</div>
-<div class="line"><a name="l11770"></a><span class="lineno">11770</span>&#160;            suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;</div>
-<div class="line"><a name="l11771"></a><span class="lineno">11771</span>&#160;            suballoc.hAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l11772"></a><span class="lineno">11772</span>&#160;            ++m_2ndNullItemsCount;</div>
-<div class="line"><a name="l11773"></a><span class="lineno">11773</span>&#160;            m_SumFreeSize += suballoc.size;</div>
-<div class="line"><a name="l11774"></a><span class="lineno">11774</span>&#160;            ++lostAllocationCount;</div>
-<div class="line"><a name="l11775"></a><span class="lineno">11775</span>&#160;        }</div>
-<div class="line"><a name="l11776"></a><span class="lineno">11776</span>&#160;    }</div>
-<div class="line"><a name="l11777"></a><span class="lineno">11777</span>&#160; </div>
-<div class="line"><a name="l11778"></a><span class="lineno">11778</span>&#160;    <span class="keywordflow">if</span>(lostAllocationCount)</div>
-<div class="line"><a name="l11779"></a><span class="lineno">11779</span>&#160;    {</div>
-<div class="line"><a name="l11780"></a><span class="lineno">11780</span>&#160;        CleanupAfterFree();</div>
-<div class="line"><a name="l11781"></a><span class="lineno">11781</span>&#160;    }</div>
-<div class="line"><a name="l11782"></a><span class="lineno">11782</span>&#160; </div>
-<div class="line"><a name="l11783"></a><span class="lineno">11783</span>&#160;    <span class="keywordflow">return</span> lostAllocationCount;</div>
-<div class="line"><a name="l11784"></a><span class="lineno">11784</span>&#160;}</div>
-<div class="line"><a name="l11785"></a><span class="lineno">11785</span>&#160; </div>
-<div class="line"><a name="l11786"></a><span class="lineno">11786</span>&#160;VkResult VmaBlockMetadata_Linear::CheckCorruption(<span class="keyword">const</span> <span class="keywordtype">void</span>* pBlockData)</div>
-<div class="line"><a name="l11787"></a><span class="lineno">11787</span>&#160;{</div>
-<div class="line"><a name="l11788"></a><span class="lineno">11788</span>&#160;    SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
-<div class="line"><a name="l11789"></a><span class="lineno">11789</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_1stNullItemsBeginCount, count = suballocations1st.size(); i &lt; count; ++i)</div>
-<div class="line"><a name="l11790"></a><span class="lineno">11790</span>&#160;    {</div>
-<div class="line"><a name="l11791"></a><span class="lineno">11791</span>&#160;        <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[i];</div>
-<div class="line"><a name="l11792"></a><span class="lineno">11792</span>&#160;        <span class="keywordflow">if</span>(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)</div>
-<div class="line"><a name="l11793"></a><span class="lineno">11793</span>&#160;        {</div>
-<div class="line"><a name="l11794"></a><span class="lineno">11794</span>&#160;            <span class="keywordflow">if</span>(!VmaValidateMagicValue(pBlockData, suballoc.offset - VMA_DEBUG_MARGIN))</div>
-<div class="line"><a name="l11795"></a><span class="lineno">11795</span>&#160;            {</div>
-<div class="line"><a name="l11796"></a><span class="lineno">11796</span>&#160;                VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED BEFORE VALIDATED ALLOCATION!&quot;</span>);</div>
-<div class="line"><a name="l11797"></a><span class="lineno">11797</span>&#160;                <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
-<div class="line"><a name="l11798"></a><span class="lineno">11798</span>&#160;            }</div>
-<div class="line"><a name="l11799"></a><span class="lineno">11799</span>&#160;            <span class="keywordflow">if</span>(!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))</div>
-<div class="line"><a name="l11800"></a><span class="lineno">11800</span>&#160;            {</div>
-<div class="line"><a name="l11801"></a><span class="lineno">11801</span>&#160;                VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!&quot;</span>);</div>
-<div class="line"><a name="l11802"></a><span class="lineno">11802</span>&#160;                <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
-<div class="line"><a name="l11803"></a><span class="lineno">11803</span>&#160;            }</div>
-<div class="line"><a name="l11804"></a><span class="lineno">11804</span>&#160;        }</div>
-<div class="line"><a name="l11805"></a><span class="lineno">11805</span>&#160;    }</div>
-<div class="line"><a name="l11806"></a><span class="lineno">11806</span>&#160; </div>
-<div class="line"><a name="l11807"></a><span class="lineno">11807</span>&#160;    SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
-<div class="line"><a name="l11808"></a><span class="lineno">11808</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0, count = suballocations2nd.size(); i &lt; count; ++i)</div>
-<div class="line"><a name="l11809"></a><span class="lineno">11809</span>&#160;    {</div>
-<div class="line"><a name="l11810"></a><span class="lineno">11810</span>&#160;        <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[i];</div>
-<div class="line"><a name="l11811"></a><span class="lineno">11811</span>&#160;        <span class="keywordflow">if</span>(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)</div>
-<div class="line"><a name="l11812"></a><span class="lineno">11812</span>&#160;        {</div>
-<div class="line"><a name="l11813"></a><span class="lineno">11813</span>&#160;            <span class="keywordflow">if</span>(!VmaValidateMagicValue(pBlockData, suballoc.offset - VMA_DEBUG_MARGIN))</div>
-<div class="line"><a name="l11814"></a><span class="lineno">11814</span>&#160;            {</div>
-<div class="line"><a name="l11815"></a><span class="lineno">11815</span>&#160;                VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED BEFORE VALIDATED ALLOCATION!&quot;</span>);</div>
-<div class="line"><a name="l11816"></a><span class="lineno">11816</span>&#160;                <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
-<div class="line"><a name="l11817"></a><span class="lineno">11817</span>&#160;            }</div>
-<div class="line"><a name="l11818"></a><span class="lineno">11818</span>&#160;            <span class="keywordflow">if</span>(!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))</div>
-<div class="line"><a name="l11819"></a><span class="lineno">11819</span>&#160;            {</div>
-<div class="line"><a name="l11820"></a><span class="lineno">11820</span>&#160;                VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!&quot;</span>);</div>
-<div class="line"><a name="l11821"></a><span class="lineno">11821</span>&#160;                <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
-<div class="line"><a name="l11822"></a><span class="lineno">11822</span>&#160;            }</div>
-<div class="line"><a name="l11823"></a><span class="lineno">11823</span>&#160;        }</div>
-<div class="line"><a name="l11824"></a><span class="lineno">11824</span>&#160;    }</div>
-<div class="line"><a name="l11825"></a><span class="lineno">11825</span>&#160; </div>
-<div class="line"><a name="l11826"></a><span class="lineno">11826</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l11827"></a><span class="lineno">11827</span>&#160;}</div>
-<div class="line"><a name="l11828"></a><span class="lineno">11828</span>&#160; </div>
-<div class="line"><a name="l11829"></a><span class="lineno">11829</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::Alloc(</div>
-<div class="line"><a name="l11830"></a><span class="lineno">11830</span>&#160;    <span class="keyword">const</span> VmaAllocationRequest&amp; request,</div>
-<div class="line"><a name="l11831"></a><span class="lineno">11831</span>&#160;    VmaSuballocationType type,</div>
-<div class="line"><a name="l11832"></a><span class="lineno">11832</span>&#160;    VkDeviceSize allocSize,</div>
-<div class="line"><a name="l11833"></a><span class="lineno">11833</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</div>
-<div class="line"><a name="l11834"></a><span class="lineno">11834</span>&#160;{</div>
-<div class="line"><a name="l11835"></a><span class="lineno">11835</span>&#160;    <span class="keyword">const</span> VmaSuballocation newSuballoc = { request.offset, allocSize, hAllocation, type };</div>
-<div class="line"><a name="l11836"></a><span class="lineno">11836</span>&#160; </div>
-<div class="line"><a name="l11837"></a><span class="lineno">11837</span>&#160;    <span class="keywordflow">switch</span>(request.type)</div>
-<div class="line"><a name="l11838"></a><span class="lineno">11838</span>&#160;    {</div>
-<div class="line"><a name="l11839"></a><span class="lineno">11839</span>&#160;    <span class="keywordflow">case</span> VmaAllocationRequestType::UpperAddress:</div>
-<div class="line"><a name="l11840"></a><span class="lineno">11840</span>&#160;        {</div>
-<div class="line"><a name="l11841"></a><span class="lineno">11841</span>&#160;            VMA_ASSERT(m_2ndVectorMode != SECOND_VECTOR_RING_BUFFER &amp;&amp;</div>
-<div class="line"><a name="l11842"></a><span class="lineno">11842</span>&#160;                <span class="stringliteral">&quot;CRITICAL ERROR: Trying to use linear allocator as double stack while it was already used as ring buffer.&quot;</span>);</div>
-<div class="line"><a name="l11843"></a><span class="lineno">11843</span>&#160;            SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
-<div class="line"><a name="l11844"></a><span class="lineno">11844</span>&#160;            suballocations2nd.push_back(newSuballoc);</div>
-<div class="line"><a name="l11845"></a><span class="lineno">11845</span>&#160;            m_2ndVectorMode = SECOND_VECTOR_DOUBLE_STACK;</div>
-<div class="line"><a name="l11846"></a><span class="lineno">11846</span>&#160;        }</div>
-<div class="line"><a name="l11847"></a><span class="lineno">11847</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11848"></a><span class="lineno">11848</span>&#160;    <span class="keywordflow">case</span> VmaAllocationRequestType::EndOf1st:</div>
-<div class="line"><a name="l11849"></a><span class="lineno">11849</span>&#160;        {</div>
-<div class="line"><a name="l11850"></a><span class="lineno">11850</span>&#160;            SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
-<div class="line"><a name="l11851"></a><span class="lineno">11851</span>&#160; </div>
-<div class="line"><a name="l11852"></a><span class="lineno">11852</span>&#160;            VMA_ASSERT(suballocations1st.empty() ||</div>
-<div class="line"><a name="l11853"></a><span class="lineno">11853</span>&#160;                request.offset &gt;= suballocations1st.back().offset + suballocations1st.back().size);</div>
-<div class="line"><a name="l11854"></a><span class="lineno">11854</span>&#160;            <span class="comment">// Check if it fits before the end of the block.</span></div>
-<div class="line"><a name="l11855"></a><span class="lineno">11855</span>&#160;            VMA_ASSERT(request.offset + allocSize &lt;= GetSize());</div>
-<div class="line"><a name="l11856"></a><span class="lineno">11856</span>&#160; </div>
-<div class="line"><a name="l11857"></a><span class="lineno">11857</span>&#160;            suballocations1st.push_back(newSuballoc);</div>
-<div class="line"><a name="l11858"></a><span class="lineno">11858</span>&#160;        }</div>
-<div class="line"><a name="l11859"></a><span class="lineno">11859</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11860"></a><span class="lineno">11860</span>&#160;    <span class="keywordflow">case</span> VmaAllocationRequestType::EndOf2nd:</div>
-<div class="line"><a name="l11861"></a><span class="lineno">11861</span>&#160;        {</div>
-<div class="line"><a name="l11862"></a><span class="lineno">11862</span>&#160;            SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
-<div class="line"><a name="l11863"></a><span class="lineno">11863</span>&#160;            <span class="comment">// New allocation at the end of 2-part ring buffer, so before first allocation from 1st vector.</span></div>
-<div class="line"><a name="l11864"></a><span class="lineno">11864</span>&#160;            VMA_ASSERT(!suballocations1st.empty() &amp;&amp;</div>
-<div class="line"><a name="l11865"></a><span class="lineno">11865</span>&#160;                request.offset + allocSize &lt;= suballocations1st[m_1stNullItemsBeginCount].offset);</div>
-<div class="line"><a name="l11866"></a><span class="lineno">11866</span>&#160;            SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
-<div class="line"><a name="l11867"></a><span class="lineno">11867</span>&#160; </div>
-<div class="line"><a name="l11868"></a><span class="lineno">11868</span>&#160;            <span class="keywordflow">switch</span>(m_2ndVectorMode)</div>
-<div class="line"><a name="l11869"></a><span class="lineno">11869</span>&#160;            {</div>
-<div class="line"><a name="l11870"></a><span class="lineno">11870</span>&#160;            <span class="keywordflow">case</span> SECOND_VECTOR_EMPTY:</div>
-<div class="line"><a name="l11871"></a><span class="lineno">11871</span>&#160;                <span class="comment">// First allocation from second part ring buffer.</span></div>
-<div class="line"><a name="l11872"></a><span class="lineno">11872</span>&#160;                VMA_ASSERT(suballocations2nd.empty());</div>
-<div class="line"><a name="l11873"></a><span class="lineno">11873</span>&#160;                m_2ndVectorMode = SECOND_VECTOR_RING_BUFFER;</div>
-<div class="line"><a name="l11874"></a><span class="lineno">11874</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11875"></a><span class="lineno">11875</span>&#160;            <span class="keywordflow">case</span> SECOND_VECTOR_RING_BUFFER:</div>
-<div class="line"><a name="l11876"></a><span class="lineno">11876</span>&#160;                <span class="comment">// 2-part ring buffer is already started.</span></div>
-<div class="line"><a name="l11877"></a><span class="lineno">11877</span>&#160;                VMA_ASSERT(!suballocations2nd.empty());</div>
-<div class="line"><a name="l11878"></a><span class="lineno">11878</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11879"></a><span class="lineno">11879</span>&#160;            <span class="keywordflow">case</span> SECOND_VECTOR_DOUBLE_STACK:</div>
-<div class="line"><a name="l11880"></a><span class="lineno">11880</span>&#160;                VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;CRITICAL ERROR: Trying to use linear allocator as ring buffer while it was already used as double stack.&quot;</span>);</div>
-<div class="line"><a name="l11881"></a><span class="lineno">11881</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11882"></a><span class="lineno">11882</span>&#160;            <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l11883"></a><span class="lineno">11883</span>&#160;                VMA_ASSERT(0);</div>
-<div class="line"><a name="l11884"></a><span class="lineno">11884</span>&#160;            }</div>
-<div class="line"><a name="l11885"></a><span class="lineno">11885</span>&#160; </div>
-<div class="line"><a name="l11886"></a><span class="lineno">11886</span>&#160;            suballocations2nd.push_back(newSuballoc);</div>
-<div class="line"><a name="l11887"></a><span class="lineno">11887</span>&#160;        }</div>
-<div class="line"><a name="l11888"></a><span class="lineno">11888</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11889"></a><span class="lineno">11889</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l11890"></a><span class="lineno">11890</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;CRITICAL INTERNAL ERROR.&quot;</span>);</div>
-<div class="line"><a name="l11891"></a><span class="lineno">11891</span>&#160;    }</div>
-<div class="line"><a name="l11892"></a><span class="lineno">11892</span>&#160; </div>
-<div class="line"><a name="l11893"></a><span class="lineno">11893</span>&#160;    m_SumFreeSize -= newSuballoc.size;</div>
-<div class="line"><a name="l11894"></a><span class="lineno">11894</span>&#160;}</div>
-<div class="line"><a name="l11895"></a><span class="lineno">11895</span>&#160; </div>
-<div class="line"><a name="l11896"></a><span class="lineno">11896</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::Free(<span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l11897"></a><span class="lineno">11897</span>&#160;{</div>
-<div class="line"><a name="l11898"></a><span class="lineno">11898</span>&#160;    FreeAtOffset(allocation-&gt;GetOffset());</div>
-<div class="line"><a name="l11899"></a><span class="lineno">11899</span>&#160;}</div>
-<div class="line"><a name="l11900"></a><span class="lineno">11900</span>&#160; </div>
-<div class="line"><a name="l11901"></a><span class="lineno">11901</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::FreeAtOffset(VkDeviceSize offset)</div>
-<div class="line"><a name="l11902"></a><span class="lineno">11902</span>&#160;{</div>
-<div class="line"><a name="l11903"></a><span class="lineno">11903</span>&#160;    SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
-<div class="line"><a name="l11904"></a><span class="lineno">11904</span>&#160;    SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
-<div class="line"><a name="l11905"></a><span class="lineno">11905</span>&#160; </div>
-<div class="line"><a name="l11906"></a><span class="lineno">11906</span>&#160;    <span class="keywordflow">if</span>(!suballocations1st.empty())</div>
-<div class="line"><a name="l11907"></a><span class="lineno">11907</span>&#160;    {</div>
-<div class="line"><a name="l11908"></a><span class="lineno">11908</span>&#160;        <span class="comment">// First allocation: Mark it as next empty at the beginning.</span></div>
-<div class="line"><a name="l11909"></a><span class="lineno">11909</span>&#160;        VmaSuballocation&amp; firstSuballoc = suballocations1st[m_1stNullItemsBeginCount];</div>
-<div class="line"><a name="l11910"></a><span class="lineno">11910</span>&#160;        <span class="keywordflow">if</span>(firstSuballoc.offset == offset)</div>
-<div class="line"><a name="l11911"></a><span class="lineno">11911</span>&#160;        {</div>
-<div class="line"><a name="l11912"></a><span class="lineno">11912</span>&#160;            firstSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE;</div>
-<div class="line"><a name="l11913"></a><span class="lineno">11913</span>&#160;            firstSuballoc.hAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l11914"></a><span class="lineno">11914</span>&#160;            m_SumFreeSize += firstSuballoc.size;</div>
-<div class="line"><a name="l11915"></a><span class="lineno">11915</span>&#160;            ++m_1stNullItemsBeginCount;</div>
-<div class="line"><a name="l11916"></a><span class="lineno">11916</span>&#160;            CleanupAfterFree();</div>
-<div class="line"><a name="l11917"></a><span class="lineno">11917</span>&#160;            <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l11918"></a><span class="lineno">11918</span>&#160;        }</div>
-<div class="line"><a name="l11919"></a><span class="lineno">11919</span>&#160;    }</div>
-<div class="line"><a name="l11920"></a><span class="lineno">11920</span>&#160; </div>
-<div class="line"><a name="l11921"></a><span class="lineno">11921</span>&#160;    <span class="comment">// Last allocation in 2-part ring buffer or top of upper stack (same logic).</span></div>
-<div class="line"><a name="l11922"></a><span class="lineno">11922</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER ||</div>
-<div class="line"><a name="l11923"></a><span class="lineno">11923</span>&#160;        m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
-<div class="line"><a name="l11924"></a><span class="lineno">11924</span>&#160;    {</div>
-<div class="line"><a name="l11925"></a><span class="lineno">11925</span>&#160;        VmaSuballocation&amp; lastSuballoc = suballocations2nd.back();</div>
-<div class="line"><a name="l11926"></a><span class="lineno">11926</span>&#160;        <span class="keywordflow">if</span>(lastSuballoc.offset == offset)</div>
-<div class="line"><a name="l11927"></a><span class="lineno">11927</span>&#160;        {</div>
-<div class="line"><a name="l11928"></a><span class="lineno">11928</span>&#160;            m_SumFreeSize += lastSuballoc.size;</div>
-<div class="line"><a name="l11929"></a><span class="lineno">11929</span>&#160;            suballocations2nd.pop_back();</div>
-<div class="line"><a name="l11930"></a><span class="lineno">11930</span>&#160;            CleanupAfterFree();</div>
-<div class="line"><a name="l11931"></a><span class="lineno">11931</span>&#160;            <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l11932"></a><span class="lineno">11932</span>&#160;        }</div>
-<div class="line"><a name="l11933"></a><span class="lineno">11933</span>&#160;    }</div>
-<div class="line"><a name="l11934"></a><span class="lineno">11934</span>&#160;    <span class="comment">// Last allocation in 1st vector.</span></div>
-<div class="line"><a name="l11935"></a><span class="lineno">11935</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_EMPTY)</div>
-<div class="line"><a name="l11936"></a><span class="lineno">11936</span>&#160;    {</div>
-<div class="line"><a name="l11937"></a><span class="lineno">11937</span>&#160;        VmaSuballocation&amp; lastSuballoc = suballocations1st.back();</div>
-<div class="line"><a name="l11938"></a><span class="lineno">11938</span>&#160;        <span class="keywordflow">if</span>(lastSuballoc.offset == offset)</div>
-<div class="line"><a name="l11939"></a><span class="lineno">11939</span>&#160;        {</div>
-<div class="line"><a name="l11940"></a><span class="lineno">11940</span>&#160;            m_SumFreeSize += lastSuballoc.size;</div>
-<div class="line"><a name="l11941"></a><span class="lineno">11941</span>&#160;            suballocations1st.pop_back();</div>
-<div class="line"><a name="l11942"></a><span class="lineno">11942</span>&#160;            CleanupAfterFree();</div>
-<div class="line"><a name="l11943"></a><span class="lineno">11943</span>&#160;            <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l11944"></a><span class="lineno">11944</span>&#160;        }</div>
-<div class="line"><a name="l11945"></a><span class="lineno">11945</span>&#160;    }</div>
-<div class="line"><a name="l11946"></a><span class="lineno">11946</span>&#160; </div>
-<div class="line"><a name="l11947"></a><span class="lineno">11947</span>&#160;    <span class="comment">// Item from the middle of 1st vector.</span></div>
-<div class="line"><a name="l11948"></a><span class="lineno">11948</span>&#160;    {</div>
-<div class="line"><a name="l11949"></a><span class="lineno">11949</span>&#160;        VmaSuballocation refSuballoc;</div>
-<div class="line"><a name="l11950"></a><span class="lineno">11950</span>&#160;        refSuballoc.offset = offset;</div>
-<div class="line"><a name="l11951"></a><span class="lineno">11951</span>&#160;        <span class="comment">// Rest of members stays uninitialized intentionally for better performance.</span></div>
-<div class="line"><a name="l11952"></a><span class="lineno">11952</span>&#160;        SuballocationVectorType::iterator it = VmaBinaryFindSorted(</div>
-<div class="line"><a name="l11953"></a><span class="lineno">11953</span>&#160;            suballocations1st.begin() + m_1stNullItemsBeginCount,</div>
-<div class="line"><a name="l11954"></a><span class="lineno">11954</span>&#160;            suballocations1st.end(),</div>
-<div class="line"><a name="l11955"></a><span class="lineno">11955</span>&#160;            refSuballoc,</div>
-<div class="line"><a name="l11956"></a><span class="lineno">11956</span>&#160;            VmaSuballocationOffsetLess());</div>
-<div class="line"><a name="l11957"></a><span class="lineno">11957</span>&#160;        <span class="keywordflow">if</span>(it != suballocations1st.end())</div>
-<div class="line"><a name="l11958"></a><span class="lineno">11958</span>&#160;        {</div>
-<div class="line"><a name="l11959"></a><span class="lineno">11959</span>&#160;            it-&gt;type = VMA_SUBALLOCATION_TYPE_FREE;</div>
-<div class="line"><a name="l11960"></a><span class="lineno">11960</span>&#160;            it-&gt;hAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l11961"></a><span class="lineno">11961</span>&#160;            ++m_1stNullItemsMiddleCount;</div>
-<div class="line"><a name="l11962"></a><span class="lineno">11962</span>&#160;            m_SumFreeSize += it-&gt;size;</div>
-<div class="line"><a name="l11963"></a><span class="lineno">11963</span>&#160;            CleanupAfterFree();</div>
-<div class="line"><a name="l11964"></a><span class="lineno">11964</span>&#160;            <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l11965"></a><span class="lineno">11965</span>&#160;        }</div>
-<div class="line"><a name="l11966"></a><span class="lineno">11966</span>&#160;    }</div>
-<div class="line"><a name="l11967"></a><span class="lineno">11967</span>&#160; </div>
-<div class="line"><a name="l11968"></a><span class="lineno">11968</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode != SECOND_VECTOR_EMPTY)</div>
-<div class="line"><a name="l11969"></a><span class="lineno">11969</span>&#160;    {</div>
-<div class="line"><a name="l11970"></a><span class="lineno">11970</span>&#160;        <span class="comment">// Item from the middle of 2nd vector.</span></div>
-<div class="line"><a name="l11971"></a><span class="lineno">11971</span>&#160;        VmaSuballocation refSuballoc;</div>
-<div class="line"><a name="l11972"></a><span class="lineno">11972</span>&#160;        refSuballoc.offset = offset;</div>
-<div class="line"><a name="l11973"></a><span class="lineno">11973</span>&#160;        <span class="comment">// Rest of members stays uninitialized intentionally for better performance.</span></div>
-<div class="line"><a name="l11974"></a><span class="lineno">11974</span>&#160;        SuballocationVectorType::iterator it = m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER ?</div>
-<div class="line"><a name="l11975"></a><span class="lineno">11975</span>&#160;            VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetLess()) :</div>
-<div class="line"><a name="l11976"></a><span class="lineno">11976</span>&#160;            VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetGreater());</div>
-<div class="line"><a name="l11977"></a><span class="lineno">11977</span>&#160;        <span class="keywordflow">if</span>(it != suballocations2nd.end())</div>
-<div class="line"><a name="l11978"></a><span class="lineno">11978</span>&#160;        {</div>
-<div class="line"><a name="l11979"></a><span class="lineno">11979</span>&#160;            it-&gt;type = VMA_SUBALLOCATION_TYPE_FREE;</div>
-<div class="line"><a name="l11980"></a><span class="lineno">11980</span>&#160;            it-&gt;hAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l11981"></a><span class="lineno">11981</span>&#160;            ++m_2ndNullItemsCount;</div>
-<div class="line"><a name="l11982"></a><span class="lineno">11982</span>&#160;            m_SumFreeSize += it-&gt;size;</div>
-<div class="line"><a name="l11983"></a><span class="lineno">11983</span>&#160;            CleanupAfterFree();</div>
-<div class="line"><a name="l11984"></a><span class="lineno">11984</span>&#160;            <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l11985"></a><span class="lineno">11985</span>&#160;        }</div>
-<div class="line"><a name="l11986"></a><span class="lineno">11986</span>&#160;    }</div>
-<div class="line"><a name="l11987"></a><span class="lineno">11987</span>&#160; </div>
-<div class="line"><a name="l11988"></a><span class="lineno">11988</span>&#160;    VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Allocation to free not found in linear allocator!&quot;</span>);</div>
-<div class="line"><a name="l11989"></a><span class="lineno">11989</span>&#160;}</div>
-<div class="line"><a name="l11990"></a><span class="lineno">11990</span>&#160; </div>
-<div class="line"><a name="l11991"></a><span class="lineno">11991</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Linear::ShouldCompact1st()<span class="keyword"> const</span></div>
-<div class="line"><a name="l11992"></a><span class="lineno">11992</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l11993"></a><span class="lineno">11993</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> nullItemCount = m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount;</div>
-<div class="line"><a name="l11994"></a><span class="lineno">11994</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballocCount = AccessSuballocations1st().size();</div>
-<div class="line"><a name="l11995"></a><span class="lineno">11995</span>&#160;    <span class="keywordflow">return</span> suballocCount &gt; 32 &amp;&amp; nullItemCount * 2 &gt;= (suballocCount - nullItemCount) * 3;</div>
-<div class="line"><a name="l11996"></a><span class="lineno">11996</span>&#160;}</div>
-<div class="line"><a name="l11997"></a><span class="lineno">11997</span>&#160; </div>
-<div class="line"><a name="l11998"></a><span class="lineno">11998</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::CleanupAfterFree()</div>
-<div class="line"><a name="l11999"></a><span class="lineno">11999</span>&#160;{</div>
-<div class="line"><a name="l12000"></a><span class="lineno">12000</span>&#160;    SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
-<div class="line"><a name="l12001"></a><span class="lineno">12001</span>&#160;    SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
-<div class="line"><a name="l12002"></a><span class="lineno">12002</span>&#160; </div>
-<div class="line"><a name="l12003"></a><span class="lineno">12003</span>&#160;    <span class="keywordflow">if</span>(IsEmpty())</div>
-<div class="line"><a name="l12004"></a><span class="lineno">12004</span>&#160;    {</div>
-<div class="line"><a name="l12005"></a><span class="lineno">12005</span>&#160;        suballocations1st.clear();</div>
-<div class="line"><a name="l12006"></a><span class="lineno">12006</span>&#160;        suballocations2nd.clear();</div>
-<div class="line"><a name="l12007"></a><span class="lineno">12007</span>&#160;        m_1stNullItemsBeginCount = 0;</div>
-<div class="line"><a name="l12008"></a><span class="lineno">12008</span>&#160;        m_1stNullItemsMiddleCount = 0;</div>
-<div class="line"><a name="l12009"></a><span class="lineno">12009</span>&#160;        m_2ndNullItemsCount = 0;</div>
-<div class="line"><a name="l12010"></a><span class="lineno">12010</span>&#160;        m_2ndVectorMode = SECOND_VECTOR_EMPTY;</div>
-<div class="line"><a name="l12011"></a><span class="lineno">12011</span>&#160;    }</div>
-<div class="line"><a name="l12012"></a><span class="lineno">12012</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l12013"></a><span class="lineno">12013</span>&#160;    {</div>
-<div class="line"><a name="l12014"></a><span class="lineno">12014</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc1stCount = suballocations1st.size();</div>
-<div class="line"><a name="l12015"></a><span class="lineno">12015</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> nullItem1stCount = m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount;</div>
-<div class="line"><a name="l12016"></a><span class="lineno">12016</span>&#160;        VMA_ASSERT(nullItem1stCount &lt;= suballoc1stCount);</div>
-<div class="line"><a name="l12017"></a><span class="lineno">12017</span>&#160; </div>
-<div class="line"><a name="l12018"></a><span class="lineno">12018</span>&#160;        <span class="comment">// Find more null items at the beginning of 1st vector.</span></div>
-<div class="line"><a name="l12019"></a><span class="lineno">12019</span>&#160;        <span class="keywordflow">while</span>(m_1stNullItemsBeginCount &lt; suballoc1stCount &amp;&amp;</div>
-<div class="line"><a name="l12020"></a><span class="lineno">12020</span>&#160;            suballocations1st[m_1stNullItemsBeginCount].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l12021"></a><span class="lineno">12021</span>&#160;        {</div>
-<div class="line"><a name="l12022"></a><span class="lineno">12022</span>&#160;            ++m_1stNullItemsBeginCount;</div>
-<div class="line"><a name="l12023"></a><span class="lineno">12023</span>&#160;            --m_1stNullItemsMiddleCount;</div>
-<div class="line"><a name="l12024"></a><span class="lineno">12024</span>&#160;        }</div>
-<div class="line"><a name="l12025"></a><span class="lineno">12025</span>&#160; </div>
-<div class="line"><a name="l12026"></a><span class="lineno">12026</span>&#160;        <span class="comment">// Find more null items at the end of 1st vector.</span></div>
-<div class="line"><a name="l12027"></a><span class="lineno">12027</span>&#160;        <span class="keywordflow">while</span>(m_1stNullItemsMiddleCount &gt; 0 &amp;&amp;</div>
-<div class="line"><a name="l12028"></a><span class="lineno">12028</span>&#160;            suballocations1st.back().hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l12029"></a><span class="lineno">12029</span>&#160;        {</div>
-<div class="line"><a name="l12030"></a><span class="lineno">12030</span>&#160;            --m_1stNullItemsMiddleCount;</div>
-<div class="line"><a name="l12031"></a><span class="lineno">12031</span>&#160;            suballocations1st.pop_back();</div>
-<div class="line"><a name="l12032"></a><span class="lineno">12032</span>&#160;        }</div>
-<div class="line"><a name="l12033"></a><span class="lineno">12033</span>&#160; </div>
-<div class="line"><a name="l12034"></a><span class="lineno">12034</span>&#160;        <span class="comment">// Find more null items at the end of 2nd vector.</span></div>
-<div class="line"><a name="l12035"></a><span class="lineno">12035</span>&#160;        <span class="keywordflow">while</span>(m_2ndNullItemsCount &gt; 0 &amp;&amp;</div>
-<div class="line"><a name="l12036"></a><span class="lineno">12036</span>&#160;            suballocations2nd.back().hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l12037"></a><span class="lineno">12037</span>&#160;        {</div>
-<div class="line"><a name="l12038"></a><span class="lineno">12038</span>&#160;            --m_2ndNullItemsCount;</div>
-<div class="line"><a name="l12039"></a><span class="lineno">12039</span>&#160;            suballocations2nd.pop_back();</div>
-<div class="line"><a name="l12040"></a><span class="lineno">12040</span>&#160;        }</div>
-<div class="line"><a name="l12041"></a><span class="lineno">12041</span>&#160; </div>
-<div class="line"><a name="l12042"></a><span class="lineno">12042</span>&#160;        <span class="comment">// Find more null items at the beginning of 2nd vector.</span></div>
-<div class="line"><a name="l12043"></a><span class="lineno">12043</span>&#160;        <span class="keywordflow">while</span>(m_2ndNullItemsCount &gt; 0 &amp;&amp;</div>
-<div class="line"><a name="l12044"></a><span class="lineno">12044</span>&#160;            suballocations2nd[0].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l12045"></a><span class="lineno">12045</span>&#160;        {</div>
-<div class="line"><a name="l12046"></a><span class="lineno">12046</span>&#160;            --m_2ndNullItemsCount;</div>
-<div class="line"><a name="l12047"></a><span class="lineno">12047</span>&#160;            VmaVectorRemove(suballocations2nd, 0);</div>
-<div class="line"><a name="l12048"></a><span class="lineno">12048</span>&#160;        }</div>
-<div class="line"><a name="l12049"></a><span class="lineno">12049</span>&#160; </div>
-<div class="line"><a name="l12050"></a><span class="lineno">12050</span>&#160;        <span class="keywordflow">if</span>(ShouldCompact1st())</div>
-<div class="line"><a name="l12051"></a><span class="lineno">12051</span>&#160;        {</div>
-<div class="line"><a name="l12052"></a><span class="lineno">12052</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">size_t</span> nonNullItemCount = suballoc1stCount - nullItem1stCount;</div>
-<div class="line"><a name="l12053"></a><span class="lineno">12053</span>&#160;            <span class="keywordtype">size_t</span> srcIndex = m_1stNullItemsBeginCount;</div>
-<div class="line"><a name="l12054"></a><span class="lineno">12054</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> dstIndex = 0; dstIndex &lt; nonNullItemCount; ++dstIndex)</div>
-<div class="line"><a name="l12055"></a><span class="lineno">12055</span>&#160;            {</div>
-<div class="line"><a name="l12056"></a><span class="lineno">12056</span>&#160;                <span class="keywordflow">while</span>(suballocations1st[srcIndex].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l12057"></a><span class="lineno">12057</span>&#160;                {</div>
-<div class="line"><a name="l12058"></a><span class="lineno">12058</span>&#160;                    ++srcIndex;</div>
-<div class="line"><a name="l12059"></a><span class="lineno">12059</span>&#160;                }</div>
-<div class="line"><a name="l12060"></a><span class="lineno">12060</span>&#160;                <span class="keywordflow">if</span>(dstIndex != srcIndex)</div>
-<div class="line"><a name="l12061"></a><span class="lineno">12061</span>&#160;                {</div>
-<div class="line"><a name="l12062"></a><span class="lineno">12062</span>&#160;                    suballocations1st[dstIndex] = suballocations1st[srcIndex];</div>
-<div class="line"><a name="l12063"></a><span class="lineno">12063</span>&#160;                }</div>
-<div class="line"><a name="l12064"></a><span class="lineno">12064</span>&#160;                ++srcIndex;</div>
-<div class="line"><a name="l12065"></a><span class="lineno">12065</span>&#160;            }</div>
-<div class="line"><a name="l12066"></a><span class="lineno">12066</span>&#160;            suballocations1st.resize(nonNullItemCount);</div>
-<div class="line"><a name="l12067"></a><span class="lineno">12067</span>&#160;            m_1stNullItemsBeginCount = 0;</div>
-<div class="line"><a name="l12068"></a><span class="lineno">12068</span>&#160;            m_1stNullItemsMiddleCount = 0;</div>
-<div class="line"><a name="l12069"></a><span class="lineno">12069</span>&#160;        }</div>
-<div class="line"><a name="l12070"></a><span class="lineno">12070</span>&#160; </div>
-<div class="line"><a name="l12071"></a><span class="lineno">12071</span>&#160;        <span class="comment">// 2nd vector became empty.</span></div>
-<div class="line"><a name="l12072"></a><span class="lineno">12072</span>&#160;        <span class="keywordflow">if</span>(suballocations2nd.empty())</div>
-<div class="line"><a name="l12073"></a><span class="lineno">12073</span>&#160;        {</div>
-<div class="line"><a name="l12074"></a><span class="lineno">12074</span>&#160;            m_2ndVectorMode = SECOND_VECTOR_EMPTY;</div>
-<div class="line"><a name="l12075"></a><span class="lineno">12075</span>&#160;        }</div>
-<div class="line"><a name="l12076"></a><span class="lineno">12076</span>&#160; </div>
-<div class="line"><a name="l12077"></a><span class="lineno">12077</span>&#160;        <span class="comment">// 1st vector became empty.</span></div>
-<div class="line"><a name="l12078"></a><span class="lineno">12078</span>&#160;        <span class="keywordflow">if</span>(suballocations1st.size() - m_1stNullItemsBeginCount == 0)</div>
-<div class="line"><a name="l12079"></a><span class="lineno">12079</span>&#160;        {</div>
-<div class="line"><a name="l12080"></a><span class="lineno">12080</span>&#160;            suballocations1st.clear();</div>
-<div class="line"><a name="l12081"></a><span class="lineno">12081</span>&#160;            m_1stNullItemsBeginCount = 0;</div>
-<div class="line"><a name="l12082"></a><span class="lineno">12082</span>&#160; </div>
-<div class="line"><a name="l12083"></a><span class="lineno">12083</span>&#160;            <span class="keywordflow">if</span>(!suballocations2nd.empty() &amp;&amp; m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
-<div class="line"><a name="l12084"></a><span class="lineno">12084</span>&#160;            {</div>
-<div class="line"><a name="l12085"></a><span class="lineno">12085</span>&#160;                <span class="comment">// Swap 1st with 2nd. Now 2nd is empty.</span></div>
-<div class="line"><a name="l12086"></a><span class="lineno">12086</span>&#160;                m_2ndVectorMode = SECOND_VECTOR_EMPTY;</div>
-<div class="line"><a name="l12087"></a><span class="lineno">12087</span>&#160;                m_1stNullItemsMiddleCount = m_2ndNullItemsCount;</div>
-<div class="line"><a name="l12088"></a><span class="lineno">12088</span>&#160;                <span class="keywordflow">while</span>(m_1stNullItemsBeginCount &lt; suballocations2nd.size() &amp;&amp;</div>
-<div class="line"><a name="l12089"></a><span class="lineno">12089</span>&#160;                    suballocations2nd[m_1stNullItemsBeginCount].hAllocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l12090"></a><span class="lineno">12090</span>&#160;                {</div>
-<div class="line"><a name="l12091"></a><span class="lineno">12091</span>&#160;                    ++m_1stNullItemsBeginCount;</div>
-<div class="line"><a name="l12092"></a><span class="lineno">12092</span>&#160;                    --m_1stNullItemsMiddleCount;</div>
-<div class="line"><a name="l12093"></a><span class="lineno">12093</span>&#160;                }</div>
-<div class="line"><a name="l12094"></a><span class="lineno">12094</span>&#160;                m_2ndNullItemsCount = 0;</div>
-<div class="line"><a name="l12095"></a><span class="lineno">12095</span>&#160;                m_1stVectorIndex ^= 1;</div>
-<div class="line"><a name="l12096"></a><span class="lineno">12096</span>&#160;            }</div>
-<div class="line"><a name="l12097"></a><span class="lineno">12097</span>&#160;        }</div>
-<div class="line"><a name="l12098"></a><span class="lineno">12098</span>&#160;    }</div>
-<div class="line"><a name="l12099"></a><span class="lineno">12099</span>&#160; </div>
-<div class="line"><a name="l12100"></a><span class="lineno">12100</span>&#160;    VMA_HEAVY_ASSERT(Validate());</div>
-<div class="line"><a name="l12101"></a><span class="lineno">12101</span>&#160;}</div>
+<div class="line"><a name="l10295"></a><span class="lineno">10295</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Generic::UnregisterFreeSuballocation(VmaSuballocationList::iterator item)</div>
+<div class="line"><a name="l10296"></a><span class="lineno">10296</span>&#160;{</div>
+<div class="line"><a name="l10297"></a><span class="lineno">10297</span>&#160;    VMA_ASSERT(item-&gt;type == VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l10298"></a><span class="lineno">10298</span>&#160;    VMA_ASSERT(item-&gt;size &gt; 0);</div>
+<div class="line"><a name="l10299"></a><span class="lineno">10299</span>&#160; </div>
+<div class="line"><a name="l10300"></a><span class="lineno">10300</span>&#160;    <span class="comment">// You may want to enable this validation at the beginning or at the end of</span></div>
+<div class="line"><a name="l10301"></a><span class="lineno">10301</span>&#160;    <span class="comment">// this function, depending on what do you want to check.</span></div>
+<div class="line"><a name="l10302"></a><span class="lineno">10302</span>&#160;    VMA_HEAVY_ASSERT(ValidateFreeSuballocationList());</div>
+<div class="line"><a name="l10303"></a><span class="lineno">10303</span>&#160; </div>
+<div class="line"><a name="l10304"></a><span class="lineno">10304</span>&#160;    <span class="keywordflow">if</span>(item-&gt;size &gt;= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)</div>
+<div class="line"><a name="l10305"></a><span class="lineno">10305</span>&#160;    {</div>
+<div class="line"><a name="l10306"></a><span class="lineno">10306</span>&#160;        VmaSuballocationList::iterator* <span class="keyword">const</span> it = VmaBinaryFindFirstNotLess(</div>
+<div class="line"><a name="l10307"></a><span class="lineno">10307</span>&#160;            m_FreeSuballocationsBySize.data(),</div>
+<div class="line"><a name="l10308"></a><span class="lineno">10308</span>&#160;            m_FreeSuballocationsBySize.data() + m_FreeSuballocationsBySize.size(),</div>
+<div class="line"><a name="l10309"></a><span class="lineno">10309</span>&#160;            item,</div>
+<div class="line"><a name="l10310"></a><span class="lineno">10310</span>&#160;            VmaSuballocationItemSizeLess());</div>
+<div class="line"><a name="l10311"></a><span class="lineno">10311</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> index = it - m_FreeSuballocationsBySize.data();</div>
+<div class="line"><a name="l10312"></a><span class="lineno">10312</span>&#160;            index &lt; m_FreeSuballocationsBySize.size();</div>
+<div class="line"><a name="l10313"></a><span class="lineno">10313</span>&#160;            ++index)</div>
+<div class="line"><a name="l10314"></a><span class="lineno">10314</span>&#160;        {</div>
+<div class="line"><a name="l10315"></a><span class="lineno">10315</span>&#160;            <span class="keywordflow">if</span>(m_FreeSuballocationsBySize[index] == item)</div>
+<div class="line"><a name="l10316"></a><span class="lineno">10316</span>&#160;            {</div>
+<div class="line"><a name="l10317"></a><span class="lineno">10317</span>&#160;                VmaVectorRemove(m_FreeSuballocationsBySize, index);</div>
+<div class="line"><a name="l10318"></a><span class="lineno">10318</span>&#160;                <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l10319"></a><span class="lineno">10319</span>&#160;            }</div>
+<div class="line"><a name="l10320"></a><span class="lineno">10320</span>&#160;            VMA_ASSERT((m_FreeSuballocationsBySize[index]-&gt;size == item-&gt;size) &amp;&amp; <span class="stringliteral">&quot;Not found.&quot;</span>);</div>
+<div class="line"><a name="l10321"></a><span class="lineno">10321</span>&#160;        }</div>
+<div class="line"><a name="l10322"></a><span class="lineno">10322</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Not found.&quot;</span>);</div>
+<div class="line"><a name="l10323"></a><span class="lineno">10323</span>&#160;    }</div>
+<div class="line"><a name="l10324"></a><span class="lineno">10324</span>&#160; </div>
+<div class="line"><a name="l10325"></a><span class="lineno">10325</span>&#160;    <span class="comment">//VMA_HEAVY_ASSERT(ValidateFreeSuballocationList());</span></div>
+<div class="line"><a name="l10326"></a><span class="lineno">10326</span>&#160;}</div>
+<div class="line"><a name="l10327"></a><span class="lineno">10327</span>&#160; </div>
+<div class="line"><a name="l10328"></a><span class="lineno">10328</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Generic::IsBufferImageGranularityConflictPossible(</div>
+<div class="line"><a name="l10329"></a><span class="lineno">10329</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
+<div class="line"><a name="l10330"></a><span class="lineno">10330</span>&#160;    VmaSuballocationType&amp; inOutPrevSuballocType)<span class="keyword"> const</span></div>
+<div class="line"><a name="l10331"></a><span class="lineno">10331</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l10332"></a><span class="lineno">10332</span>&#160;    <span class="keywordflow">if</span>(bufferImageGranularity == 1 || IsEmpty())</div>
+<div class="line"><a name="l10333"></a><span class="lineno">10333</span>&#160;    {</div>
+<div class="line"><a name="l10334"></a><span class="lineno">10334</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l10335"></a><span class="lineno">10335</span>&#160;    }</div>
+<div class="line"><a name="l10336"></a><span class="lineno">10336</span>&#160; </div>
+<div class="line"><a name="l10337"></a><span class="lineno">10337</span>&#160;    VkDeviceSize minAlignment = VK_WHOLE_SIZE;</div>
+<div class="line"><a name="l10338"></a><span class="lineno">10338</span>&#160;    <span class="keywordtype">bool</span> typeConflictFound = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l10339"></a><span class="lineno">10339</span>&#160;    <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span>&amp; suballoc : m_Suballocations)</div>
+<div class="line"><a name="l10340"></a><span class="lineno">10340</span>&#160;    {</div>
+<div class="line"><a name="l10341"></a><span class="lineno">10341</span>&#160;        <span class="keyword">const</span> VmaSuballocationType suballocType = suballoc.type;</div>
+<div class="line"><a name="l10342"></a><span class="lineno">10342</span>&#160;        <span class="keywordflow">if</span>(suballocType != VMA_SUBALLOCATION_TYPE_FREE)</div>
+<div class="line"><a name="l10343"></a><span class="lineno">10343</span>&#160;        {</div>
+<div class="line"><a name="l10344"></a><span class="lineno">10344</span>&#160;            minAlignment = VMA_MIN(minAlignment, suballoc.hAllocation-&gt;GetAlignment());</div>
+<div class="line"><a name="l10345"></a><span class="lineno">10345</span>&#160;            <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(inOutPrevSuballocType, suballocType))</div>
+<div class="line"><a name="l10346"></a><span class="lineno">10346</span>&#160;            {</div>
+<div class="line"><a name="l10347"></a><span class="lineno">10347</span>&#160;                typeConflictFound = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l10348"></a><span class="lineno">10348</span>&#160;            }</div>
+<div class="line"><a name="l10349"></a><span class="lineno">10349</span>&#160;            inOutPrevSuballocType = suballocType;</div>
+<div class="line"><a name="l10350"></a><span class="lineno">10350</span>&#160;        }</div>
+<div class="line"><a name="l10351"></a><span class="lineno">10351</span>&#160;    }</div>
+<div class="line"><a name="l10352"></a><span class="lineno">10352</span>&#160; </div>
+<div class="line"><a name="l10353"></a><span class="lineno">10353</span>&#160;    <span class="keywordflow">return</span> typeConflictFound || minAlignment &gt;= bufferImageGranularity;</div>
+<div class="line"><a name="l10354"></a><span class="lineno">10354</span>&#160;}</div>
+<div class="line"><a name="l10355"></a><span class="lineno">10355</span>&#160; </div>
+<div class="line"><a name="l10357"></a><span class="lineno">10357</span>&#160;<span class="comment">// class VmaBlockMetadata_Linear</span></div>
+<div class="line"><a name="l10358"></a><span class="lineno">10358</span>&#160; </div>
+<div class="line"><a name="l10359"></a><span class="lineno">10359</span>&#160;VmaBlockMetadata_Linear::VmaBlockMetadata_Linear(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator) :</div>
+<div class="line"><a name="l10360"></a><span class="lineno">10360</span>&#160;    VmaBlockMetadata(hAllocator),</div>
+<div class="line"><a name="l10361"></a><span class="lineno">10361</span>&#160;    m_SumFreeSize(0),</div>
+<div class="line"><a name="l10362"></a><span class="lineno">10362</span>&#160;    m_Suballocations0(VmaStlAllocator&lt;VmaSuballocation&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
+<div class="line"><a name="l10363"></a><span class="lineno">10363</span>&#160;    m_Suballocations1(VmaStlAllocator&lt;VmaSuballocation&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
+<div class="line"><a name="l10364"></a><span class="lineno">10364</span>&#160;    m_1stVectorIndex(0),</div>
+<div class="line"><a name="l10365"></a><span class="lineno">10365</span>&#160;    m_2ndVectorMode(SECOND_VECTOR_EMPTY),</div>
+<div class="line"><a name="l10366"></a><span class="lineno">10366</span>&#160;    m_1stNullItemsBeginCount(0),</div>
+<div class="line"><a name="l10367"></a><span class="lineno">10367</span>&#160;    m_1stNullItemsMiddleCount(0),</div>
+<div class="line"><a name="l10368"></a><span class="lineno">10368</span>&#160;    m_2ndNullItemsCount(0)</div>
+<div class="line"><a name="l10369"></a><span class="lineno">10369</span>&#160;{</div>
+<div class="line"><a name="l10370"></a><span class="lineno">10370</span>&#160;}</div>
+<div class="line"><a name="l10371"></a><span class="lineno">10371</span>&#160; </div>
+<div class="line"><a name="l10372"></a><span class="lineno">10372</span>&#160;VmaBlockMetadata_Linear::~VmaBlockMetadata_Linear()</div>
+<div class="line"><a name="l10373"></a><span class="lineno">10373</span>&#160;{</div>
+<div class="line"><a name="l10374"></a><span class="lineno">10374</span>&#160;}</div>
+<div class="line"><a name="l10375"></a><span class="lineno">10375</span>&#160; </div>
+<div class="line"><a name="l10376"></a><span class="lineno">10376</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::Init(VkDeviceSize size)</div>
+<div class="line"><a name="l10377"></a><span class="lineno">10377</span>&#160;{</div>
+<div class="line"><a name="l10378"></a><span class="lineno">10378</span>&#160;    VmaBlockMetadata::Init(size);</div>
+<div class="line"><a name="l10379"></a><span class="lineno">10379</span>&#160;    m_SumFreeSize = size;</div>
+<div class="line"><a name="l10380"></a><span class="lineno">10380</span>&#160;}</div>
+<div class="line"><a name="l10381"></a><span class="lineno">10381</span>&#160; </div>
+<div class="line"><a name="l10382"></a><span class="lineno">10382</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Linear::Validate()<span class="keyword"> const</span></div>
+<div class="line"><a name="l10383"></a><span class="lineno">10383</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l10384"></a><span class="lineno">10384</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
+<div class="line"><a name="l10385"></a><span class="lineno">10385</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
+<div class="line"><a name="l10386"></a><span class="lineno">10386</span>&#160; </div>
+<div class="line"><a name="l10387"></a><span class="lineno">10387</span>&#160;    VMA_VALIDATE(suballocations2nd.empty() == (m_2ndVectorMode == SECOND_VECTOR_EMPTY));</div>
+<div class="line"><a name="l10388"></a><span class="lineno">10388</span>&#160;    VMA_VALIDATE(!suballocations1st.empty() ||</div>
+<div class="line"><a name="l10389"></a><span class="lineno">10389</span>&#160;        suballocations2nd.empty() ||</div>
+<div class="line"><a name="l10390"></a><span class="lineno">10390</span>&#160;        m_2ndVectorMode != SECOND_VECTOR_RING_BUFFER);</div>
+<div class="line"><a name="l10391"></a><span class="lineno">10391</span>&#160; </div>
+<div class="line"><a name="l10392"></a><span class="lineno">10392</span>&#160;    <span class="keywordflow">if</span>(!suballocations1st.empty())</div>
+<div class="line"><a name="l10393"></a><span class="lineno">10393</span>&#160;    {</div>
+<div class="line"><a name="l10394"></a><span class="lineno">10394</span>&#160;        <span class="comment">// Null item at the beginning should be accounted into m_1stNullItemsBeginCount.</span></div>
+<div class="line"><a name="l10395"></a><span class="lineno">10395</span>&#160;        VMA_VALIDATE(suballocations1st[m_1stNullItemsBeginCount].hAllocation != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l10396"></a><span class="lineno">10396</span>&#160;        <span class="comment">// Null item at the end should be just pop_back().</span></div>
+<div class="line"><a name="l10397"></a><span class="lineno">10397</span>&#160;        VMA_VALIDATE(suballocations1st.back().hAllocation != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l10398"></a><span class="lineno">10398</span>&#160;    }</div>
+<div class="line"><a name="l10399"></a><span class="lineno">10399</span>&#160;    <span class="keywordflow">if</span>(!suballocations2nd.empty())</div>
+<div class="line"><a name="l10400"></a><span class="lineno">10400</span>&#160;    {</div>
+<div class="line"><a name="l10401"></a><span class="lineno">10401</span>&#160;        <span class="comment">// Null item at the end should be just pop_back().</span></div>
+<div class="line"><a name="l10402"></a><span class="lineno">10402</span>&#160;        VMA_VALIDATE(suballocations2nd.back().hAllocation != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l10403"></a><span class="lineno">10403</span>&#160;    }</div>
+<div class="line"><a name="l10404"></a><span class="lineno">10404</span>&#160; </div>
+<div class="line"><a name="l10405"></a><span class="lineno">10405</span>&#160;    VMA_VALIDATE(m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount &lt;= suballocations1st.size());</div>
+<div class="line"><a name="l10406"></a><span class="lineno">10406</span>&#160;    VMA_VALIDATE(m_2ndNullItemsCount &lt;= suballocations2nd.size());</div>
+<div class="line"><a name="l10407"></a><span class="lineno">10407</span>&#160; </div>
+<div class="line"><a name="l10408"></a><span class="lineno">10408</span>&#160;    VkDeviceSize sumUsedSize = 0;</div>
+<div class="line"><a name="l10409"></a><span class="lineno">10409</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc1stCount = suballocations1st.size();</div>
+<div class="line"><a name="l10410"></a><span class="lineno">10410</span>&#160;    VkDeviceSize offset = VMA_DEBUG_MARGIN;</div>
+<div class="line"><a name="l10411"></a><span class="lineno">10411</span>&#160; </div>
+<div class="line"><a name="l10412"></a><span class="lineno">10412</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
+<div class="line"><a name="l10413"></a><span class="lineno">10413</span>&#160;    {</div>
+<div class="line"><a name="l10414"></a><span class="lineno">10414</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc2ndCount = suballocations2nd.size();</div>
+<div class="line"><a name="l10415"></a><span class="lineno">10415</span>&#160;        <span class="keywordtype">size_t</span> nullItem2ndCount = 0;</div>
+<div class="line"><a name="l10416"></a><span class="lineno">10416</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; suballoc2ndCount; ++i)</div>
+<div class="line"><a name="l10417"></a><span class="lineno">10417</span>&#160;        {</div>
+<div class="line"><a name="l10418"></a><span class="lineno">10418</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[i];</div>
+<div class="line"><a name="l10419"></a><span class="lineno">10419</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">bool</span> currFree = (suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l10420"></a><span class="lineno">10420</span>&#160; </div>
+<div class="line"><a name="l10421"></a><span class="lineno">10421</span>&#160;            VMA_VALIDATE(currFree == (suballoc.hAllocation == VK_NULL_HANDLE));</div>
+<div class="line"><a name="l10422"></a><span class="lineno">10422</span>&#160;            VMA_VALIDATE(suballoc.offset &gt;= offset);</div>
+<div class="line"><a name="l10423"></a><span class="lineno">10423</span>&#160; </div>
+<div class="line"><a name="l10424"></a><span class="lineno">10424</span>&#160;            <span class="keywordflow">if</span>(!currFree)</div>
+<div class="line"><a name="l10425"></a><span class="lineno">10425</span>&#160;            {</div>
+<div class="line"><a name="l10426"></a><span class="lineno">10426</span>&#160;                VMA_VALIDATE(suballoc.hAllocation-&gt;GetOffset() == suballoc.offset);</div>
+<div class="line"><a name="l10427"></a><span class="lineno">10427</span>&#160;                VMA_VALIDATE(suballoc.hAllocation-&gt;GetSize() == suballoc.size);</div>
+<div class="line"><a name="l10428"></a><span class="lineno">10428</span>&#160;                sumUsedSize += suballoc.size;</div>
+<div class="line"><a name="l10429"></a><span class="lineno">10429</span>&#160;            }</div>
+<div class="line"><a name="l10430"></a><span class="lineno">10430</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10431"></a><span class="lineno">10431</span>&#160;            {</div>
+<div class="line"><a name="l10432"></a><span class="lineno">10432</span>&#160;                ++nullItem2ndCount;</div>
+<div class="line"><a name="l10433"></a><span class="lineno">10433</span>&#160;            }</div>
+<div class="line"><a name="l10434"></a><span class="lineno">10434</span>&#160; </div>
+<div class="line"><a name="l10435"></a><span class="lineno">10435</span>&#160;            offset = suballoc.offset + suballoc.size + VMA_DEBUG_MARGIN;</div>
+<div class="line"><a name="l10436"></a><span class="lineno">10436</span>&#160;        }</div>
+<div class="line"><a name="l10437"></a><span class="lineno">10437</span>&#160; </div>
+<div class="line"><a name="l10438"></a><span class="lineno">10438</span>&#160;        VMA_VALIDATE(nullItem2ndCount == m_2ndNullItemsCount);</div>
+<div class="line"><a name="l10439"></a><span class="lineno">10439</span>&#160;    }</div>
+<div class="line"><a name="l10440"></a><span class="lineno">10440</span>&#160; </div>
+<div class="line"><a name="l10441"></a><span class="lineno">10441</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; m_1stNullItemsBeginCount; ++i)</div>
+<div class="line"><a name="l10442"></a><span class="lineno">10442</span>&#160;    {</div>
+<div class="line"><a name="l10443"></a><span class="lineno">10443</span>&#160;        <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[i];</div>
+<div class="line"><a name="l10444"></a><span class="lineno">10444</span>&#160;        VMA_VALIDATE(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE &amp;&amp;</div>
+<div class="line"><a name="l10445"></a><span class="lineno">10445</span>&#160;            suballoc.hAllocation == VK_NULL_HANDLE);</div>
+<div class="line"><a name="l10446"></a><span class="lineno">10446</span>&#160;    }</div>
+<div class="line"><a name="l10447"></a><span class="lineno">10447</span>&#160; </div>
+<div class="line"><a name="l10448"></a><span class="lineno">10448</span>&#160;    <span class="keywordtype">size_t</span> nullItem1stCount = m_1stNullItemsBeginCount;</div>
+<div class="line"><a name="l10449"></a><span class="lineno">10449</span>&#160; </div>
+<div class="line"><a name="l10450"></a><span class="lineno">10450</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_1stNullItemsBeginCount; i &lt; suballoc1stCount; ++i)</div>
+<div class="line"><a name="l10451"></a><span class="lineno">10451</span>&#160;    {</div>
+<div class="line"><a name="l10452"></a><span class="lineno">10452</span>&#160;        <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[i];</div>
+<div class="line"><a name="l10453"></a><span class="lineno">10453</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">bool</span> currFree = (suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l10454"></a><span class="lineno">10454</span>&#160; </div>
+<div class="line"><a name="l10455"></a><span class="lineno">10455</span>&#160;        VMA_VALIDATE(currFree == (suballoc.hAllocation == VK_NULL_HANDLE));</div>
+<div class="line"><a name="l10456"></a><span class="lineno">10456</span>&#160;        VMA_VALIDATE(suballoc.offset &gt;= offset);</div>
+<div class="line"><a name="l10457"></a><span class="lineno">10457</span>&#160;        VMA_VALIDATE(i &gt;= m_1stNullItemsBeginCount || currFree);</div>
+<div class="line"><a name="l10458"></a><span class="lineno">10458</span>&#160; </div>
+<div class="line"><a name="l10459"></a><span class="lineno">10459</span>&#160;        <span class="keywordflow">if</span>(!currFree)</div>
+<div class="line"><a name="l10460"></a><span class="lineno">10460</span>&#160;        {</div>
+<div class="line"><a name="l10461"></a><span class="lineno">10461</span>&#160;            VMA_VALIDATE(suballoc.hAllocation-&gt;GetOffset() == suballoc.offset);</div>
+<div class="line"><a name="l10462"></a><span class="lineno">10462</span>&#160;            VMA_VALIDATE(suballoc.hAllocation-&gt;GetSize() == suballoc.size);</div>
+<div class="line"><a name="l10463"></a><span class="lineno">10463</span>&#160;            sumUsedSize += suballoc.size;</div>
+<div class="line"><a name="l10464"></a><span class="lineno">10464</span>&#160;        }</div>
+<div class="line"><a name="l10465"></a><span class="lineno">10465</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10466"></a><span class="lineno">10466</span>&#160;        {</div>
+<div class="line"><a name="l10467"></a><span class="lineno">10467</span>&#160;            ++nullItem1stCount;</div>
+<div class="line"><a name="l10468"></a><span class="lineno">10468</span>&#160;        }</div>
+<div class="line"><a name="l10469"></a><span class="lineno">10469</span>&#160; </div>
+<div class="line"><a name="l10470"></a><span class="lineno">10470</span>&#160;        offset = suballoc.offset + suballoc.size + VMA_DEBUG_MARGIN;</div>
+<div class="line"><a name="l10471"></a><span class="lineno">10471</span>&#160;    }</div>
+<div class="line"><a name="l10472"></a><span class="lineno">10472</span>&#160;    VMA_VALIDATE(nullItem1stCount == m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount);</div>
+<div class="line"><a name="l10473"></a><span class="lineno">10473</span>&#160; </div>
+<div class="line"><a name="l10474"></a><span class="lineno">10474</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
+<div class="line"><a name="l10475"></a><span class="lineno">10475</span>&#160;    {</div>
+<div class="line"><a name="l10476"></a><span class="lineno">10476</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc2ndCount = suballocations2nd.size();</div>
+<div class="line"><a name="l10477"></a><span class="lineno">10477</span>&#160;        <span class="keywordtype">size_t</span> nullItem2ndCount = 0;</div>
+<div class="line"><a name="l10478"></a><span class="lineno">10478</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = suballoc2ndCount; i--; )</div>
+<div class="line"><a name="l10479"></a><span class="lineno">10479</span>&#160;        {</div>
+<div class="line"><a name="l10480"></a><span class="lineno">10480</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[i];</div>
+<div class="line"><a name="l10481"></a><span class="lineno">10481</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">bool</span> currFree = (suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l10482"></a><span class="lineno">10482</span>&#160; </div>
+<div class="line"><a name="l10483"></a><span class="lineno">10483</span>&#160;            VMA_VALIDATE(currFree == (suballoc.hAllocation == VK_NULL_HANDLE));</div>
+<div class="line"><a name="l10484"></a><span class="lineno">10484</span>&#160;            VMA_VALIDATE(suballoc.offset &gt;= offset);</div>
+<div class="line"><a name="l10485"></a><span class="lineno">10485</span>&#160; </div>
+<div class="line"><a name="l10486"></a><span class="lineno">10486</span>&#160;            <span class="keywordflow">if</span>(!currFree)</div>
+<div class="line"><a name="l10487"></a><span class="lineno">10487</span>&#160;            {</div>
+<div class="line"><a name="l10488"></a><span class="lineno">10488</span>&#160;                VMA_VALIDATE(suballoc.hAllocation-&gt;GetOffset() == suballoc.offset);</div>
+<div class="line"><a name="l10489"></a><span class="lineno">10489</span>&#160;                VMA_VALIDATE(suballoc.hAllocation-&gt;GetSize() == suballoc.size);</div>
+<div class="line"><a name="l10490"></a><span class="lineno">10490</span>&#160;                sumUsedSize += suballoc.size;</div>
+<div class="line"><a name="l10491"></a><span class="lineno">10491</span>&#160;            }</div>
+<div class="line"><a name="l10492"></a><span class="lineno">10492</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10493"></a><span class="lineno">10493</span>&#160;            {</div>
+<div class="line"><a name="l10494"></a><span class="lineno">10494</span>&#160;                ++nullItem2ndCount;</div>
+<div class="line"><a name="l10495"></a><span class="lineno">10495</span>&#160;            }</div>
+<div class="line"><a name="l10496"></a><span class="lineno">10496</span>&#160; </div>
+<div class="line"><a name="l10497"></a><span class="lineno">10497</span>&#160;            offset = suballoc.offset + suballoc.size + VMA_DEBUG_MARGIN;</div>
+<div class="line"><a name="l10498"></a><span class="lineno">10498</span>&#160;        }</div>
+<div class="line"><a name="l10499"></a><span class="lineno">10499</span>&#160; </div>
+<div class="line"><a name="l10500"></a><span class="lineno">10500</span>&#160;        VMA_VALIDATE(nullItem2ndCount == m_2ndNullItemsCount);</div>
+<div class="line"><a name="l10501"></a><span class="lineno">10501</span>&#160;    }</div>
+<div class="line"><a name="l10502"></a><span class="lineno">10502</span>&#160; </div>
+<div class="line"><a name="l10503"></a><span class="lineno">10503</span>&#160;    VMA_VALIDATE(offset &lt;= GetSize());</div>
+<div class="line"><a name="l10504"></a><span class="lineno">10504</span>&#160;    VMA_VALIDATE(m_SumFreeSize == GetSize() - sumUsedSize);</div>
+<div class="line"><a name="l10505"></a><span class="lineno">10505</span>&#160; </div>
+<div class="line"><a name="l10506"></a><span class="lineno">10506</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l10507"></a><span class="lineno">10507</span>&#160;}</div>
+<div class="line"><a name="l10508"></a><span class="lineno">10508</span>&#160; </div>
+<div class="line"><a name="l10509"></a><span class="lineno">10509</span>&#160;<span class="keywordtype">size_t</span> VmaBlockMetadata_Linear::GetAllocationCount()<span class="keyword"> const</span></div>
+<div class="line"><a name="l10510"></a><span class="lineno">10510</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l10511"></a><span class="lineno">10511</span>&#160;    <span class="keywordflow">return</span> AccessSuballocations1st().size() - (m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount) +</div>
+<div class="line"><a name="l10512"></a><span class="lineno">10512</span>&#160;        AccessSuballocations2nd().size() - m_2ndNullItemsCount;</div>
+<div class="line"><a name="l10513"></a><span class="lineno">10513</span>&#160;}</div>
+<div class="line"><a name="l10514"></a><span class="lineno">10514</span>&#160; </div>
+<div class="line"><a name="l10515"></a><span class="lineno">10515</span>&#160;VkDeviceSize VmaBlockMetadata_Linear::GetUnusedRangeSizeMax()<span class="keyword"> const</span></div>
+<div class="line"><a name="l10516"></a><span class="lineno">10516</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l10517"></a><span class="lineno">10517</span>&#160;    <span class="keyword">const</span> VkDeviceSize size = GetSize();</div>
+<div class="line"><a name="l10518"></a><span class="lineno">10518</span>&#160; </div>
+<div class="line"><a name="l10519"></a><span class="lineno">10519</span>&#160;    <span class="comment">/*</span></div>
+<div class="line"><a name="l10520"></a><span class="lineno">10520</span>&#160;<span class="comment">    We don&#39;t consider gaps inside allocation vectors with freed allocations because</span></div>
+<div class="line"><a name="l10521"></a><span class="lineno">10521</span>&#160;<span class="comment">    they are not suitable for reuse in linear allocator. We consider only space that</span></div>
+<div class="line"><a name="l10522"></a><span class="lineno">10522</span>&#160;<span class="comment">    is available for new allocations.</span></div>
+<div class="line"><a name="l10523"></a><span class="lineno">10523</span>&#160;<span class="comment">    */</span></div>
+<div class="line"><a name="l10524"></a><span class="lineno">10524</span>&#160;    <span class="keywordflow">if</span>(IsEmpty())</div>
+<div class="line"><a name="l10525"></a><span class="lineno">10525</span>&#160;    {</div>
+<div class="line"><a name="l10526"></a><span class="lineno">10526</span>&#160;        <span class="keywordflow">return</span> size;</div>
+<div class="line"><a name="l10527"></a><span class="lineno">10527</span>&#160;    }</div>
+<div class="line"><a name="l10528"></a><span class="lineno">10528</span>&#160; </div>
+<div class="line"><a name="l10529"></a><span class="lineno">10529</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
+<div class="line"><a name="l10530"></a><span class="lineno">10530</span>&#160; </div>
+<div class="line"><a name="l10531"></a><span class="lineno">10531</span>&#160;    <span class="keywordflow">switch</span>(m_2ndVectorMode)</div>
+<div class="line"><a name="l10532"></a><span class="lineno">10532</span>&#160;    {</div>
+<div class="line"><a name="l10533"></a><span class="lineno">10533</span>&#160;    <span class="keywordflow">case</span> SECOND_VECTOR_EMPTY:</div>
+<div class="line"><a name="l10534"></a><span class="lineno">10534</span>&#160;        <span class="comment">/*</span></div>
+<div class="line"><a name="l10535"></a><span class="lineno">10535</span>&#160;<span class="comment">        Available space is after end of 1st, as well as before beginning of 1st (which</span></div>
+<div class="line"><a name="l10536"></a><span class="lineno">10536</span>&#160;<span class="comment">        would make it a ring buffer).</span></div>
+<div class="line"><a name="l10537"></a><span class="lineno">10537</span>&#160;<span class="comment">        */</span></div>
+<div class="line"><a name="l10538"></a><span class="lineno">10538</span>&#160;        {</div>
+<div class="line"><a name="l10539"></a><span class="lineno">10539</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballocations1stCount = suballocations1st.size();</div>
+<div class="line"><a name="l10540"></a><span class="lineno">10540</span>&#160;            VMA_ASSERT(suballocations1stCount &gt; m_1stNullItemsBeginCount);</div>
+<div class="line"><a name="l10541"></a><span class="lineno">10541</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; firstSuballoc = suballocations1st[m_1stNullItemsBeginCount];</div>
+<div class="line"><a name="l10542"></a><span class="lineno">10542</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; lastSuballoc  = suballocations1st[suballocations1stCount - 1];</div>
+<div class="line"><a name="l10543"></a><span class="lineno">10543</span>&#160;            <span class="keywordflow">return</span> VMA_MAX(</div>
+<div class="line"><a name="l10544"></a><span class="lineno">10544</span>&#160;                firstSuballoc.offset,</div>
+<div class="line"><a name="l10545"></a><span class="lineno">10545</span>&#160;                size - (lastSuballoc.offset + lastSuballoc.size));</div>
+<div class="line"><a name="l10546"></a><span class="lineno">10546</span>&#160;        }</div>
+<div class="line"><a name="l10547"></a><span class="lineno">10547</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l10548"></a><span class="lineno">10548</span>&#160; </div>
+<div class="line"><a name="l10549"></a><span class="lineno">10549</span>&#160;    <span class="keywordflow">case</span> SECOND_VECTOR_RING_BUFFER:</div>
+<div class="line"><a name="l10550"></a><span class="lineno">10550</span>&#160;        <span class="comment">/*</span></div>
+<div class="line"><a name="l10551"></a><span class="lineno">10551</span>&#160;<span class="comment">        Available space is only between end of 2nd and beginning of 1st.</span></div>
+<div class="line"><a name="l10552"></a><span class="lineno">10552</span>&#160;<span class="comment">        */</span></div>
+<div class="line"><a name="l10553"></a><span class="lineno">10553</span>&#160;        {</div>
+<div class="line"><a name="l10554"></a><span class="lineno">10554</span>&#160;            <span class="keyword">const</span> SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
+<div class="line"><a name="l10555"></a><span class="lineno">10555</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; lastSuballoc2nd = suballocations2nd.back();</div>
+<div class="line"><a name="l10556"></a><span class="lineno">10556</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; firstSuballoc1st = suballocations1st[m_1stNullItemsBeginCount];</div>
+<div class="line"><a name="l10557"></a><span class="lineno">10557</span>&#160;            <span class="keywordflow">return</span> firstSuballoc1st.offset - (lastSuballoc2nd.offset + lastSuballoc2nd.size);</div>
+<div class="line"><a name="l10558"></a><span class="lineno">10558</span>&#160;        }</div>
+<div class="line"><a name="l10559"></a><span class="lineno">10559</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l10560"></a><span class="lineno">10560</span>&#160; </div>
+<div class="line"><a name="l10561"></a><span class="lineno">10561</span>&#160;    <span class="keywordflow">case</span> SECOND_VECTOR_DOUBLE_STACK:</div>
+<div class="line"><a name="l10562"></a><span class="lineno">10562</span>&#160;        <span class="comment">/*</span></div>
+<div class="line"><a name="l10563"></a><span class="lineno">10563</span>&#160;<span class="comment">        Available space is only between end of 1st and top of 2nd.</span></div>
+<div class="line"><a name="l10564"></a><span class="lineno">10564</span>&#160;<span class="comment">        */</span></div>
+<div class="line"><a name="l10565"></a><span class="lineno">10565</span>&#160;        {</div>
+<div class="line"><a name="l10566"></a><span class="lineno">10566</span>&#160;            <span class="keyword">const</span> SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
+<div class="line"><a name="l10567"></a><span class="lineno">10567</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; topSuballoc2nd = suballocations2nd.back();</div>
+<div class="line"><a name="l10568"></a><span class="lineno">10568</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; lastSuballoc1st = suballocations1st.back();</div>
+<div class="line"><a name="l10569"></a><span class="lineno">10569</span>&#160;            <span class="keywordflow">return</span> topSuballoc2nd.offset - (lastSuballoc1st.offset + lastSuballoc1st.size);</div>
+<div class="line"><a name="l10570"></a><span class="lineno">10570</span>&#160;        }</div>
+<div class="line"><a name="l10571"></a><span class="lineno">10571</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l10572"></a><span class="lineno">10572</span>&#160; </div>
+<div class="line"><a name="l10573"></a><span class="lineno">10573</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l10574"></a><span class="lineno">10574</span>&#160;        VMA_ASSERT(0);</div>
+<div class="line"><a name="l10575"></a><span class="lineno">10575</span>&#160;        <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l10576"></a><span class="lineno">10576</span>&#160;    }</div>
+<div class="line"><a name="l10577"></a><span class="lineno">10577</span>&#160;}</div>
+<div class="line"><a name="l10578"></a><span class="lineno">10578</span>&#160; </div>
+<div class="line"><a name="l10579"></a><span class="lineno">10579</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::CalcAllocationStatInfo(<a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a>&amp; outInfo)<span class="keyword"> const</span></div>
+<div class="line"><a name="l10580"></a><span class="lineno">10580</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l10581"></a><span class="lineno">10581</span>&#160;    <span class="keyword">const</span> VkDeviceSize size = GetSize();</div>
+<div class="line"><a name="l10582"></a><span class="lineno">10582</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
+<div class="line"><a name="l10583"></a><span class="lineno">10583</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
+<div class="line"><a name="l10584"></a><span class="lineno">10584</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc1stCount = suballocations1st.size();</div>
+<div class="line"><a name="l10585"></a><span class="lineno">10585</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc2ndCount = suballocations2nd.size();</div>
+<div class="line"><a name="l10586"></a><span class="lineno">10586</span>&#160; </div>
+<div class="line"><a name="l10587"></a><span class="lineno">10587</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a> = 1;</div>
+<div class="line"><a name="l10588"></a><span class="lineno">10588</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a> = (uint32_t)GetAllocationCount();</div>
+<div class="line"><a name="l10589"></a><span class="lineno">10589</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a> = 0;</div>
+<div class="line"><a name="l10590"></a><span class="lineno">10590</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a> = 0;</div>
+<div class="line"><a name="l10591"></a><span class="lineno">10591</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = UINT64_MAX;</div>
+<div class="line"><a name="l10592"></a><span class="lineno">10592</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a> = 0;</div>
+<div class="line"><a name="l10593"></a><span class="lineno">10593</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = UINT64_MAX;</div>
+<div class="line"><a name="l10594"></a><span class="lineno">10594</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = 0;</div>
+<div class="line"><a name="l10595"></a><span class="lineno">10595</span>&#160; </div>
+<div class="line"><a name="l10596"></a><span class="lineno">10596</span>&#160;    VkDeviceSize lastOffset = 0;</div>
+<div class="line"><a name="l10597"></a><span class="lineno">10597</span>&#160; </div>
+<div class="line"><a name="l10598"></a><span class="lineno">10598</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
+<div class="line"><a name="l10599"></a><span class="lineno">10599</span>&#160;    {</div>
+<div class="line"><a name="l10600"></a><span class="lineno">10600</span>&#160;        <span class="keyword">const</span> VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset;</div>
+<div class="line"><a name="l10601"></a><span class="lineno">10601</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = 0;</div>
+<div class="line"><a name="l10602"></a><span class="lineno">10602</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
+<div class="line"><a name="l10603"></a><span class="lineno">10603</span>&#160;        {</div>
+<div class="line"><a name="l10604"></a><span class="lineno">10604</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAllocIndex to the end.</span></div>
+<div class="line"><a name="l10605"></a><span class="lineno">10605</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex &lt; suballoc2ndCount &amp;&amp;</div>
+<div class="line"><a name="l10606"></a><span class="lineno">10606</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l10607"></a><span class="lineno">10607</span>&#160;            {</div>
+<div class="line"><a name="l10608"></a><span class="lineno">10608</span>&#160;                ++nextAlloc2ndIndex;</div>
+<div class="line"><a name="l10609"></a><span class="lineno">10609</span>&#160;            }</div>
+<div class="line"><a name="l10610"></a><span class="lineno">10610</span>&#160; </div>
+<div class="line"><a name="l10611"></a><span class="lineno">10611</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
+<div class="line"><a name="l10612"></a><span class="lineno">10612</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex &lt; suballoc2ndCount)</div>
+<div class="line"><a name="l10613"></a><span class="lineno">10613</span>&#160;            {</div>
+<div class="line"><a name="l10614"></a><span class="lineno">10614</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
+<div class="line"><a name="l10615"></a><span class="lineno">10615</span>&#160; </div>
+<div class="line"><a name="l10616"></a><span class="lineno">10616</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
+<div class="line"><a name="l10617"></a><span class="lineno">10617</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
+<div class="line"><a name="l10618"></a><span class="lineno">10618</span>&#160;                {</div>
+<div class="line"><a name="l10619"></a><span class="lineno">10619</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
+<div class="line"><a name="l10620"></a><span class="lineno">10620</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
+<div class="line"><a name="l10621"></a><span class="lineno">10621</span>&#160;                    ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
+<div class="line"><a name="l10622"></a><span class="lineno">10622</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusedRangeSize;</div>
+<div class="line"><a name="l10623"></a><span class="lineno">10623</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10624"></a><span class="lineno">10624</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10625"></a><span class="lineno">10625</span>&#160;                }</div>
+<div class="line"><a name="l10626"></a><span class="lineno">10626</span>&#160; </div>
+<div class="line"><a name="l10627"></a><span class="lineno">10627</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
+<div class="line"><a name="l10628"></a><span class="lineno">10628</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
+<div class="line"><a name="l10629"></a><span class="lineno">10629</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a> += suballoc.size;</div>
+<div class="line"><a name="l10630"></a><span class="lineno">10630</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>, suballoc.size);</div>
+<div class="line"><a name="l10631"></a><span class="lineno">10631</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a>, suballoc.size);</div>
+<div class="line"><a name="l10632"></a><span class="lineno">10632</span>&#160; </div>
+<div class="line"><a name="l10633"></a><span class="lineno">10633</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
+<div class="line"><a name="l10634"></a><span class="lineno">10634</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
+<div class="line"><a name="l10635"></a><span class="lineno">10635</span>&#160;                ++nextAlloc2ndIndex;</div>
+<div class="line"><a name="l10636"></a><span class="lineno">10636</span>&#160;            }</div>
+<div class="line"><a name="l10637"></a><span class="lineno">10637</span>&#160;            <span class="comment">// We are at the end.</span></div>
+<div class="line"><a name="l10638"></a><span class="lineno">10638</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10639"></a><span class="lineno">10639</span>&#160;            {</div>
+<div class="line"><a name="l10640"></a><span class="lineno">10640</span>&#160;                <span class="comment">// There is free space from lastOffset to freeSpace2ndTo1stEnd.</span></div>
+<div class="line"><a name="l10641"></a><span class="lineno">10641</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
+<div class="line"><a name="l10642"></a><span class="lineno">10642</span>&#160;                {</div>
+<div class="line"><a name="l10643"></a><span class="lineno">10643</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = freeSpace2ndTo1stEnd - lastOffset;</div>
+<div class="line"><a name="l10644"></a><span class="lineno">10644</span>&#160;                    ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
+<div class="line"><a name="l10645"></a><span class="lineno">10645</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusedRangeSize;</div>
+<div class="line"><a name="l10646"></a><span class="lineno">10646</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10647"></a><span class="lineno">10647</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10648"></a><span class="lineno">10648</span>&#160;               }</div>
+<div class="line"><a name="l10649"></a><span class="lineno">10649</span>&#160; </div>
+<div class="line"><a name="l10650"></a><span class="lineno">10650</span>&#160;                <span class="comment">// End of loop.</span></div>
+<div class="line"><a name="l10651"></a><span class="lineno">10651</span>&#160;                lastOffset = freeSpace2ndTo1stEnd;</div>
+<div class="line"><a name="l10652"></a><span class="lineno">10652</span>&#160;            }</div>
+<div class="line"><a name="l10653"></a><span class="lineno">10653</span>&#160;        }</div>
+<div class="line"><a name="l10654"></a><span class="lineno">10654</span>&#160;    }</div>
+<div class="line"><a name="l10655"></a><span class="lineno">10655</span>&#160; </div>
+<div class="line"><a name="l10656"></a><span class="lineno">10656</span>&#160;    <span class="keywordtype">size_t</span> nextAlloc1stIndex = m_1stNullItemsBeginCount;</div>
+<div class="line"><a name="l10657"></a><span class="lineno">10657</span>&#160;    <span class="keyword">const</span> VkDeviceSize freeSpace1stTo2ndEnd =</div>
+<div class="line"><a name="l10658"></a><span class="lineno">10658</span>&#160;        m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ? suballocations2nd.back().offset : size;</div>
+<div class="line"><a name="l10659"></a><span class="lineno">10659</span>&#160;    <span class="keywordflow">while</span>(lastOffset &lt; freeSpace1stTo2ndEnd)</div>
+<div class="line"><a name="l10660"></a><span class="lineno">10660</span>&#160;    {</div>
+<div class="line"><a name="l10661"></a><span class="lineno">10661</span>&#160;        <span class="comment">// Find next non-null allocation or move nextAllocIndex to the end.</span></div>
+<div class="line"><a name="l10662"></a><span class="lineno">10662</span>&#160;        <span class="keywordflow">while</span>(nextAlloc1stIndex &lt; suballoc1stCount &amp;&amp;</div>
+<div class="line"><a name="l10663"></a><span class="lineno">10663</span>&#160;            suballocations1st[nextAlloc1stIndex].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l10664"></a><span class="lineno">10664</span>&#160;        {</div>
+<div class="line"><a name="l10665"></a><span class="lineno">10665</span>&#160;            ++nextAlloc1stIndex;</div>
+<div class="line"><a name="l10666"></a><span class="lineno">10666</span>&#160;        }</div>
+<div class="line"><a name="l10667"></a><span class="lineno">10667</span>&#160; </div>
+<div class="line"><a name="l10668"></a><span class="lineno">10668</span>&#160;        <span class="comment">// Found non-null allocation.</span></div>
+<div class="line"><a name="l10669"></a><span class="lineno">10669</span>&#160;        <span class="keywordflow">if</span>(nextAlloc1stIndex &lt; suballoc1stCount)</div>
+<div class="line"><a name="l10670"></a><span class="lineno">10670</span>&#160;        {</div>
+<div class="line"><a name="l10671"></a><span class="lineno">10671</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[nextAlloc1stIndex];</div>
+<div class="line"><a name="l10672"></a><span class="lineno">10672</span>&#160; </div>
+<div class="line"><a name="l10673"></a><span class="lineno">10673</span>&#160;            <span class="comment">// 1. Process free space before this allocation.</span></div>
+<div class="line"><a name="l10674"></a><span class="lineno">10674</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
+<div class="line"><a name="l10675"></a><span class="lineno">10675</span>&#160;            {</div>
+<div class="line"><a name="l10676"></a><span class="lineno">10676</span>&#160;                <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
+<div class="line"><a name="l10677"></a><span class="lineno">10677</span>&#160;                <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
+<div class="line"><a name="l10678"></a><span class="lineno">10678</span>&#160;                ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
+<div class="line"><a name="l10679"></a><span class="lineno">10679</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusedRangeSize;</div>
+<div class="line"><a name="l10680"></a><span class="lineno">10680</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10681"></a><span class="lineno">10681</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10682"></a><span class="lineno">10682</span>&#160;            }</div>
+<div class="line"><a name="l10683"></a><span class="lineno">10683</span>&#160; </div>
+<div class="line"><a name="l10684"></a><span class="lineno">10684</span>&#160;            <span class="comment">// 2. Process this allocation.</span></div>
+<div class="line"><a name="l10685"></a><span class="lineno">10685</span>&#160;            <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
+<div class="line"><a name="l10686"></a><span class="lineno">10686</span>&#160;            outInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a> += suballoc.size;</div>
+<div class="line"><a name="l10687"></a><span class="lineno">10687</span>&#160;            outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>, suballoc.size);</div>
+<div class="line"><a name="l10688"></a><span class="lineno">10688</span>&#160;            outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a>, suballoc.size);</div>
+<div class="line"><a name="l10689"></a><span class="lineno">10689</span>&#160; </div>
+<div class="line"><a name="l10690"></a><span class="lineno">10690</span>&#160;            <span class="comment">// 3. Prepare for next iteration.</span></div>
+<div class="line"><a name="l10691"></a><span class="lineno">10691</span>&#160;            lastOffset = suballoc.offset + suballoc.size;</div>
+<div class="line"><a name="l10692"></a><span class="lineno">10692</span>&#160;            ++nextAlloc1stIndex;</div>
+<div class="line"><a name="l10693"></a><span class="lineno">10693</span>&#160;        }</div>
+<div class="line"><a name="l10694"></a><span class="lineno">10694</span>&#160;        <span class="comment">// We are at the end.</span></div>
+<div class="line"><a name="l10695"></a><span class="lineno">10695</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10696"></a><span class="lineno">10696</span>&#160;        {</div>
+<div class="line"><a name="l10697"></a><span class="lineno">10697</span>&#160;            <span class="comment">// There is free space from lastOffset to freeSpace1stTo2ndEnd.</span></div>
+<div class="line"><a name="l10698"></a><span class="lineno">10698</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; freeSpace1stTo2ndEnd)</div>
+<div class="line"><a name="l10699"></a><span class="lineno">10699</span>&#160;            {</div>
+<div class="line"><a name="l10700"></a><span class="lineno">10700</span>&#160;                <span class="keyword">const</span> VkDeviceSize unusedRangeSize = freeSpace1stTo2ndEnd - lastOffset;</div>
+<div class="line"><a name="l10701"></a><span class="lineno">10701</span>&#160;                ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
+<div class="line"><a name="l10702"></a><span class="lineno">10702</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusedRangeSize;</div>
+<div class="line"><a name="l10703"></a><span class="lineno">10703</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10704"></a><span class="lineno">10704</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10705"></a><span class="lineno">10705</span>&#160;           }</div>
+<div class="line"><a name="l10706"></a><span class="lineno">10706</span>&#160; </div>
+<div class="line"><a name="l10707"></a><span class="lineno">10707</span>&#160;            <span class="comment">// End of loop.</span></div>
+<div class="line"><a name="l10708"></a><span class="lineno">10708</span>&#160;            lastOffset = freeSpace1stTo2ndEnd;</div>
+<div class="line"><a name="l10709"></a><span class="lineno">10709</span>&#160;        }</div>
+<div class="line"><a name="l10710"></a><span class="lineno">10710</span>&#160;    }</div>
+<div class="line"><a name="l10711"></a><span class="lineno">10711</span>&#160; </div>
+<div class="line"><a name="l10712"></a><span class="lineno">10712</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
+<div class="line"><a name="l10713"></a><span class="lineno">10713</span>&#160;    {</div>
+<div class="line"><a name="l10714"></a><span class="lineno">10714</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = suballocations2nd.size() - 1;</div>
+<div class="line"><a name="l10715"></a><span class="lineno">10715</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; size)</div>
+<div class="line"><a name="l10716"></a><span class="lineno">10716</span>&#160;        {</div>
+<div class="line"><a name="l10717"></a><span class="lineno">10717</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAllocIndex to the end.</span></div>
+<div class="line"><a name="l10718"></a><span class="lineno">10718</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex != SIZE_MAX &amp;&amp;</div>
+<div class="line"><a name="l10719"></a><span class="lineno">10719</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l10720"></a><span class="lineno">10720</span>&#160;            {</div>
+<div class="line"><a name="l10721"></a><span class="lineno">10721</span>&#160;                --nextAlloc2ndIndex;</div>
+<div class="line"><a name="l10722"></a><span class="lineno">10722</span>&#160;            }</div>
+<div class="line"><a name="l10723"></a><span class="lineno">10723</span>&#160; </div>
+<div class="line"><a name="l10724"></a><span class="lineno">10724</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
+<div class="line"><a name="l10725"></a><span class="lineno">10725</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex != SIZE_MAX)</div>
+<div class="line"><a name="l10726"></a><span class="lineno">10726</span>&#160;            {</div>
+<div class="line"><a name="l10727"></a><span class="lineno">10727</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
+<div class="line"><a name="l10728"></a><span class="lineno">10728</span>&#160; </div>
+<div class="line"><a name="l10729"></a><span class="lineno">10729</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
+<div class="line"><a name="l10730"></a><span class="lineno">10730</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
+<div class="line"><a name="l10731"></a><span class="lineno">10731</span>&#160;                {</div>
+<div class="line"><a name="l10732"></a><span class="lineno">10732</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
+<div class="line"><a name="l10733"></a><span class="lineno">10733</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
+<div class="line"><a name="l10734"></a><span class="lineno">10734</span>&#160;                    ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
+<div class="line"><a name="l10735"></a><span class="lineno">10735</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusedRangeSize;</div>
+<div class="line"><a name="l10736"></a><span class="lineno">10736</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10737"></a><span class="lineno">10737</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10738"></a><span class="lineno">10738</span>&#160;                }</div>
+<div class="line"><a name="l10739"></a><span class="lineno">10739</span>&#160; </div>
+<div class="line"><a name="l10740"></a><span class="lineno">10740</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
+<div class="line"><a name="l10741"></a><span class="lineno">10741</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
+<div class="line"><a name="l10742"></a><span class="lineno">10742</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a> += suballoc.size;</div>
+<div class="line"><a name="l10743"></a><span class="lineno">10743</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>, suballoc.size);</div>
+<div class="line"><a name="l10744"></a><span class="lineno">10744</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a>, suballoc.size);</div>
+<div class="line"><a name="l10745"></a><span class="lineno">10745</span>&#160; </div>
+<div class="line"><a name="l10746"></a><span class="lineno">10746</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
+<div class="line"><a name="l10747"></a><span class="lineno">10747</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
+<div class="line"><a name="l10748"></a><span class="lineno">10748</span>&#160;                --nextAlloc2ndIndex;</div>
+<div class="line"><a name="l10749"></a><span class="lineno">10749</span>&#160;            }</div>
+<div class="line"><a name="l10750"></a><span class="lineno">10750</span>&#160;            <span class="comment">// We are at the end.</span></div>
+<div class="line"><a name="l10751"></a><span class="lineno">10751</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10752"></a><span class="lineno">10752</span>&#160;            {</div>
+<div class="line"><a name="l10753"></a><span class="lineno">10753</span>&#160;                <span class="comment">// There is free space from lastOffset to size.</span></div>
+<div class="line"><a name="l10754"></a><span class="lineno">10754</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; size)</div>
+<div class="line"><a name="l10755"></a><span class="lineno">10755</span>&#160;                {</div>
+<div class="line"><a name="l10756"></a><span class="lineno">10756</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = size - lastOffset;</div>
+<div class="line"><a name="l10757"></a><span class="lineno">10757</span>&#160;                    ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
+<div class="line"><a name="l10758"></a><span class="lineno">10758</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusedRangeSize;</div>
+<div class="line"><a name="l10759"></a><span class="lineno">10759</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10760"></a><span class="lineno">10760</span>&#160;                    outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10761"></a><span class="lineno">10761</span>&#160;               }</div>
+<div class="line"><a name="l10762"></a><span class="lineno">10762</span>&#160; </div>
+<div class="line"><a name="l10763"></a><span class="lineno">10763</span>&#160;                <span class="comment">// End of loop.</span></div>
+<div class="line"><a name="l10764"></a><span class="lineno">10764</span>&#160;                lastOffset = size;</div>
+<div class="line"><a name="l10765"></a><span class="lineno">10765</span>&#160;            }</div>
+<div class="line"><a name="l10766"></a><span class="lineno">10766</span>&#160;        }</div>
+<div class="line"><a name="l10767"></a><span class="lineno">10767</span>&#160;    }</div>
+<div class="line"><a name="l10768"></a><span class="lineno">10768</span>&#160; </div>
+<div class="line"><a name="l10769"></a><span class="lineno">10769</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> = size - outInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a>;</div>
+<div class="line"><a name="l10770"></a><span class="lineno">10770</span>&#160;}</div>
+<div class="line"><a name="l10771"></a><span class="lineno">10771</span>&#160; </div>
+<div class="line"><a name="l10772"></a><span class="lineno">10772</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::AddPoolStats(<a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>&amp; inoutStats)<span class="keyword"> const</span></div>
+<div class="line"><a name="l10773"></a><span class="lineno">10773</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l10774"></a><span class="lineno">10774</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
+<div class="line"><a name="l10775"></a><span class="lineno">10775</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
+<div class="line"><a name="l10776"></a><span class="lineno">10776</span>&#160;    <span class="keyword">const</span> VkDeviceSize size = GetSize();</div>
+<div class="line"><a name="l10777"></a><span class="lineno">10777</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc1stCount = suballocations1st.size();</div>
+<div class="line"><a name="l10778"></a><span class="lineno">10778</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc2ndCount = suballocations2nd.size();</div>
+<div class="line"><a name="l10779"></a><span class="lineno">10779</span>&#160; </div>
+<div class="line"><a name="l10780"></a><span class="lineno">10780</span>&#160;    inoutStats.<a class="code" href="struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c">size</a> += size;</div>
+<div class="line"><a name="l10781"></a><span class="lineno">10781</span>&#160; </div>
+<div class="line"><a name="l10782"></a><span class="lineno">10782</span>&#160;    VkDeviceSize lastOffset = 0;</div>
+<div class="line"><a name="l10783"></a><span class="lineno">10783</span>&#160; </div>
+<div class="line"><a name="l10784"></a><span class="lineno">10784</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
+<div class="line"><a name="l10785"></a><span class="lineno">10785</span>&#160;    {</div>
+<div class="line"><a name="l10786"></a><span class="lineno">10786</span>&#160;        <span class="keyword">const</span> VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset;</div>
+<div class="line"><a name="l10787"></a><span class="lineno">10787</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = m_1stNullItemsBeginCount;</div>
+<div class="line"><a name="l10788"></a><span class="lineno">10788</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
+<div class="line"><a name="l10789"></a><span class="lineno">10789</span>&#160;        {</div>
+<div class="line"><a name="l10790"></a><span class="lineno">10790</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAlloc2ndIndex to the end.</span></div>
+<div class="line"><a name="l10791"></a><span class="lineno">10791</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex &lt; suballoc2ndCount &amp;&amp;</div>
+<div class="line"><a name="l10792"></a><span class="lineno">10792</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l10793"></a><span class="lineno">10793</span>&#160;            {</div>
+<div class="line"><a name="l10794"></a><span class="lineno">10794</span>&#160;                ++nextAlloc2ndIndex;</div>
+<div class="line"><a name="l10795"></a><span class="lineno">10795</span>&#160;            }</div>
+<div class="line"><a name="l10796"></a><span class="lineno">10796</span>&#160; </div>
+<div class="line"><a name="l10797"></a><span class="lineno">10797</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
+<div class="line"><a name="l10798"></a><span class="lineno">10798</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex &lt; suballoc2ndCount)</div>
+<div class="line"><a name="l10799"></a><span class="lineno">10799</span>&#160;            {</div>
+<div class="line"><a name="l10800"></a><span class="lineno">10800</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
+<div class="line"><a name="l10801"></a><span class="lineno">10801</span>&#160; </div>
+<div class="line"><a name="l10802"></a><span class="lineno">10802</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
+<div class="line"><a name="l10803"></a><span class="lineno">10803</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
+<div class="line"><a name="l10804"></a><span class="lineno">10804</span>&#160;                {</div>
+<div class="line"><a name="l10805"></a><span class="lineno">10805</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
+<div class="line"><a name="l10806"></a><span class="lineno">10806</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
+<div class="line"><a name="l10807"></a><span class="lineno">10807</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> += unusedRangeSize;</div>
+<div class="line"><a name="l10808"></a><span class="lineno">10808</span>&#160;                    ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
+<div class="line"><a name="l10809"></a><span class="lineno">10809</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = VMA_MAX(inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10810"></a><span class="lineno">10810</span>&#160;                }</div>
+<div class="line"><a name="l10811"></a><span class="lineno">10811</span>&#160; </div>
+<div class="line"><a name="l10812"></a><span class="lineno">10812</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
+<div class="line"><a name="l10813"></a><span class="lineno">10813</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
+<div class="line"><a name="l10814"></a><span class="lineno">10814</span>&#160;                ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">allocationCount</a>;</div>
+<div class="line"><a name="l10815"></a><span class="lineno">10815</span>&#160; </div>
+<div class="line"><a name="l10816"></a><span class="lineno">10816</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
+<div class="line"><a name="l10817"></a><span class="lineno">10817</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
+<div class="line"><a name="l10818"></a><span class="lineno">10818</span>&#160;                ++nextAlloc2ndIndex;</div>
+<div class="line"><a name="l10819"></a><span class="lineno">10819</span>&#160;            }</div>
+<div class="line"><a name="l10820"></a><span class="lineno">10820</span>&#160;            <span class="comment">// We are at the end.</span></div>
+<div class="line"><a name="l10821"></a><span class="lineno">10821</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10822"></a><span class="lineno">10822</span>&#160;            {</div>
+<div class="line"><a name="l10823"></a><span class="lineno">10823</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
+<div class="line"><a name="l10824"></a><span class="lineno">10824</span>&#160;                {</div>
+<div class="line"><a name="l10825"></a><span class="lineno">10825</span>&#160;                    <span class="comment">// There is free space from lastOffset to freeSpace2ndTo1stEnd.</span></div>
+<div class="line"><a name="l10826"></a><span class="lineno">10826</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = freeSpace2ndTo1stEnd - lastOffset;</div>
+<div class="line"><a name="l10827"></a><span class="lineno">10827</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> += unusedRangeSize;</div>
+<div class="line"><a name="l10828"></a><span class="lineno">10828</span>&#160;                    ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
+<div class="line"><a name="l10829"></a><span class="lineno">10829</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = VMA_MAX(inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10830"></a><span class="lineno">10830</span>&#160;                }</div>
+<div class="line"><a name="l10831"></a><span class="lineno">10831</span>&#160; </div>
+<div class="line"><a name="l10832"></a><span class="lineno">10832</span>&#160;                <span class="comment">// End of loop.</span></div>
+<div class="line"><a name="l10833"></a><span class="lineno">10833</span>&#160;                lastOffset = freeSpace2ndTo1stEnd;</div>
+<div class="line"><a name="l10834"></a><span class="lineno">10834</span>&#160;            }</div>
+<div class="line"><a name="l10835"></a><span class="lineno">10835</span>&#160;        }</div>
+<div class="line"><a name="l10836"></a><span class="lineno">10836</span>&#160;    }</div>
+<div class="line"><a name="l10837"></a><span class="lineno">10837</span>&#160; </div>
+<div class="line"><a name="l10838"></a><span class="lineno">10838</span>&#160;    <span class="keywordtype">size_t</span> nextAlloc1stIndex = m_1stNullItemsBeginCount;</div>
+<div class="line"><a name="l10839"></a><span class="lineno">10839</span>&#160;    <span class="keyword">const</span> VkDeviceSize freeSpace1stTo2ndEnd =</div>
+<div class="line"><a name="l10840"></a><span class="lineno">10840</span>&#160;        m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ? suballocations2nd.back().offset : size;</div>
+<div class="line"><a name="l10841"></a><span class="lineno">10841</span>&#160;    <span class="keywordflow">while</span>(lastOffset &lt; freeSpace1stTo2ndEnd)</div>
+<div class="line"><a name="l10842"></a><span class="lineno">10842</span>&#160;    {</div>
+<div class="line"><a name="l10843"></a><span class="lineno">10843</span>&#160;        <span class="comment">// Find next non-null allocation or move nextAllocIndex to the end.</span></div>
+<div class="line"><a name="l10844"></a><span class="lineno">10844</span>&#160;        <span class="keywordflow">while</span>(nextAlloc1stIndex &lt; suballoc1stCount &amp;&amp;</div>
+<div class="line"><a name="l10845"></a><span class="lineno">10845</span>&#160;            suballocations1st[nextAlloc1stIndex].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l10846"></a><span class="lineno">10846</span>&#160;        {</div>
+<div class="line"><a name="l10847"></a><span class="lineno">10847</span>&#160;            ++nextAlloc1stIndex;</div>
+<div class="line"><a name="l10848"></a><span class="lineno">10848</span>&#160;        }</div>
+<div class="line"><a name="l10849"></a><span class="lineno">10849</span>&#160; </div>
+<div class="line"><a name="l10850"></a><span class="lineno">10850</span>&#160;        <span class="comment">// Found non-null allocation.</span></div>
+<div class="line"><a name="l10851"></a><span class="lineno">10851</span>&#160;        <span class="keywordflow">if</span>(nextAlloc1stIndex &lt; suballoc1stCount)</div>
+<div class="line"><a name="l10852"></a><span class="lineno">10852</span>&#160;        {</div>
+<div class="line"><a name="l10853"></a><span class="lineno">10853</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[nextAlloc1stIndex];</div>
+<div class="line"><a name="l10854"></a><span class="lineno">10854</span>&#160; </div>
+<div class="line"><a name="l10855"></a><span class="lineno">10855</span>&#160;            <span class="comment">// 1. Process free space before this allocation.</span></div>
+<div class="line"><a name="l10856"></a><span class="lineno">10856</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
+<div class="line"><a name="l10857"></a><span class="lineno">10857</span>&#160;            {</div>
+<div class="line"><a name="l10858"></a><span class="lineno">10858</span>&#160;                <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
+<div class="line"><a name="l10859"></a><span class="lineno">10859</span>&#160;                <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
+<div class="line"><a name="l10860"></a><span class="lineno">10860</span>&#160;                inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> += unusedRangeSize;</div>
+<div class="line"><a name="l10861"></a><span class="lineno">10861</span>&#160;                ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
+<div class="line"><a name="l10862"></a><span class="lineno">10862</span>&#160;                inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = VMA_MAX(inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10863"></a><span class="lineno">10863</span>&#160;            }</div>
+<div class="line"><a name="l10864"></a><span class="lineno">10864</span>&#160; </div>
+<div class="line"><a name="l10865"></a><span class="lineno">10865</span>&#160;            <span class="comment">// 2. Process this allocation.</span></div>
+<div class="line"><a name="l10866"></a><span class="lineno">10866</span>&#160;            <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
+<div class="line"><a name="l10867"></a><span class="lineno">10867</span>&#160;            ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">allocationCount</a>;</div>
+<div class="line"><a name="l10868"></a><span class="lineno">10868</span>&#160; </div>
+<div class="line"><a name="l10869"></a><span class="lineno">10869</span>&#160;            <span class="comment">// 3. Prepare for next iteration.</span></div>
+<div class="line"><a name="l10870"></a><span class="lineno">10870</span>&#160;            lastOffset = suballoc.offset + suballoc.size;</div>
+<div class="line"><a name="l10871"></a><span class="lineno">10871</span>&#160;            ++nextAlloc1stIndex;</div>
+<div class="line"><a name="l10872"></a><span class="lineno">10872</span>&#160;        }</div>
+<div class="line"><a name="l10873"></a><span class="lineno">10873</span>&#160;        <span class="comment">// We are at the end.</span></div>
+<div class="line"><a name="l10874"></a><span class="lineno">10874</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10875"></a><span class="lineno">10875</span>&#160;        {</div>
+<div class="line"><a name="l10876"></a><span class="lineno">10876</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; freeSpace1stTo2ndEnd)</div>
+<div class="line"><a name="l10877"></a><span class="lineno">10877</span>&#160;            {</div>
+<div class="line"><a name="l10878"></a><span class="lineno">10878</span>&#160;                <span class="comment">// There is free space from lastOffset to freeSpace1stTo2ndEnd.</span></div>
+<div class="line"><a name="l10879"></a><span class="lineno">10879</span>&#160;                <span class="keyword">const</span> VkDeviceSize unusedRangeSize = freeSpace1stTo2ndEnd - lastOffset;</div>
+<div class="line"><a name="l10880"></a><span class="lineno">10880</span>&#160;                inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> += unusedRangeSize;</div>
+<div class="line"><a name="l10881"></a><span class="lineno">10881</span>&#160;                ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
+<div class="line"><a name="l10882"></a><span class="lineno">10882</span>&#160;                inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = VMA_MAX(inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10883"></a><span class="lineno">10883</span>&#160;            }</div>
+<div class="line"><a name="l10884"></a><span class="lineno">10884</span>&#160; </div>
+<div class="line"><a name="l10885"></a><span class="lineno">10885</span>&#160;            <span class="comment">// End of loop.</span></div>
+<div class="line"><a name="l10886"></a><span class="lineno">10886</span>&#160;            lastOffset = freeSpace1stTo2ndEnd;</div>
+<div class="line"><a name="l10887"></a><span class="lineno">10887</span>&#160;        }</div>
+<div class="line"><a name="l10888"></a><span class="lineno">10888</span>&#160;    }</div>
+<div class="line"><a name="l10889"></a><span class="lineno">10889</span>&#160; </div>
+<div class="line"><a name="l10890"></a><span class="lineno">10890</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
+<div class="line"><a name="l10891"></a><span class="lineno">10891</span>&#160;    {</div>
+<div class="line"><a name="l10892"></a><span class="lineno">10892</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = suballocations2nd.size() - 1;</div>
+<div class="line"><a name="l10893"></a><span class="lineno">10893</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; size)</div>
+<div class="line"><a name="l10894"></a><span class="lineno">10894</span>&#160;        {</div>
+<div class="line"><a name="l10895"></a><span class="lineno">10895</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAlloc2ndIndex to the end.</span></div>
+<div class="line"><a name="l10896"></a><span class="lineno">10896</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex != SIZE_MAX &amp;&amp;</div>
+<div class="line"><a name="l10897"></a><span class="lineno">10897</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l10898"></a><span class="lineno">10898</span>&#160;            {</div>
+<div class="line"><a name="l10899"></a><span class="lineno">10899</span>&#160;                --nextAlloc2ndIndex;</div>
+<div class="line"><a name="l10900"></a><span class="lineno">10900</span>&#160;            }</div>
+<div class="line"><a name="l10901"></a><span class="lineno">10901</span>&#160; </div>
+<div class="line"><a name="l10902"></a><span class="lineno">10902</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
+<div class="line"><a name="l10903"></a><span class="lineno">10903</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex != SIZE_MAX)</div>
+<div class="line"><a name="l10904"></a><span class="lineno">10904</span>&#160;            {</div>
+<div class="line"><a name="l10905"></a><span class="lineno">10905</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
+<div class="line"><a name="l10906"></a><span class="lineno">10906</span>&#160; </div>
+<div class="line"><a name="l10907"></a><span class="lineno">10907</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
+<div class="line"><a name="l10908"></a><span class="lineno">10908</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
+<div class="line"><a name="l10909"></a><span class="lineno">10909</span>&#160;                {</div>
+<div class="line"><a name="l10910"></a><span class="lineno">10910</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
+<div class="line"><a name="l10911"></a><span class="lineno">10911</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
+<div class="line"><a name="l10912"></a><span class="lineno">10912</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> += unusedRangeSize;</div>
+<div class="line"><a name="l10913"></a><span class="lineno">10913</span>&#160;                    ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
+<div class="line"><a name="l10914"></a><span class="lineno">10914</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = VMA_MAX(inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10915"></a><span class="lineno">10915</span>&#160;                }</div>
+<div class="line"><a name="l10916"></a><span class="lineno">10916</span>&#160; </div>
+<div class="line"><a name="l10917"></a><span class="lineno">10917</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
+<div class="line"><a name="l10918"></a><span class="lineno">10918</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
+<div class="line"><a name="l10919"></a><span class="lineno">10919</span>&#160;                ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">allocationCount</a>;</div>
+<div class="line"><a name="l10920"></a><span class="lineno">10920</span>&#160; </div>
+<div class="line"><a name="l10921"></a><span class="lineno">10921</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
+<div class="line"><a name="l10922"></a><span class="lineno">10922</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
+<div class="line"><a name="l10923"></a><span class="lineno">10923</span>&#160;                --nextAlloc2ndIndex;</div>
+<div class="line"><a name="l10924"></a><span class="lineno">10924</span>&#160;            }</div>
+<div class="line"><a name="l10925"></a><span class="lineno">10925</span>&#160;            <span class="comment">// We are at the end.</span></div>
+<div class="line"><a name="l10926"></a><span class="lineno">10926</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10927"></a><span class="lineno">10927</span>&#160;            {</div>
+<div class="line"><a name="l10928"></a><span class="lineno">10928</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; size)</div>
+<div class="line"><a name="l10929"></a><span class="lineno">10929</span>&#160;                {</div>
+<div class="line"><a name="l10930"></a><span class="lineno">10930</span>&#160;                    <span class="comment">// There is free space from lastOffset to size.</span></div>
+<div class="line"><a name="l10931"></a><span class="lineno">10931</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = size - lastOffset;</div>
+<div class="line"><a name="l10932"></a><span class="lineno">10932</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> += unusedRangeSize;</div>
+<div class="line"><a name="l10933"></a><span class="lineno">10933</span>&#160;                    ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
+<div class="line"><a name="l10934"></a><span class="lineno">10934</span>&#160;                    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = VMA_MAX(inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>, unusedRangeSize);</div>
+<div class="line"><a name="l10935"></a><span class="lineno">10935</span>&#160;                }</div>
+<div class="line"><a name="l10936"></a><span class="lineno">10936</span>&#160; </div>
+<div class="line"><a name="l10937"></a><span class="lineno">10937</span>&#160;                <span class="comment">// End of loop.</span></div>
+<div class="line"><a name="l10938"></a><span class="lineno">10938</span>&#160;                lastOffset = size;</div>
+<div class="line"><a name="l10939"></a><span class="lineno">10939</span>&#160;            }</div>
+<div class="line"><a name="l10940"></a><span class="lineno">10940</span>&#160;        }</div>
+<div class="line"><a name="l10941"></a><span class="lineno">10941</span>&#160;    }</div>
+<div class="line"><a name="l10942"></a><span class="lineno">10942</span>&#160;}</div>
+<div class="line"><a name="l10943"></a><span class="lineno">10943</span>&#160; </div>
+<div class="line"><a name="l10944"></a><span class="lineno">10944</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l10945"></a><span class="lineno">10945</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::PrintDetailedMap(<span class="keyword">class</span> VmaJsonWriter&amp; json)<span class="keyword"> const</span></div>
+<div class="line"><a name="l10946"></a><span class="lineno">10946</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l10947"></a><span class="lineno">10947</span>&#160;    <span class="keyword">const</span> VkDeviceSize size = GetSize();</div>
+<div class="line"><a name="l10948"></a><span class="lineno">10948</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
+<div class="line"><a name="l10949"></a><span class="lineno">10949</span>&#160;    <span class="keyword">const</span> SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
+<div class="line"><a name="l10950"></a><span class="lineno">10950</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc1stCount = suballocations1st.size();</div>
+<div class="line"><a name="l10951"></a><span class="lineno">10951</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc2ndCount = suballocations2nd.size();</div>
+<div class="line"><a name="l10952"></a><span class="lineno">10952</span>&#160; </div>
+<div class="line"><a name="l10953"></a><span class="lineno">10953</span>&#160;    <span class="comment">// FIRST PASS</span></div>
+<div class="line"><a name="l10954"></a><span class="lineno">10954</span>&#160; </div>
+<div class="line"><a name="l10955"></a><span class="lineno">10955</span>&#160;    <span class="keywordtype">size_t</span> unusedRangeCount = 0;</div>
+<div class="line"><a name="l10956"></a><span class="lineno">10956</span>&#160;    VkDeviceSize usedBytes = 0;</div>
+<div class="line"><a name="l10957"></a><span class="lineno">10957</span>&#160; </div>
+<div class="line"><a name="l10958"></a><span class="lineno">10958</span>&#160;    VkDeviceSize lastOffset = 0;</div>
+<div class="line"><a name="l10959"></a><span class="lineno">10959</span>&#160; </div>
+<div class="line"><a name="l10960"></a><span class="lineno">10960</span>&#160;    <span class="keywordtype">size_t</span> alloc2ndCount = 0;</div>
+<div class="line"><a name="l10961"></a><span class="lineno">10961</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
+<div class="line"><a name="l10962"></a><span class="lineno">10962</span>&#160;    {</div>
+<div class="line"><a name="l10963"></a><span class="lineno">10963</span>&#160;        <span class="keyword">const</span> VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset;</div>
+<div class="line"><a name="l10964"></a><span class="lineno">10964</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = 0;</div>
+<div class="line"><a name="l10965"></a><span class="lineno">10965</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
+<div class="line"><a name="l10966"></a><span class="lineno">10966</span>&#160;        {</div>
+<div class="line"><a name="l10967"></a><span class="lineno">10967</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAlloc2ndIndex to the end.</span></div>
+<div class="line"><a name="l10968"></a><span class="lineno">10968</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex &lt; suballoc2ndCount &amp;&amp;</div>
+<div class="line"><a name="l10969"></a><span class="lineno">10969</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l10970"></a><span class="lineno">10970</span>&#160;            {</div>
+<div class="line"><a name="l10971"></a><span class="lineno">10971</span>&#160;                ++nextAlloc2ndIndex;</div>
+<div class="line"><a name="l10972"></a><span class="lineno">10972</span>&#160;            }</div>
+<div class="line"><a name="l10973"></a><span class="lineno">10973</span>&#160; </div>
+<div class="line"><a name="l10974"></a><span class="lineno">10974</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
+<div class="line"><a name="l10975"></a><span class="lineno">10975</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex &lt; suballoc2ndCount)</div>
+<div class="line"><a name="l10976"></a><span class="lineno">10976</span>&#160;            {</div>
+<div class="line"><a name="l10977"></a><span class="lineno">10977</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
+<div class="line"><a name="l10978"></a><span class="lineno">10978</span>&#160; </div>
+<div class="line"><a name="l10979"></a><span class="lineno">10979</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
+<div class="line"><a name="l10980"></a><span class="lineno">10980</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
+<div class="line"><a name="l10981"></a><span class="lineno">10981</span>&#160;                {</div>
+<div class="line"><a name="l10982"></a><span class="lineno">10982</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
+<div class="line"><a name="l10983"></a><span class="lineno">10983</span>&#160;                    ++unusedRangeCount;</div>
+<div class="line"><a name="l10984"></a><span class="lineno">10984</span>&#160;                }</div>
+<div class="line"><a name="l10985"></a><span class="lineno">10985</span>&#160; </div>
+<div class="line"><a name="l10986"></a><span class="lineno">10986</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
+<div class="line"><a name="l10987"></a><span class="lineno">10987</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
+<div class="line"><a name="l10988"></a><span class="lineno">10988</span>&#160;                ++alloc2ndCount;</div>
+<div class="line"><a name="l10989"></a><span class="lineno">10989</span>&#160;                usedBytes += suballoc.size;</div>
+<div class="line"><a name="l10990"></a><span class="lineno">10990</span>&#160; </div>
+<div class="line"><a name="l10991"></a><span class="lineno">10991</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
+<div class="line"><a name="l10992"></a><span class="lineno">10992</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
+<div class="line"><a name="l10993"></a><span class="lineno">10993</span>&#160;                ++nextAlloc2ndIndex;</div>
+<div class="line"><a name="l10994"></a><span class="lineno">10994</span>&#160;            }</div>
+<div class="line"><a name="l10995"></a><span class="lineno">10995</span>&#160;            <span class="comment">// We are at the end.</span></div>
+<div class="line"><a name="l10996"></a><span class="lineno">10996</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l10997"></a><span class="lineno">10997</span>&#160;            {</div>
+<div class="line"><a name="l10998"></a><span class="lineno">10998</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
+<div class="line"><a name="l10999"></a><span class="lineno">10999</span>&#160;                {</div>
+<div class="line"><a name="l11000"></a><span class="lineno">11000</span>&#160;                    <span class="comment">// There is free space from lastOffset to freeSpace2ndTo1stEnd.</span></div>
+<div class="line"><a name="l11001"></a><span class="lineno">11001</span>&#160;                    ++unusedRangeCount;</div>
+<div class="line"><a name="l11002"></a><span class="lineno">11002</span>&#160;                }</div>
+<div class="line"><a name="l11003"></a><span class="lineno">11003</span>&#160; </div>
+<div class="line"><a name="l11004"></a><span class="lineno">11004</span>&#160;                <span class="comment">// End of loop.</span></div>
+<div class="line"><a name="l11005"></a><span class="lineno">11005</span>&#160;                lastOffset = freeSpace2ndTo1stEnd;</div>
+<div class="line"><a name="l11006"></a><span class="lineno">11006</span>&#160;            }</div>
+<div class="line"><a name="l11007"></a><span class="lineno">11007</span>&#160;        }</div>
+<div class="line"><a name="l11008"></a><span class="lineno">11008</span>&#160;    }</div>
+<div class="line"><a name="l11009"></a><span class="lineno">11009</span>&#160; </div>
+<div class="line"><a name="l11010"></a><span class="lineno">11010</span>&#160;    <span class="keywordtype">size_t</span> nextAlloc1stIndex = m_1stNullItemsBeginCount;</div>
+<div class="line"><a name="l11011"></a><span class="lineno">11011</span>&#160;    <span class="keywordtype">size_t</span> alloc1stCount = 0;</div>
+<div class="line"><a name="l11012"></a><span class="lineno">11012</span>&#160;    <span class="keyword">const</span> VkDeviceSize freeSpace1stTo2ndEnd =</div>
+<div class="line"><a name="l11013"></a><span class="lineno">11013</span>&#160;        m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ? suballocations2nd.back().offset : size;</div>
+<div class="line"><a name="l11014"></a><span class="lineno">11014</span>&#160;    <span class="keywordflow">while</span>(lastOffset &lt; freeSpace1stTo2ndEnd)</div>
+<div class="line"><a name="l11015"></a><span class="lineno">11015</span>&#160;    {</div>
+<div class="line"><a name="l11016"></a><span class="lineno">11016</span>&#160;        <span class="comment">// Find next non-null allocation or move nextAllocIndex to the end.</span></div>
+<div class="line"><a name="l11017"></a><span class="lineno">11017</span>&#160;        <span class="keywordflow">while</span>(nextAlloc1stIndex &lt; suballoc1stCount &amp;&amp;</div>
+<div class="line"><a name="l11018"></a><span class="lineno">11018</span>&#160;            suballocations1st[nextAlloc1stIndex].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l11019"></a><span class="lineno">11019</span>&#160;        {</div>
+<div class="line"><a name="l11020"></a><span class="lineno">11020</span>&#160;            ++nextAlloc1stIndex;</div>
+<div class="line"><a name="l11021"></a><span class="lineno">11021</span>&#160;        }</div>
+<div class="line"><a name="l11022"></a><span class="lineno">11022</span>&#160; </div>
+<div class="line"><a name="l11023"></a><span class="lineno">11023</span>&#160;        <span class="comment">// Found non-null allocation.</span></div>
+<div class="line"><a name="l11024"></a><span class="lineno">11024</span>&#160;        <span class="keywordflow">if</span>(nextAlloc1stIndex &lt; suballoc1stCount)</div>
+<div class="line"><a name="l11025"></a><span class="lineno">11025</span>&#160;        {</div>
+<div class="line"><a name="l11026"></a><span class="lineno">11026</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[nextAlloc1stIndex];</div>
+<div class="line"><a name="l11027"></a><span class="lineno">11027</span>&#160; </div>
+<div class="line"><a name="l11028"></a><span class="lineno">11028</span>&#160;            <span class="comment">// 1. Process free space before this allocation.</span></div>
+<div class="line"><a name="l11029"></a><span class="lineno">11029</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
+<div class="line"><a name="l11030"></a><span class="lineno">11030</span>&#160;            {</div>
+<div class="line"><a name="l11031"></a><span class="lineno">11031</span>&#160;                <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
+<div class="line"><a name="l11032"></a><span class="lineno">11032</span>&#160;                ++unusedRangeCount;</div>
+<div class="line"><a name="l11033"></a><span class="lineno">11033</span>&#160;            }</div>
+<div class="line"><a name="l11034"></a><span class="lineno">11034</span>&#160; </div>
+<div class="line"><a name="l11035"></a><span class="lineno">11035</span>&#160;            <span class="comment">// 2. Process this allocation.</span></div>
+<div class="line"><a name="l11036"></a><span class="lineno">11036</span>&#160;            <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
+<div class="line"><a name="l11037"></a><span class="lineno">11037</span>&#160;            ++alloc1stCount;</div>
+<div class="line"><a name="l11038"></a><span class="lineno">11038</span>&#160;            usedBytes += suballoc.size;</div>
+<div class="line"><a name="l11039"></a><span class="lineno">11039</span>&#160; </div>
+<div class="line"><a name="l11040"></a><span class="lineno">11040</span>&#160;            <span class="comment">// 3. Prepare for next iteration.</span></div>
+<div class="line"><a name="l11041"></a><span class="lineno">11041</span>&#160;            lastOffset = suballoc.offset + suballoc.size;</div>
+<div class="line"><a name="l11042"></a><span class="lineno">11042</span>&#160;            ++nextAlloc1stIndex;</div>
+<div class="line"><a name="l11043"></a><span class="lineno">11043</span>&#160;        }</div>
+<div class="line"><a name="l11044"></a><span class="lineno">11044</span>&#160;        <span class="comment">// We are at the end.</span></div>
+<div class="line"><a name="l11045"></a><span class="lineno">11045</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11046"></a><span class="lineno">11046</span>&#160;        {</div>
+<div class="line"><a name="l11047"></a><span class="lineno">11047</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; size)</div>
+<div class="line"><a name="l11048"></a><span class="lineno">11048</span>&#160;            {</div>
+<div class="line"><a name="l11049"></a><span class="lineno">11049</span>&#160;                <span class="comment">// There is free space from lastOffset to freeSpace1stTo2ndEnd.</span></div>
+<div class="line"><a name="l11050"></a><span class="lineno">11050</span>&#160;                ++unusedRangeCount;</div>
+<div class="line"><a name="l11051"></a><span class="lineno">11051</span>&#160;            }</div>
+<div class="line"><a name="l11052"></a><span class="lineno">11052</span>&#160; </div>
+<div class="line"><a name="l11053"></a><span class="lineno">11053</span>&#160;            <span class="comment">// End of loop.</span></div>
+<div class="line"><a name="l11054"></a><span class="lineno">11054</span>&#160;            lastOffset = freeSpace1stTo2ndEnd;</div>
+<div class="line"><a name="l11055"></a><span class="lineno">11055</span>&#160;        }</div>
+<div class="line"><a name="l11056"></a><span class="lineno">11056</span>&#160;    }</div>
+<div class="line"><a name="l11057"></a><span class="lineno">11057</span>&#160; </div>
+<div class="line"><a name="l11058"></a><span class="lineno">11058</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
+<div class="line"><a name="l11059"></a><span class="lineno">11059</span>&#160;    {</div>
+<div class="line"><a name="l11060"></a><span class="lineno">11060</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = suballocations2nd.size() - 1;</div>
+<div class="line"><a name="l11061"></a><span class="lineno">11061</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; size)</div>
+<div class="line"><a name="l11062"></a><span class="lineno">11062</span>&#160;        {</div>
+<div class="line"><a name="l11063"></a><span class="lineno">11063</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAlloc2ndIndex to the end.</span></div>
+<div class="line"><a name="l11064"></a><span class="lineno">11064</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex != SIZE_MAX &amp;&amp;</div>
+<div class="line"><a name="l11065"></a><span class="lineno">11065</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l11066"></a><span class="lineno">11066</span>&#160;            {</div>
+<div class="line"><a name="l11067"></a><span class="lineno">11067</span>&#160;                --nextAlloc2ndIndex;</div>
+<div class="line"><a name="l11068"></a><span class="lineno">11068</span>&#160;            }</div>
+<div class="line"><a name="l11069"></a><span class="lineno">11069</span>&#160; </div>
+<div class="line"><a name="l11070"></a><span class="lineno">11070</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
+<div class="line"><a name="l11071"></a><span class="lineno">11071</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex != SIZE_MAX)</div>
+<div class="line"><a name="l11072"></a><span class="lineno">11072</span>&#160;            {</div>
+<div class="line"><a name="l11073"></a><span class="lineno">11073</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
+<div class="line"><a name="l11074"></a><span class="lineno">11074</span>&#160; </div>
+<div class="line"><a name="l11075"></a><span class="lineno">11075</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
+<div class="line"><a name="l11076"></a><span class="lineno">11076</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
+<div class="line"><a name="l11077"></a><span class="lineno">11077</span>&#160;                {</div>
+<div class="line"><a name="l11078"></a><span class="lineno">11078</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
+<div class="line"><a name="l11079"></a><span class="lineno">11079</span>&#160;                    ++unusedRangeCount;</div>
+<div class="line"><a name="l11080"></a><span class="lineno">11080</span>&#160;                }</div>
+<div class="line"><a name="l11081"></a><span class="lineno">11081</span>&#160; </div>
+<div class="line"><a name="l11082"></a><span class="lineno">11082</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
+<div class="line"><a name="l11083"></a><span class="lineno">11083</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
+<div class="line"><a name="l11084"></a><span class="lineno">11084</span>&#160;                ++alloc2ndCount;</div>
+<div class="line"><a name="l11085"></a><span class="lineno">11085</span>&#160;                usedBytes += suballoc.size;</div>
+<div class="line"><a name="l11086"></a><span class="lineno">11086</span>&#160; </div>
+<div class="line"><a name="l11087"></a><span class="lineno">11087</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
+<div class="line"><a name="l11088"></a><span class="lineno">11088</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
+<div class="line"><a name="l11089"></a><span class="lineno">11089</span>&#160;                --nextAlloc2ndIndex;</div>
+<div class="line"><a name="l11090"></a><span class="lineno">11090</span>&#160;            }</div>
+<div class="line"><a name="l11091"></a><span class="lineno">11091</span>&#160;            <span class="comment">// We are at the end.</span></div>
+<div class="line"><a name="l11092"></a><span class="lineno">11092</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11093"></a><span class="lineno">11093</span>&#160;            {</div>
+<div class="line"><a name="l11094"></a><span class="lineno">11094</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; size)</div>
+<div class="line"><a name="l11095"></a><span class="lineno">11095</span>&#160;                {</div>
+<div class="line"><a name="l11096"></a><span class="lineno">11096</span>&#160;                    <span class="comment">// There is free space from lastOffset to size.</span></div>
+<div class="line"><a name="l11097"></a><span class="lineno">11097</span>&#160;                    ++unusedRangeCount;</div>
+<div class="line"><a name="l11098"></a><span class="lineno">11098</span>&#160;                }</div>
+<div class="line"><a name="l11099"></a><span class="lineno">11099</span>&#160; </div>
+<div class="line"><a name="l11100"></a><span class="lineno">11100</span>&#160;                <span class="comment">// End of loop.</span></div>
+<div class="line"><a name="l11101"></a><span class="lineno">11101</span>&#160;                lastOffset = size;</div>
+<div class="line"><a name="l11102"></a><span class="lineno">11102</span>&#160;            }</div>
+<div class="line"><a name="l11103"></a><span class="lineno">11103</span>&#160;        }</div>
+<div class="line"><a name="l11104"></a><span class="lineno">11104</span>&#160;    }</div>
+<div class="line"><a name="l11105"></a><span class="lineno">11105</span>&#160; </div>
+<div class="line"><a name="l11106"></a><span class="lineno">11106</span>&#160;    <span class="keyword">const</span> VkDeviceSize unusedBytes = size - usedBytes;</div>
+<div class="line"><a name="l11107"></a><span class="lineno">11107</span>&#160;    PrintDetailedMap_Begin(json, unusedBytes, alloc1stCount + alloc2ndCount, unusedRangeCount);</div>
+<div class="line"><a name="l11108"></a><span class="lineno">11108</span>&#160; </div>
+<div class="line"><a name="l11109"></a><span class="lineno">11109</span>&#160;    <span class="comment">// SECOND PASS</span></div>
+<div class="line"><a name="l11110"></a><span class="lineno">11110</span>&#160;    lastOffset = 0;</div>
+<div class="line"><a name="l11111"></a><span class="lineno">11111</span>&#160; </div>
+<div class="line"><a name="l11112"></a><span class="lineno">11112</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
+<div class="line"><a name="l11113"></a><span class="lineno">11113</span>&#160;    {</div>
+<div class="line"><a name="l11114"></a><span class="lineno">11114</span>&#160;        <span class="keyword">const</span> VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset;</div>
+<div class="line"><a name="l11115"></a><span class="lineno">11115</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = 0;</div>
+<div class="line"><a name="l11116"></a><span class="lineno">11116</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
+<div class="line"><a name="l11117"></a><span class="lineno">11117</span>&#160;        {</div>
+<div class="line"><a name="l11118"></a><span class="lineno">11118</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAlloc2ndIndex to the end.</span></div>
+<div class="line"><a name="l11119"></a><span class="lineno">11119</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex &lt; suballoc2ndCount &amp;&amp;</div>
+<div class="line"><a name="l11120"></a><span class="lineno">11120</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l11121"></a><span class="lineno">11121</span>&#160;            {</div>
+<div class="line"><a name="l11122"></a><span class="lineno">11122</span>&#160;                ++nextAlloc2ndIndex;</div>
+<div class="line"><a name="l11123"></a><span class="lineno">11123</span>&#160;            }</div>
+<div class="line"><a name="l11124"></a><span class="lineno">11124</span>&#160; </div>
+<div class="line"><a name="l11125"></a><span class="lineno">11125</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
+<div class="line"><a name="l11126"></a><span class="lineno">11126</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex &lt; suballoc2ndCount)</div>
+<div class="line"><a name="l11127"></a><span class="lineno">11127</span>&#160;            {</div>
+<div class="line"><a name="l11128"></a><span class="lineno">11128</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
+<div class="line"><a name="l11129"></a><span class="lineno">11129</span>&#160; </div>
+<div class="line"><a name="l11130"></a><span class="lineno">11130</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
+<div class="line"><a name="l11131"></a><span class="lineno">11131</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
+<div class="line"><a name="l11132"></a><span class="lineno">11132</span>&#160;                {</div>
+<div class="line"><a name="l11133"></a><span class="lineno">11133</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
+<div class="line"><a name="l11134"></a><span class="lineno">11134</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
+<div class="line"><a name="l11135"></a><span class="lineno">11135</span>&#160;                    PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize);</div>
+<div class="line"><a name="l11136"></a><span class="lineno">11136</span>&#160;                }</div>
+<div class="line"><a name="l11137"></a><span class="lineno">11137</span>&#160; </div>
+<div class="line"><a name="l11138"></a><span class="lineno">11138</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
+<div class="line"><a name="l11139"></a><span class="lineno">11139</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
+<div class="line"><a name="l11140"></a><span class="lineno">11140</span>&#160;                PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.hAllocation);</div>
+<div class="line"><a name="l11141"></a><span class="lineno">11141</span>&#160; </div>
+<div class="line"><a name="l11142"></a><span class="lineno">11142</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
+<div class="line"><a name="l11143"></a><span class="lineno">11143</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
+<div class="line"><a name="l11144"></a><span class="lineno">11144</span>&#160;                ++nextAlloc2ndIndex;</div>
+<div class="line"><a name="l11145"></a><span class="lineno">11145</span>&#160;            }</div>
+<div class="line"><a name="l11146"></a><span class="lineno">11146</span>&#160;            <span class="comment">// We are at the end.</span></div>
+<div class="line"><a name="l11147"></a><span class="lineno">11147</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11148"></a><span class="lineno">11148</span>&#160;            {</div>
+<div class="line"><a name="l11149"></a><span class="lineno">11149</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; freeSpace2ndTo1stEnd)</div>
+<div class="line"><a name="l11150"></a><span class="lineno">11150</span>&#160;                {</div>
+<div class="line"><a name="l11151"></a><span class="lineno">11151</span>&#160;                    <span class="comment">// There is free space from lastOffset to freeSpace2ndTo1stEnd.</span></div>
+<div class="line"><a name="l11152"></a><span class="lineno">11152</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = freeSpace2ndTo1stEnd - lastOffset;</div>
+<div class="line"><a name="l11153"></a><span class="lineno">11153</span>&#160;                    PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize);</div>
+<div class="line"><a name="l11154"></a><span class="lineno">11154</span>&#160;                }</div>
+<div class="line"><a name="l11155"></a><span class="lineno">11155</span>&#160; </div>
+<div class="line"><a name="l11156"></a><span class="lineno">11156</span>&#160;                <span class="comment">// End of loop.</span></div>
+<div class="line"><a name="l11157"></a><span class="lineno">11157</span>&#160;                lastOffset = freeSpace2ndTo1stEnd;</div>
+<div class="line"><a name="l11158"></a><span class="lineno">11158</span>&#160;            }</div>
+<div class="line"><a name="l11159"></a><span class="lineno">11159</span>&#160;        }</div>
+<div class="line"><a name="l11160"></a><span class="lineno">11160</span>&#160;    }</div>
+<div class="line"><a name="l11161"></a><span class="lineno">11161</span>&#160; </div>
+<div class="line"><a name="l11162"></a><span class="lineno">11162</span>&#160;    nextAlloc1stIndex = m_1stNullItemsBeginCount;</div>
+<div class="line"><a name="l11163"></a><span class="lineno">11163</span>&#160;    <span class="keywordflow">while</span>(lastOffset &lt; freeSpace1stTo2ndEnd)</div>
+<div class="line"><a name="l11164"></a><span class="lineno">11164</span>&#160;    {</div>
+<div class="line"><a name="l11165"></a><span class="lineno">11165</span>&#160;        <span class="comment">// Find next non-null allocation or move nextAllocIndex to the end.</span></div>
+<div class="line"><a name="l11166"></a><span class="lineno">11166</span>&#160;        <span class="keywordflow">while</span>(nextAlloc1stIndex &lt; suballoc1stCount &amp;&amp;</div>
+<div class="line"><a name="l11167"></a><span class="lineno">11167</span>&#160;            suballocations1st[nextAlloc1stIndex].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l11168"></a><span class="lineno">11168</span>&#160;        {</div>
+<div class="line"><a name="l11169"></a><span class="lineno">11169</span>&#160;            ++nextAlloc1stIndex;</div>
+<div class="line"><a name="l11170"></a><span class="lineno">11170</span>&#160;        }</div>
+<div class="line"><a name="l11171"></a><span class="lineno">11171</span>&#160; </div>
+<div class="line"><a name="l11172"></a><span class="lineno">11172</span>&#160;        <span class="comment">// Found non-null allocation.</span></div>
+<div class="line"><a name="l11173"></a><span class="lineno">11173</span>&#160;        <span class="keywordflow">if</span>(nextAlloc1stIndex &lt; suballoc1stCount)</div>
+<div class="line"><a name="l11174"></a><span class="lineno">11174</span>&#160;        {</div>
+<div class="line"><a name="l11175"></a><span class="lineno">11175</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[nextAlloc1stIndex];</div>
+<div class="line"><a name="l11176"></a><span class="lineno">11176</span>&#160; </div>
+<div class="line"><a name="l11177"></a><span class="lineno">11177</span>&#160;            <span class="comment">// 1. Process free space before this allocation.</span></div>
+<div class="line"><a name="l11178"></a><span class="lineno">11178</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
+<div class="line"><a name="l11179"></a><span class="lineno">11179</span>&#160;            {</div>
+<div class="line"><a name="l11180"></a><span class="lineno">11180</span>&#160;                <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
+<div class="line"><a name="l11181"></a><span class="lineno">11181</span>&#160;                <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
+<div class="line"><a name="l11182"></a><span class="lineno">11182</span>&#160;                PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize);</div>
+<div class="line"><a name="l11183"></a><span class="lineno">11183</span>&#160;            }</div>
+<div class="line"><a name="l11184"></a><span class="lineno">11184</span>&#160; </div>
+<div class="line"><a name="l11185"></a><span class="lineno">11185</span>&#160;            <span class="comment">// 2. Process this allocation.</span></div>
+<div class="line"><a name="l11186"></a><span class="lineno">11186</span>&#160;            <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
+<div class="line"><a name="l11187"></a><span class="lineno">11187</span>&#160;            PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.hAllocation);</div>
+<div class="line"><a name="l11188"></a><span class="lineno">11188</span>&#160; </div>
+<div class="line"><a name="l11189"></a><span class="lineno">11189</span>&#160;            <span class="comment">// 3. Prepare for next iteration.</span></div>
+<div class="line"><a name="l11190"></a><span class="lineno">11190</span>&#160;            lastOffset = suballoc.offset + suballoc.size;</div>
+<div class="line"><a name="l11191"></a><span class="lineno">11191</span>&#160;            ++nextAlloc1stIndex;</div>
+<div class="line"><a name="l11192"></a><span class="lineno">11192</span>&#160;        }</div>
+<div class="line"><a name="l11193"></a><span class="lineno">11193</span>&#160;        <span class="comment">// We are at the end.</span></div>
+<div class="line"><a name="l11194"></a><span class="lineno">11194</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11195"></a><span class="lineno">11195</span>&#160;        {</div>
+<div class="line"><a name="l11196"></a><span class="lineno">11196</span>&#160;            <span class="keywordflow">if</span>(lastOffset &lt; freeSpace1stTo2ndEnd)</div>
+<div class="line"><a name="l11197"></a><span class="lineno">11197</span>&#160;            {</div>
+<div class="line"><a name="l11198"></a><span class="lineno">11198</span>&#160;                <span class="comment">// There is free space from lastOffset to freeSpace1stTo2ndEnd.</span></div>
+<div class="line"><a name="l11199"></a><span class="lineno">11199</span>&#160;                <span class="keyword">const</span> VkDeviceSize unusedRangeSize = freeSpace1stTo2ndEnd - lastOffset;</div>
+<div class="line"><a name="l11200"></a><span class="lineno">11200</span>&#160;                PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize);</div>
+<div class="line"><a name="l11201"></a><span class="lineno">11201</span>&#160;            }</div>
+<div class="line"><a name="l11202"></a><span class="lineno">11202</span>&#160; </div>
+<div class="line"><a name="l11203"></a><span class="lineno">11203</span>&#160;            <span class="comment">// End of loop.</span></div>
+<div class="line"><a name="l11204"></a><span class="lineno">11204</span>&#160;            lastOffset = freeSpace1stTo2ndEnd;</div>
+<div class="line"><a name="l11205"></a><span class="lineno">11205</span>&#160;        }</div>
+<div class="line"><a name="l11206"></a><span class="lineno">11206</span>&#160;    }</div>
+<div class="line"><a name="l11207"></a><span class="lineno">11207</span>&#160; </div>
+<div class="line"><a name="l11208"></a><span class="lineno">11208</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
+<div class="line"><a name="l11209"></a><span class="lineno">11209</span>&#160;    {</div>
+<div class="line"><a name="l11210"></a><span class="lineno">11210</span>&#160;        <span class="keywordtype">size_t</span> nextAlloc2ndIndex = suballocations2nd.size() - 1;</div>
+<div class="line"><a name="l11211"></a><span class="lineno">11211</span>&#160;        <span class="keywordflow">while</span>(lastOffset &lt; size)</div>
+<div class="line"><a name="l11212"></a><span class="lineno">11212</span>&#160;        {</div>
+<div class="line"><a name="l11213"></a><span class="lineno">11213</span>&#160;            <span class="comment">// Find next non-null allocation or move nextAlloc2ndIndex to the end.</span></div>
+<div class="line"><a name="l11214"></a><span class="lineno">11214</span>&#160;            <span class="keywordflow">while</span>(nextAlloc2ndIndex != SIZE_MAX &amp;&amp;</div>
+<div class="line"><a name="l11215"></a><span class="lineno">11215</span>&#160;                suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l11216"></a><span class="lineno">11216</span>&#160;            {</div>
+<div class="line"><a name="l11217"></a><span class="lineno">11217</span>&#160;                --nextAlloc2ndIndex;</div>
+<div class="line"><a name="l11218"></a><span class="lineno">11218</span>&#160;            }</div>
+<div class="line"><a name="l11219"></a><span class="lineno">11219</span>&#160; </div>
+<div class="line"><a name="l11220"></a><span class="lineno">11220</span>&#160;            <span class="comment">// Found non-null allocation.</span></div>
+<div class="line"><a name="l11221"></a><span class="lineno">11221</span>&#160;            <span class="keywordflow">if</span>(nextAlloc2ndIndex != SIZE_MAX)</div>
+<div class="line"><a name="l11222"></a><span class="lineno">11222</span>&#160;            {</div>
+<div class="line"><a name="l11223"></a><span class="lineno">11223</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[nextAlloc2ndIndex];</div>
+<div class="line"><a name="l11224"></a><span class="lineno">11224</span>&#160; </div>
+<div class="line"><a name="l11225"></a><span class="lineno">11225</span>&#160;                <span class="comment">// 1. Process free space before this allocation.</span></div>
+<div class="line"><a name="l11226"></a><span class="lineno">11226</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; suballoc.offset)</div>
+<div class="line"><a name="l11227"></a><span class="lineno">11227</span>&#160;                {</div>
+<div class="line"><a name="l11228"></a><span class="lineno">11228</span>&#160;                    <span class="comment">// There is free space from lastOffset to suballoc.offset.</span></div>
+<div class="line"><a name="l11229"></a><span class="lineno">11229</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;</div>
+<div class="line"><a name="l11230"></a><span class="lineno">11230</span>&#160;                    PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize);</div>
+<div class="line"><a name="l11231"></a><span class="lineno">11231</span>&#160;                }</div>
+<div class="line"><a name="l11232"></a><span class="lineno">11232</span>&#160; </div>
+<div class="line"><a name="l11233"></a><span class="lineno">11233</span>&#160;                <span class="comment">// 2. Process this allocation.</span></div>
+<div class="line"><a name="l11234"></a><span class="lineno">11234</span>&#160;                <span class="comment">// There is allocation with suballoc.offset, suballoc.size.</span></div>
+<div class="line"><a name="l11235"></a><span class="lineno">11235</span>&#160;                PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.hAllocation);</div>
+<div class="line"><a name="l11236"></a><span class="lineno">11236</span>&#160; </div>
+<div class="line"><a name="l11237"></a><span class="lineno">11237</span>&#160;                <span class="comment">// 3. Prepare for next iteration.</span></div>
+<div class="line"><a name="l11238"></a><span class="lineno">11238</span>&#160;                lastOffset = suballoc.offset + suballoc.size;</div>
+<div class="line"><a name="l11239"></a><span class="lineno">11239</span>&#160;                --nextAlloc2ndIndex;</div>
+<div class="line"><a name="l11240"></a><span class="lineno">11240</span>&#160;            }</div>
+<div class="line"><a name="l11241"></a><span class="lineno">11241</span>&#160;            <span class="comment">// We are at the end.</span></div>
+<div class="line"><a name="l11242"></a><span class="lineno">11242</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11243"></a><span class="lineno">11243</span>&#160;            {</div>
+<div class="line"><a name="l11244"></a><span class="lineno">11244</span>&#160;                <span class="keywordflow">if</span>(lastOffset &lt; size)</div>
+<div class="line"><a name="l11245"></a><span class="lineno">11245</span>&#160;                {</div>
+<div class="line"><a name="l11246"></a><span class="lineno">11246</span>&#160;                    <span class="comment">// There is free space from lastOffset to size.</span></div>
+<div class="line"><a name="l11247"></a><span class="lineno">11247</span>&#160;                    <span class="keyword">const</span> VkDeviceSize unusedRangeSize = size - lastOffset;</div>
+<div class="line"><a name="l11248"></a><span class="lineno">11248</span>&#160;                    PrintDetailedMap_UnusedRange(json, lastOffset, unusedRangeSize);</div>
+<div class="line"><a name="l11249"></a><span class="lineno">11249</span>&#160;                }</div>
+<div class="line"><a name="l11250"></a><span class="lineno">11250</span>&#160; </div>
+<div class="line"><a name="l11251"></a><span class="lineno">11251</span>&#160;                <span class="comment">// End of loop.</span></div>
+<div class="line"><a name="l11252"></a><span class="lineno">11252</span>&#160;                lastOffset = size;</div>
+<div class="line"><a name="l11253"></a><span class="lineno">11253</span>&#160;            }</div>
+<div class="line"><a name="l11254"></a><span class="lineno">11254</span>&#160;        }</div>
+<div class="line"><a name="l11255"></a><span class="lineno">11255</span>&#160;    }</div>
+<div class="line"><a name="l11256"></a><span class="lineno">11256</span>&#160; </div>
+<div class="line"><a name="l11257"></a><span class="lineno">11257</span>&#160;    PrintDetailedMap_End(json);</div>
+<div class="line"><a name="l11258"></a><span class="lineno">11258</span>&#160;}</div>
+<div class="line"><a name="l11259"></a><span class="lineno">11259</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l11260"></a><span class="lineno">11260</span>&#160; </div>
+<div class="line"><a name="l11261"></a><span class="lineno">11261</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Linear::CreateAllocationRequest(</div>
+<div class="line"><a name="l11262"></a><span class="lineno">11262</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l11263"></a><span class="lineno">11263</span>&#160;    uint32_t frameInUseCount,</div>
+<div class="line"><a name="l11264"></a><span class="lineno">11264</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
+<div class="line"><a name="l11265"></a><span class="lineno">11265</span>&#160;    VkDeviceSize allocSize,</div>
+<div class="line"><a name="l11266"></a><span class="lineno">11266</span>&#160;    VkDeviceSize allocAlignment,</div>
+<div class="line"><a name="l11267"></a><span class="lineno">11267</span>&#160;    <span class="keywordtype">bool</span> upperAddress,</div>
+<div class="line"><a name="l11268"></a><span class="lineno">11268</span>&#160;    VmaSuballocationType allocType,</div>
+<div class="line"><a name="l11269"></a><span class="lineno">11269</span>&#160;    <span class="keywordtype">bool</span> canMakeOtherLost,</div>
+<div class="line"><a name="l11270"></a><span class="lineno">11270</span>&#160;    uint32_t strategy,</div>
+<div class="line"><a name="l11271"></a><span class="lineno">11271</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
+<div class="line"><a name="l11272"></a><span class="lineno">11272</span>&#160;{</div>
+<div class="line"><a name="l11273"></a><span class="lineno">11273</span>&#160;    VMA_ASSERT(allocSize &gt; 0);</div>
+<div class="line"><a name="l11274"></a><span class="lineno">11274</span>&#160;    VMA_ASSERT(allocType != VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l11275"></a><span class="lineno">11275</span>&#160;    VMA_ASSERT(pAllocationRequest != VMA_NULL);</div>
+<div class="line"><a name="l11276"></a><span class="lineno">11276</span>&#160;    VMA_HEAVY_ASSERT(Validate());</div>
+<div class="line"><a name="l11277"></a><span class="lineno">11277</span>&#160;    <span class="keywordflow">return</span> upperAddress ?</div>
+<div class="line"><a name="l11278"></a><span class="lineno">11278</span>&#160;        CreateAllocationRequest_UpperAddress(</div>
+<div class="line"><a name="l11279"></a><span class="lineno">11279</span>&#160;            currentFrameIndex, frameInUseCount, bufferImageGranularity,</div>
+<div class="line"><a name="l11280"></a><span class="lineno">11280</span>&#160;            allocSize, allocAlignment, allocType, canMakeOtherLost, strategy, pAllocationRequest) :</div>
+<div class="line"><a name="l11281"></a><span class="lineno">11281</span>&#160;        CreateAllocationRequest_LowerAddress(</div>
+<div class="line"><a name="l11282"></a><span class="lineno">11282</span>&#160;            currentFrameIndex, frameInUseCount, bufferImageGranularity,</div>
+<div class="line"><a name="l11283"></a><span class="lineno">11283</span>&#160;            allocSize, allocAlignment, allocType, canMakeOtherLost, strategy, pAllocationRequest);</div>
+<div class="line"><a name="l11284"></a><span class="lineno">11284</span>&#160;}</div>
+<div class="line"><a name="l11285"></a><span class="lineno">11285</span>&#160; </div>
+<div class="line"><a name="l11286"></a><span class="lineno">11286</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Linear::CreateAllocationRequest_UpperAddress(</div>
+<div class="line"><a name="l11287"></a><span class="lineno">11287</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l11288"></a><span class="lineno">11288</span>&#160;    uint32_t frameInUseCount,</div>
+<div class="line"><a name="l11289"></a><span class="lineno">11289</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
+<div class="line"><a name="l11290"></a><span class="lineno">11290</span>&#160;    VkDeviceSize allocSize,</div>
+<div class="line"><a name="l11291"></a><span class="lineno">11291</span>&#160;    VkDeviceSize allocAlignment,</div>
+<div class="line"><a name="l11292"></a><span class="lineno">11292</span>&#160;    VmaSuballocationType allocType,</div>
+<div class="line"><a name="l11293"></a><span class="lineno">11293</span>&#160;    <span class="keywordtype">bool</span> canMakeOtherLost,</div>
+<div class="line"><a name="l11294"></a><span class="lineno">11294</span>&#160;    uint32_t strategy,</div>
+<div class="line"><a name="l11295"></a><span class="lineno">11295</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
+<div class="line"><a name="l11296"></a><span class="lineno">11296</span>&#160;{</div>
+<div class="line"><a name="l11297"></a><span class="lineno">11297</span>&#160;    <span class="keyword">const</span> VkDeviceSize size = GetSize();</div>
+<div class="line"><a name="l11298"></a><span class="lineno">11298</span>&#160;    SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
+<div class="line"><a name="l11299"></a><span class="lineno">11299</span>&#160;    SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
+<div class="line"><a name="l11300"></a><span class="lineno">11300</span>&#160; </div>
+<div class="line"><a name="l11301"></a><span class="lineno">11301</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
+<div class="line"><a name="l11302"></a><span class="lineno">11302</span>&#160;    {</div>
+<div class="line"><a name="l11303"></a><span class="lineno">11303</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Trying to use pool with linear algorithm as double stack, while it is already being used as ring buffer.&quot;</span>);</div>
+<div class="line"><a name="l11304"></a><span class="lineno">11304</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11305"></a><span class="lineno">11305</span>&#160;    }</div>
+<div class="line"><a name="l11306"></a><span class="lineno">11306</span>&#160; </div>
+<div class="line"><a name="l11307"></a><span class="lineno">11307</span>&#160;    <span class="comment">// Try to allocate before 2nd.back(), or end of block if 2nd.empty().</span></div>
+<div class="line"><a name="l11308"></a><span class="lineno">11308</span>&#160;    <span class="keywordflow">if</span>(allocSize &gt; size)</div>
+<div class="line"><a name="l11309"></a><span class="lineno">11309</span>&#160;    {</div>
+<div class="line"><a name="l11310"></a><span class="lineno">11310</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11311"></a><span class="lineno">11311</span>&#160;    }</div>
+<div class="line"><a name="l11312"></a><span class="lineno">11312</span>&#160;    VkDeviceSize resultBaseOffset = size - allocSize;</div>
+<div class="line"><a name="l11313"></a><span class="lineno">11313</span>&#160;    <span class="keywordflow">if</span>(!suballocations2nd.empty())</div>
+<div class="line"><a name="l11314"></a><span class="lineno">11314</span>&#160;    {</div>
+<div class="line"><a name="l11315"></a><span class="lineno">11315</span>&#160;        <span class="keyword">const</span> VmaSuballocation&amp; lastSuballoc = suballocations2nd.back();</div>
+<div class="line"><a name="l11316"></a><span class="lineno">11316</span>&#160;        resultBaseOffset = lastSuballoc.offset - allocSize;</div>
+<div class="line"><a name="l11317"></a><span class="lineno">11317</span>&#160;        <span class="keywordflow">if</span>(allocSize &gt; lastSuballoc.offset)</div>
+<div class="line"><a name="l11318"></a><span class="lineno">11318</span>&#160;        {</div>
+<div class="line"><a name="l11319"></a><span class="lineno">11319</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11320"></a><span class="lineno">11320</span>&#160;        }</div>
+<div class="line"><a name="l11321"></a><span class="lineno">11321</span>&#160;    }</div>
+<div class="line"><a name="l11322"></a><span class="lineno">11322</span>&#160; </div>
+<div class="line"><a name="l11323"></a><span class="lineno">11323</span>&#160;    <span class="comment">// Start from offset equal to end of free space.</span></div>
+<div class="line"><a name="l11324"></a><span class="lineno">11324</span>&#160;    VkDeviceSize resultOffset = resultBaseOffset;</div>
+<div class="line"><a name="l11325"></a><span class="lineno">11325</span>&#160; </div>
+<div class="line"><a name="l11326"></a><span class="lineno">11326</span>&#160;    <span class="comment">// Apply VMA_DEBUG_MARGIN at the end.</span></div>
+<div class="line"><a name="l11327"></a><span class="lineno">11327</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_MARGIN &gt; 0)</div>
+<div class="line"><a name="l11328"></a><span class="lineno">11328</span>&#160;    {</div>
+<div class="line"><a name="l11329"></a><span class="lineno">11329</span>&#160;        <span class="keywordflow">if</span>(resultOffset &lt; VMA_DEBUG_MARGIN)</div>
+<div class="line"><a name="l11330"></a><span class="lineno">11330</span>&#160;        {</div>
+<div class="line"><a name="l11331"></a><span class="lineno">11331</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11332"></a><span class="lineno">11332</span>&#160;        }</div>
+<div class="line"><a name="l11333"></a><span class="lineno">11333</span>&#160;        resultOffset -= VMA_DEBUG_MARGIN;</div>
+<div class="line"><a name="l11334"></a><span class="lineno">11334</span>&#160;    }</div>
+<div class="line"><a name="l11335"></a><span class="lineno">11335</span>&#160; </div>
+<div class="line"><a name="l11336"></a><span class="lineno">11336</span>&#160;    <span class="comment">// Apply alignment.</span></div>
+<div class="line"><a name="l11337"></a><span class="lineno">11337</span>&#160;    resultOffset = VmaAlignDown(resultOffset, allocAlignment);</div>
+<div class="line"><a name="l11338"></a><span class="lineno">11338</span>&#160; </div>
+<div class="line"><a name="l11339"></a><span class="lineno">11339</span>&#160;    <span class="comment">// Check next suballocations from 2nd for BufferImageGranularity conflicts.</span></div>
+<div class="line"><a name="l11340"></a><span class="lineno">11340</span>&#160;    <span class="comment">// Make bigger alignment if necessary.</span></div>
+<div class="line"><a name="l11341"></a><span class="lineno">11341</span>&#160;    <span class="keywordflow">if</span>(bufferImageGranularity &gt; 1 &amp;&amp; bufferImageGranularity != allocAlignment &amp;&amp; !suballocations2nd.empty())</div>
+<div class="line"><a name="l11342"></a><span class="lineno">11342</span>&#160;    {</div>
+<div class="line"><a name="l11343"></a><span class="lineno">11343</span>&#160;        <span class="keywordtype">bool</span> bufferImageGranularityConflict = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11344"></a><span class="lineno">11344</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> nextSuballocIndex = suballocations2nd.size(); nextSuballocIndex--; )</div>
+<div class="line"><a name="l11345"></a><span class="lineno">11345</span>&#160;        {</div>
+<div class="line"><a name="l11346"></a><span class="lineno">11346</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; nextSuballoc = suballocations2nd[nextSuballocIndex];</div>
+<div class="line"><a name="l11347"></a><span class="lineno">11347</span>&#160;            <span class="keywordflow">if</span>(VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))</div>
+<div class="line"><a name="l11348"></a><span class="lineno">11348</span>&#160;            {</div>
+<div class="line"><a name="l11349"></a><span class="lineno">11349</span>&#160;                <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(nextSuballoc.type, allocType))</div>
+<div class="line"><a name="l11350"></a><span class="lineno">11350</span>&#160;                {</div>
+<div class="line"><a name="l11351"></a><span class="lineno">11351</span>&#160;                    bufferImageGranularityConflict = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l11352"></a><span class="lineno">11352</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11353"></a><span class="lineno">11353</span>&#160;                }</div>
+<div class="line"><a name="l11354"></a><span class="lineno">11354</span>&#160;            }</div>
+<div class="line"><a name="l11355"></a><span class="lineno">11355</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11356"></a><span class="lineno">11356</span>&#160;                <span class="comment">// Already on previous page.</span></div>
+<div class="line"><a name="l11357"></a><span class="lineno">11357</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11358"></a><span class="lineno">11358</span>&#160;        }</div>
+<div class="line"><a name="l11359"></a><span class="lineno">11359</span>&#160;        <span class="keywordflow">if</span>(bufferImageGranularityConflict)</div>
+<div class="line"><a name="l11360"></a><span class="lineno">11360</span>&#160;        {</div>
+<div class="line"><a name="l11361"></a><span class="lineno">11361</span>&#160;            resultOffset = VmaAlignDown(resultOffset, bufferImageGranularity);</div>
+<div class="line"><a name="l11362"></a><span class="lineno">11362</span>&#160;        }</div>
+<div class="line"><a name="l11363"></a><span class="lineno">11363</span>&#160;    }</div>
+<div class="line"><a name="l11364"></a><span class="lineno">11364</span>&#160; </div>
+<div class="line"><a name="l11365"></a><span class="lineno">11365</span>&#160;    <span class="comment">// There is enough free space.</span></div>
+<div class="line"><a name="l11366"></a><span class="lineno">11366</span>&#160;    <span class="keyword">const</span> VkDeviceSize endOf1st = !suballocations1st.empty() ?</div>
+<div class="line"><a name="l11367"></a><span class="lineno">11367</span>&#160;        suballocations1st.back().offset + suballocations1st.back().size :</div>
+<div class="line"><a name="l11368"></a><span class="lineno">11368</span>&#160;        0;</div>
+<div class="line"><a name="l11369"></a><span class="lineno">11369</span>&#160;    <span class="keywordflow">if</span>(endOf1st + VMA_DEBUG_MARGIN &lt;= resultOffset)</div>
+<div class="line"><a name="l11370"></a><span class="lineno">11370</span>&#160;    {</div>
+<div class="line"><a name="l11371"></a><span class="lineno">11371</span>&#160;        <span class="comment">// Check previous suballocations for BufferImageGranularity conflicts.</span></div>
+<div class="line"><a name="l11372"></a><span class="lineno">11372</span>&#160;        <span class="comment">// If conflict exists, allocation cannot be made here.</span></div>
+<div class="line"><a name="l11373"></a><span class="lineno">11373</span>&#160;        <span class="keywordflow">if</span>(bufferImageGranularity &gt; 1)</div>
+<div class="line"><a name="l11374"></a><span class="lineno">11374</span>&#160;        {</div>
+<div class="line"><a name="l11375"></a><span class="lineno">11375</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> prevSuballocIndex = suballocations1st.size(); prevSuballocIndex--; )</div>
+<div class="line"><a name="l11376"></a><span class="lineno">11376</span>&#160;            {</div>
+<div class="line"><a name="l11377"></a><span class="lineno">11377</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; prevSuballoc = suballocations1st[prevSuballocIndex];</div>
+<div class="line"><a name="l11378"></a><span class="lineno">11378</span>&#160;                <span class="keywordflow">if</span>(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity))</div>
+<div class="line"><a name="l11379"></a><span class="lineno">11379</span>&#160;                {</div>
+<div class="line"><a name="l11380"></a><span class="lineno">11380</span>&#160;                    <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(allocType, prevSuballoc.type))</div>
+<div class="line"><a name="l11381"></a><span class="lineno">11381</span>&#160;                    {</div>
+<div class="line"><a name="l11382"></a><span class="lineno">11382</span>&#160;                        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11383"></a><span class="lineno">11383</span>&#160;                    }</div>
+<div class="line"><a name="l11384"></a><span class="lineno">11384</span>&#160;                }</div>
+<div class="line"><a name="l11385"></a><span class="lineno">11385</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11386"></a><span class="lineno">11386</span>&#160;                {</div>
+<div class="line"><a name="l11387"></a><span class="lineno">11387</span>&#160;                    <span class="comment">// Already on next page.</span></div>
+<div class="line"><a name="l11388"></a><span class="lineno">11388</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11389"></a><span class="lineno">11389</span>&#160;                }</div>
+<div class="line"><a name="l11390"></a><span class="lineno">11390</span>&#160;            }</div>
+<div class="line"><a name="l11391"></a><span class="lineno">11391</span>&#160;        }</div>
+<div class="line"><a name="l11392"></a><span class="lineno">11392</span>&#160; </div>
+<div class="line"><a name="l11393"></a><span class="lineno">11393</span>&#160;        <span class="comment">// All tests passed: Success.</span></div>
+<div class="line"><a name="l11394"></a><span class="lineno">11394</span>&#160;        pAllocationRequest-&gt;offset = resultOffset;</div>
+<div class="line"><a name="l11395"></a><span class="lineno">11395</span>&#160;        pAllocationRequest-&gt;sumFreeSize = resultBaseOffset + allocSize - endOf1st;</div>
+<div class="line"><a name="l11396"></a><span class="lineno">11396</span>&#160;        pAllocationRequest-&gt;sumItemSize = 0;</div>
+<div class="line"><a name="l11397"></a><span class="lineno">11397</span>&#160;        <span class="comment">// pAllocationRequest-&gt;item unused.</span></div>
+<div class="line"><a name="l11398"></a><span class="lineno">11398</span>&#160;        pAllocationRequest-&gt;itemsToMakeLostCount = 0;</div>
+<div class="line"><a name="l11399"></a><span class="lineno">11399</span>&#160;        pAllocationRequest-&gt;type = VmaAllocationRequestType::UpperAddress;</div>
+<div class="line"><a name="l11400"></a><span class="lineno">11400</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l11401"></a><span class="lineno">11401</span>&#160;    }</div>
+<div class="line"><a name="l11402"></a><span class="lineno">11402</span>&#160; </div>
+<div class="line"><a name="l11403"></a><span class="lineno">11403</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11404"></a><span class="lineno">11404</span>&#160;}</div>
+<div class="line"><a name="l11405"></a><span class="lineno">11405</span>&#160; </div>
+<div class="line"><a name="l11406"></a><span class="lineno">11406</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Linear::CreateAllocationRequest_LowerAddress(</div>
+<div class="line"><a name="l11407"></a><span class="lineno">11407</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l11408"></a><span class="lineno">11408</span>&#160;    uint32_t frameInUseCount,</div>
+<div class="line"><a name="l11409"></a><span class="lineno">11409</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
+<div class="line"><a name="l11410"></a><span class="lineno">11410</span>&#160;    VkDeviceSize allocSize,</div>
+<div class="line"><a name="l11411"></a><span class="lineno">11411</span>&#160;    VkDeviceSize allocAlignment,</div>
+<div class="line"><a name="l11412"></a><span class="lineno">11412</span>&#160;    VmaSuballocationType allocType,</div>
+<div class="line"><a name="l11413"></a><span class="lineno">11413</span>&#160;    <span class="keywordtype">bool</span> canMakeOtherLost,</div>
+<div class="line"><a name="l11414"></a><span class="lineno">11414</span>&#160;    uint32_t strategy,</div>
+<div class="line"><a name="l11415"></a><span class="lineno">11415</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
+<div class="line"><a name="l11416"></a><span class="lineno">11416</span>&#160;{</div>
+<div class="line"><a name="l11417"></a><span class="lineno">11417</span>&#160;    <span class="keyword">const</span> VkDeviceSize size = GetSize();</div>
+<div class="line"><a name="l11418"></a><span class="lineno">11418</span>&#160;    SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
+<div class="line"><a name="l11419"></a><span class="lineno">11419</span>&#160;    SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
+<div class="line"><a name="l11420"></a><span class="lineno">11420</span>&#160; </div>
+<div class="line"><a name="l11421"></a><span class="lineno">11421</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_EMPTY || m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
+<div class="line"><a name="l11422"></a><span class="lineno">11422</span>&#160;    {</div>
+<div class="line"><a name="l11423"></a><span class="lineno">11423</span>&#160;        <span class="comment">// Try to allocate at the end of 1st vector.</span></div>
+<div class="line"><a name="l11424"></a><span class="lineno">11424</span>&#160; </div>
+<div class="line"><a name="l11425"></a><span class="lineno">11425</span>&#160;        VkDeviceSize resultBaseOffset = 0;</div>
+<div class="line"><a name="l11426"></a><span class="lineno">11426</span>&#160;        <span class="keywordflow">if</span>(!suballocations1st.empty())</div>
+<div class="line"><a name="l11427"></a><span class="lineno">11427</span>&#160;        {</div>
+<div class="line"><a name="l11428"></a><span class="lineno">11428</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; lastSuballoc = suballocations1st.back();</div>
+<div class="line"><a name="l11429"></a><span class="lineno">11429</span>&#160;            resultBaseOffset = lastSuballoc.offset + lastSuballoc.size;</div>
+<div class="line"><a name="l11430"></a><span class="lineno">11430</span>&#160;        }</div>
+<div class="line"><a name="l11431"></a><span class="lineno">11431</span>&#160; </div>
+<div class="line"><a name="l11432"></a><span class="lineno">11432</span>&#160;        <span class="comment">// Start from offset equal to beginning of free space.</span></div>
+<div class="line"><a name="l11433"></a><span class="lineno">11433</span>&#160;        VkDeviceSize resultOffset = resultBaseOffset;</div>
+<div class="line"><a name="l11434"></a><span class="lineno">11434</span>&#160; </div>
+<div class="line"><a name="l11435"></a><span class="lineno">11435</span>&#160;        <span class="comment">// Apply VMA_DEBUG_MARGIN at the beginning.</span></div>
+<div class="line"><a name="l11436"></a><span class="lineno">11436</span>&#160;        <span class="keywordflow">if</span>(VMA_DEBUG_MARGIN &gt; 0)</div>
+<div class="line"><a name="l11437"></a><span class="lineno">11437</span>&#160;        {</div>
+<div class="line"><a name="l11438"></a><span class="lineno">11438</span>&#160;            resultOffset += VMA_DEBUG_MARGIN;</div>
+<div class="line"><a name="l11439"></a><span class="lineno">11439</span>&#160;        }</div>
+<div class="line"><a name="l11440"></a><span class="lineno">11440</span>&#160; </div>
+<div class="line"><a name="l11441"></a><span class="lineno">11441</span>&#160;        <span class="comment">// Apply alignment.</span></div>
+<div class="line"><a name="l11442"></a><span class="lineno">11442</span>&#160;        resultOffset = VmaAlignUp(resultOffset, allocAlignment);</div>
+<div class="line"><a name="l11443"></a><span class="lineno">11443</span>&#160; </div>
+<div class="line"><a name="l11444"></a><span class="lineno">11444</span>&#160;        <span class="comment">// Check previous suballocations for BufferImageGranularity conflicts.</span></div>
+<div class="line"><a name="l11445"></a><span class="lineno">11445</span>&#160;        <span class="comment">// Make bigger alignment if necessary.</span></div>
+<div class="line"><a name="l11446"></a><span class="lineno">11446</span>&#160;        <span class="keywordflow">if</span>(bufferImageGranularity &gt; 1 &amp;&amp; bufferImageGranularity != allocAlignment &amp;&amp; !suballocations1st.empty())</div>
+<div class="line"><a name="l11447"></a><span class="lineno">11447</span>&#160;        {</div>
+<div class="line"><a name="l11448"></a><span class="lineno">11448</span>&#160;            <span class="keywordtype">bool</span> bufferImageGranularityConflict = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11449"></a><span class="lineno">11449</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> prevSuballocIndex = suballocations1st.size(); prevSuballocIndex--; )</div>
+<div class="line"><a name="l11450"></a><span class="lineno">11450</span>&#160;            {</div>
+<div class="line"><a name="l11451"></a><span class="lineno">11451</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; prevSuballoc = suballocations1st[prevSuballocIndex];</div>
+<div class="line"><a name="l11452"></a><span class="lineno">11452</span>&#160;                <span class="keywordflow">if</span>(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity))</div>
+<div class="line"><a name="l11453"></a><span class="lineno">11453</span>&#160;                {</div>
+<div class="line"><a name="l11454"></a><span class="lineno">11454</span>&#160;                    <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))</div>
+<div class="line"><a name="l11455"></a><span class="lineno">11455</span>&#160;                    {</div>
+<div class="line"><a name="l11456"></a><span class="lineno">11456</span>&#160;                        bufferImageGranularityConflict = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l11457"></a><span class="lineno">11457</span>&#160;                        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11458"></a><span class="lineno">11458</span>&#160;                    }</div>
+<div class="line"><a name="l11459"></a><span class="lineno">11459</span>&#160;                }</div>
+<div class="line"><a name="l11460"></a><span class="lineno">11460</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11461"></a><span class="lineno">11461</span>&#160;                    <span class="comment">// Already on previous page.</span></div>
+<div class="line"><a name="l11462"></a><span class="lineno">11462</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11463"></a><span class="lineno">11463</span>&#160;            }</div>
+<div class="line"><a name="l11464"></a><span class="lineno">11464</span>&#160;            <span class="keywordflow">if</span>(bufferImageGranularityConflict)</div>
+<div class="line"><a name="l11465"></a><span class="lineno">11465</span>&#160;            {</div>
+<div class="line"><a name="l11466"></a><span class="lineno">11466</span>&#160;                resultOffset = VmaAlignUp(resultOffset, bufferImageGranularity);</div>
+<div class="line"><a name="l11467"></a><span class="lineno">11467</span>&#160;            }</div>
+<div class="line"><a name="l11468"></a><span class="lineno">11468</span>&#160;        }</div>
+<div class="line"><a name="l11469"></a><span class="lineno">11469</span>&#160; </div>
+<div class="line"><a name="l11470"></a><span class="lineno">11470</span>&#160;        <span class="keyword">const</span> VkDeviceSize freeSpaceEnd = m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ?</div>
+<div class="line"><a name="l11471"></a><span class="lineno">11471</span>&#160;            suballocations2nd.back().offset : size;</div>
+<div class="line"><a name="l11472"></a><span class="lineno">11472</span>&#160; </div>
+<div class="line"><a name="l11473"></a><span class="lineno">11473</span>&#160;        <span class="comment">// There is enough free space at the end after alignment.</span></div>
+<div class="line"><a name="l11474"></a><span class="lineno">11474</span>&#160;        <span class="keywordflow">if</span>(resultOffset + allocSize + VMA_DEBUG_MARGIN &lt;= freeSpaceEnd)</div>
+<div class="line"><a name="l11475"></a><span class="lineno">11475</span>&#160;        {</div>
+<div class="line"><a name="l11476"></a><span class="lineno">11476</span>&#160;            <span class="comment">// Check next suballocations for BufferImageGranularity conflicts.</span></div>
+<div class="line"><a name="l11477"></a><span class="lineno">11477</span>&#160;            <span class="comment">// If conflict exists, allocation cannot be made here.</span></div>
+<div class="line"><a name="l11478"></a><span class="lineno">11478</span>&#160;            <span class="keywordflow">if</span>((allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity) &amp;&amp; m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
+<div class="line"><a name="l11479"></a><span class="lineno">11479</span>&#160;            {</div>
+<div class="line"><a name="l11480"></a><span class="lineno">11480</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> nextSuballocIndex = suballocations2nd.size(); nextSuballocIndex--; )</div>
+<div class="line"><a name="l11481"></a><span class="lineno">11481</span>&#160;                {</div>
+<div class="line"><a name="l11482"></a><span class="lineno">11482</span>&#160;                    <span class="keyword">const</span> VmaSuballocation&amp; nextSuballoc = suballocations2nd[nextSuballocIndex];</div>
+<div class="line"><a name="l11483"></a><span class="lineno">11483</span>&#160;                    <span class="keywordflow">if</span>(VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))</div>
+<div class="line"><a name="l11484"></a><span class="lineno">11484</span>&#160;                    {</div>
+<div class="line"><a name="l11485"></a><span class="lineno">11485</span>&#160;                        <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))</div>
+<div class="line"><a name="l11486"></a><span class="lineno">11486</span>&#160;                        {</div>
+<div class="line"><a name="l11487"></a><span class="lineno">11487</span>&#160;                            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11488"></a><span class="lineno">11488</span>&#160;                        }</div>
+<div class="line"><a name="l11489"></a><span class="lineno">11489</span>&#160;                    }</div>
+<div class="line"><a name="l11490"></a><span class="lineno">11490</span>&#160;                    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11491"></a><span class="lineno">11491</span>&#160;                    {</div>
+<div class="line"><a name="l11492"></a><span class="lineno">11492</span>&#160;                        <span class="comment">// Already on previous page.</span></div>
+<div class="line"><a name="l11493"></a><span class="lineno">11493</span>&#160;                        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11494"></a><span class="lineno">11494</span>&#160;                    }</div>
+<div class="line"><a name="l11495"></a><span class="lineno">11495</span>&#160;                }</div>
+<div class="line"><a name="l11496"></a><span class="lineno">11496</span>&#160;            }</div>
+<div class="line"><a name="l11497"></a><span class="lineno">11497</span>&#160; </div>
+<div class="line"><a name="l11498"></a><span class="lineno">11498</span>&#160;            <span class="comment">// All tests passed: Success.</span></div>
+<div class="line"><a name="l11499"></a><span class="lineno">11499</span>&#160;            pAllocationRequest-&gt;offset = resultOffset;</div>
+<div class="line"><a name="l11500"></a><span class="lineno">11500</span>&#160;            pAllocationRequest-&gt;sumFreeSize = freeSpaceEnd - resultBaseOffset;</div>
+<div class="line"><a name="l11501"></a><span class="lineno">11501</span>&#160;            pAllocationRequest-&gt;sumItemSize = 0;</div>
+<div class="line"><a name="l11502"></a><span class="lineno">11502</span>&#160;            <span class="comment">// pAllocationRequest-&gt;item, customData unused.</span></div>
+<div class="line"><a name="l11503"></a><span class="lineno">11503</span>&#160;            pAllocationRequest-&gt;type = VmaAllocationRequestType::EndOf1st;</div>
+<div class="line"><a name="l11504"></a><span class="lineno">11504</span>&#160;            pAllocationRequest-&gt;itemsToMakeLostCount = 0;</div>
+<div class="line"><a name="l11505"></a><span class="lineno">11505</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l11506"></a><span class="lineno">11506</span>&#160;        }</div>
+<div class="line"><a name="l11507"></a><span class="lineno">11507</span>&#160;    }</div>
+<div class="line"><a name="l11508"></a><span class="lineno">11508</span>&#160; </div>
+<div class="line"><a name="l11509"></a><span class="lineno">11509</span>&#160;    <span class="comment">// Wrap-around to end of 2nd vector. Try to allocate there, watching for the</span></div>
+<div class="line"><a name="l11510"></a><span class="lineno">11510</span>&#160;    <span class="comment">// beginning of 1st vector as the end of free space.</span></div>
+<div class="line"><a name="l11511"></a><span class="lineno">11511</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_EMPTY || m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
+<div class="line"><a name="l11512"></a><span class="lineno">11512</span>&#160;    {</div>
+<div class="line"><a name="l11513"></a><span class="lineno">11513</span>&#160;        VMA_ASSERT(!suballocations1st.empty());</div>
+<div class="line"><a name="l11514"></a><span class="lineno">11514</span>&#160; </div>
+<div class="line"><a name="l11515"></a><span class="lineno">11515</span>&#160;        VkDeviceSize resultBaseOffset = 0;</div>
+<div class="line"><a name="l11516"></a><span class="lineno">11516</span>&#160;        <span class="keywordflow">if</span>(!suballocations2nd.empty())</div>
+<div class="line"><a name="l11517"></a><span class="lineno">11517</span>&#160;        {</div>
+<div class="line"><a name="l11518"></a><span class="lineno">11518</span>&#160;            <span class="keyword">const</span> VmaSuballocation&amp; lastSuballoc = suballocations2nd.back();</div>
+<div class="line"><a name="l11519"></a><span class="lineno">11519</span>&#160;            resultBaseOffset = lastSuballoc.offset + lastSuballoc.size;</div>
+<div class="line"><a name="l11520"></a><span class="lineno">11520</span>&#160;        }</div>
+<div class="line"><a name="l11521"></a><span class="lineno">11521</span>&#160; </div>
+<div class="line"><a name="l11522"></a><span class="lineno">11522</span>&#160;        <span class="comment">// Start from offset equal to beginning of free space.</span></div>
+<div class="line"><a name="l11523"></a><span class="lineno">11523</span>&#160;        VkDeviceSize resultOffset = resultBaseOffset;</div>
+<div class="line"><a name="l11524"></a><span class="lineno">11524</span>&#160; </div>
+<div class="line"><a name="l11525"></a><span class="lineno">11525</span>&#160;        <span class="comment">// Apply VMA_DEBUG_MARGIN at the beginning.</span></div>
+<div class="line"><a name="l11526"></a><span class="lineno">11526</span>&#160;        <span class="keywordflow">if</span>(VMA_DEBUG_MARGIN &gt; 0)</div>
+<div class="line"><a name="l11527"></a><span class="lineno">11527</span>&#160;        {</div>
+<div class="line"><a name="l11528"></a><span class="lineno">11528</span>&#160;            resultOffset += VMA_DEBUG_MARGIN;</div>
+<div class="line"><a name="l11529"></a><span class="lineno">11529</span>&#160;        }</div>
+<div class="line"><a name="l11530"></a><span class="lineno">11530</span>&#160; </div>
+<div class="line"><a name="l11531"></a><span class="lineno">11531</span>&#160;        <span class="comment">// Apply alignment.</span></div>
+<div class="line"><a name="l11532"></a><span class="lineno">11532</span>&#160;        resultOffset = VmaAlignUp(resultOffset, allocAlignment);</div>
+<div class="line"><a name="l11533"></a><span class="lineno">11533</span>&#160; </div>
+<div class="line"><a name="l11534"></a><span class="lineno">11534</span>&#160;        <span class="comment">// Check previous suballocations for BufferImageGranularity conflicts.</span></div>
+<div class="line"><a name="l11535"></a><span class="lineno">11535</span>&#160;        <span class="comment">// Make bigger alignment if necessary.</span></div>
+<div class="line"><a name="l11536"></a><span class="lineno">11536</span>&#160;        <span class="keywordflow">if</span>(bufferImageGranularity &gt; 1 &amp;&amp; bufferImageGranularity != allocAlignment &amp;&amp; !suballocations2nd.empty())</div>
+<div class="line"><a name="l11537"></a><span class="lineno">11537</span>&#160;        {</div>
+<div class="line"><a name="l11538"></a><span class="lineno">11538</span>&#160;            <span class="keywordtype">bool</span> bufferImageGranularityConflict = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11539"></a><span class="lineno">11539</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> prevSuballocIndex = suballocations2nd.size(); prevSuballocIndex--; )</div>
+<div class="line"><a name="l11540"></a><span class="lineno">11540</span>&#160;            {</div>
+<div class="line"><a name="l11541"></a><span class="lineno">11541</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; prevSuballoc = suballocations2nd[prevSuballocIndex];</div>
+<div class="line"><a name="l11542"></a><span class="lineno">11542</span>&#160;                <span class="keywordflow">if</span>(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity))</div>
+<div class="line"><a name="l11543"></a><span class="lineno">11543</span>&#160;                {</div>
+<div class="line"><a name="l11544"></a><span class="lineno">11544</span>&#160;                    <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))</div>
+<div class="line"><a name="l11545"></a><span class="lineno">11545</span>&#160;                    {</div>
+<div class="line"><a name="l11546"></a><span class="lineno">11546</span>&#160;                        bufferImageGranularityConflict = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l11547"></a><span class="lineno">11547</span>&#160;                        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11548"></a><span class="lineno">11548</span>&#160;                    }</div>
+<div class="line"><a name="l11549"></a><span class="lineno">11549</span>&#160;                }</div>
+<div class="line"><a name="l11550"></a><span class="lineno">11550</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11551"></a><span class="lineno">11551</span>&#160;                    <span class="comment">// Already on previous page.</span></div>
+<div class="line"><a name="l11552"></a><span class="lineno">11552</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11553"></a><span class="lineno">11553</span>&#160;            }</div>
+<div class="line"><a name="l11554"></a><span class="lineno">11554</span>&#160;            <span class="keywordflow">if</span>(bufferImageGranularityConflict)</div>
+<div class="line"><a name="l11555"></a><span class="lineno">11555</span>&#160;            {</div>
+<div class="line"><a name="l11556"></a><span class="lineno">11556</span>&#160;                resultOffset = VmaAlignUp(resultOffset, bufferImageGranularity);</div>
+<div class="line"><a name="l11557"></a><span class="lineno">11557</span>&#160;            }</div>
+<div class="line"><a name="l11558"></a><span class="lineno">11558</span>&#160;        }</div>
+<div class="line"><a name="l11559"></a><span class="lineno">11559</span>&#160; </div>
+<div class="line"><a name="l11560"></a><span class="lineno">11560</span>&#160;        pAllocationRequest-&gt;itemsToMakeLostCount = 0;</div>
+<div class="line"><a name="l11561"></a><span class="lineno">11561</span>&#160;        pAllocationRequest-&gt;sumItemSize = 0;</div>
+<div class="line"><a name="l11562"></a><span class="lineno">11562</span>&#160;        <span class="keywordtype">size_t</span> index1st = m_1stNullItemsBeginCount;</div>
+<div class="line"><a name="l11563"></a><span class="lineno">11563</span>&#160; </div>
+<div class="line"><a name="l11564"></a><span class="lineno">11564</span>&#160;        <span class="keywordflow">if</span>(canMakeOtherLost)</div>
+<div class="line"><a name="l11565"></a><span class="lineno">11565</span>&#160;        {</div>
+<div class="line"><a name="l11566"></a><span class="lineno">11566</span>&#160;            <span class="keywordflow">while</span>(index1st &lt; suballocations1st.size() &amp;&amp;</div>
+<div class="line"><a name="l11567"></a><span class="lineno">11567</span>&#160;                resultOffset + allocSize + VMA_DEBUG_MARGIN &gt; suballocations1st[index1st].offset)</div>
+<div class="line"><a name="l11568"></a><span class="lineno">11568</span>&#160;            {</div>
+<div class="line"><a name="l11569"></a><span class="lineno">11569</span>&#160;                <span class="comment">// Next colliding allocation at the beginning of 1st vector found. Try to make it lost.</span></div>
+<div class="line"><a name="l11570"></a><span class="lineno">11570</span>&#160;                <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[index1st];</div>
+<div class="line"><a name="l11571"></a><span class="lineno">11571</span>&#160;                <span class="keywordflow">if</span>(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE)</div>
+<div class="line"><a name="l11572"></a><span class="lineno">11572</span>&#160;                {</div>
+<div class="line"><a name="l11573"></a><span class="lineno">11573</span>&#160;                    <span class="comment">// No problem.</span></div>
+<div class="line"><a name="l11574"></a><span class="lineno">11574</span>&#160;                }</div>
+<div class="line"><a name="l11575"></a><span class="lineno">11575</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11576"></a><span class="lineno">11576</span>&#160;                {</div>
+<div class="line"><a name="l11577"></a><span class="lineno">11577</span>&#160;                    VMA_ASSERT(suballoc.hAllocation != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l11578"></a><span class="lineno">11578</span>&#160;                    <span class="keywordflow">if</span>(suballoc.hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
+<div class="line"><a name="l11579"></a><span class="lineno">11579</span>&#160;                        suballoc.hAllocation-&gt;GetLastUseFrameIndex() + frameInUseCount &lt; currentFrameIndex)</div>
+<div class="line"><a name="l11580"></a><span class="lineno">11580</span>&#160;                    {</div>
+<div class="line"><a name="l11581"></a><span class="lineno">11581</span>&#160;                        ++pAllocationRequest-&gt;itemsToMakeLostCount;</div>
+<div class="line"><a name="l11582"></a><span class="lineno">11582</span>&#160;                        pAllocationRequest-&gt;sumItemSize += suballoc.size;</div>
+<div class="line"><a name="l11583"></a><span class="lineno">11583</span>&#160;                    }</div>
+<div class="line"><a name="l11584"></a><span class="lineno">11584</span>&#160;                    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11585"></a><span class="lineno">11585</span>&#160;                    {</div>
+<div class="line"><a name="l11586"></a><span class="lineno">11586</span>&#160;                        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11587"></a><span class="lineno">11587</span>&#160;                    }</div>
+<div class="line"><a name="l11588"></a><span class="lineno">11588</span>&#160;                }</div>
+<div class="line"><a name="l11589"></a><span class="lineno">11589</span>&#160;                ++index1st;</div>
+<div class="line"><a name="l11590"></a><span class="lineno">11590</span>&#160;            }</div>
+<div class="line"><a name="l11591"></a><span class="lineno">11591</span>&#160; </div>
+<div class="line"><a name="l11592"></a><span class="lineno">11592</span>&#160;            <span class="comment">// Check next suballocations for BufferImageGranularity conflicts.</span></div>
+<div class="line"><a name="l11593"></a><span class="lineno">11593</span>&#160;            <span class="comment">// If conflict exists, we must mark more allocations lost or fail.</span></div>
+<div class="line"><a name="l11594"></a><span class="lineno">11594</span>&#160;            <span class="keywordflow">if</span>(allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity)</div>
+<div class="line"><a name="l11595"></a><span class="lineno">11595</span>&#160;            {</div>
+<div class="line"><a name="l11596"></a><span class="lineno">11596</span>&#160;                <span class="keywordflow">while</span>(index1st &lt; suballocations1st.size())</div>
+<div class="line"><a name="l11597"></a><span class="lineno">11597</span>&#160;                {</div>
+<div class="line"><a name="l11598"></a><span class="lineno">11598</span>&#160;                    <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[index1st];</div>
+<div class="line"><a name="l11599"></a><span class="lineno">11599</span>&#160;                    <span class="keywordflow">if</span>(VmaBlocksOnSamePage(resultOffset, allocSize, suballoc.offset, bufferImageGranularity))</div>
+<div class="line"><a name="l11600"></a><span class="lineno">11600</span>&#160;                    {</div>
+<div class="line"><a name="l11601"></a><span class="lineno">11601</span>&#160;                        <span class="keywordflow">if</span>(suballoc.hAllocation != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l11602"></a><span class="lineno">11602</span>&#160;                        {</div>
+<div class="line"><a name="l11603"></a><span class="lineno">11603</span>&#160;                            <span class="comment">// Not checking actual VmaIsBufferImageGranularityConflict(allocType, suballoc.type).</span></div>
+<div class="line"><a name="l11604"></a><span class="lineno">11604</span>&#160;                            <span class="keywordflow">if</span>(suballoc.hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
+<div class="line"><a name="l11605"></a><span class="lineno">11605</span>&#160;                                suballoc.hAllocation-&gt;GetLastUseFrameIndex() + frameInUseCount &lt; currentFrameIndex)</div>
+<div class="line"><a name="l11606"></a><span class="lineno">11606</span>&#160;                            {</div>
+<div class="line"><a name="l11607"></a><span class="lineno">11607</span>&#160;                                ++pAllocationRequest-&gt;itemsToMakeLostCount;</div>
+<div class="line"><a name="l11608"></a><span class="lineno">11608</span>&#160;                                pAllocationRequest-&gt;sumItemSize += suballoc.size;</div>
+<div class="line"><a name="l11609"></a><span class="lineno">11609</span>&#160;                            }</div>
+<div class="line"><a name="l11610"></a><span class="lineno">11610</span>&#160;                            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11611"></a><span class="lineno">11611</span>&#160;                            {</div>
+<div class="line"><a name="l11612"></a><span class="lineno">11612</span>&#160;                                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11613"></a><span class="lineno">11613</span>&#160;                            }</div>
+<div class="line"><a name="l11614"></a><span class="lineno">11614</span>&#160;                        }</div>
+<div class="line"><a name="l11615"></a><span class="lineno">11615</span>&#160;                    }</div>
+<div class="line"><a name="l11616"></a><span class="lineno">11616</span>&#160;                    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11617"></a><span class="lineno">11617</span>&#160;                    {</div>
+<div class="line"><a name="l11618"></a><span class="lineno">11618</span>&#160;                        <span class="comment">// Already on next page.</span></div>
+<div class="line"><a name="l11619"></a><span class="lineno">11619</span>&#160;                        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11620"></a><span class="lineno">11620</span>&#160;                    }</div>
+<div class="line"><a name="l11621"></a><span class="lineno">11621</span>&#160;                    ++index1st;</div>
+<div class="line"><a name="l11622"></a><span class="lineno">11622</span>&#160;                }</div>
+<div class="line"><a name="l11623"></a><span class="lineno">11623</span>&#160;            }</div>
+<div class="line"><a name="l11624"></a><span class="lineno">11624</span>&#160; </div>
+<div class="line"><a name="l11625"></a><span class="lineno">11625</span>&#160;            <span class="comment">// Special case: There is not enough room at the end for this allocation, even after making all from the 1st lost.</span></div>
+<div class="line"><a name="l11626"></a><span class="lineno">11626</span>&#160;            <span class="keywordflow">if</span>(index1st == suballocations1st.size() &amp;&amp;</div>
+<div class="line"><a name="l11627"></a><span class="lineno">11627</span>&#160;                resultOffset + allocSize + VMA_DEBUG_MARGIN &gt; size)</div>
+<div class="line"><a name="l11628"></a><span class="lineno">11628</span>&#160;            {</div>
+<div class="line"><a name="l11629"></a><span class="lineno">11629</span>&#160;                <span class="comment">// TODO: This is a known bug that it&#39;s not yet implemented and the allocation is failing.</span></div>
+<div class="line"><a name="l11630"></a><span class="lineno">11630</span>&#160;                VMA_DEBUG_LOG(<span class="stringliteral">&quot;Unsupported special case in custom pool with linear allocation algorithm used as ring buffer with allocations that can be lost.&quot;</span>);</div>
+<div class="line"><a name="l11631"></a><span class="lineno">11631</span>&#160;            }</div>
+<div class="line"><a name="l11632"></a><span class="lineno">11632</span>&#160;        }</div>
+<div class="line"><a name="l11633"></a><span class="lineno">11633</span>&#160; </div>
+<div class="line"><a name="l11634"></a><span class="lineno">11634</span>&#160;        <span class="comment">// There is enough free space at the end after alignment.</span></div>
+<div class="line"><a name="l11635"></a><span class="lineno">11635</span>&#160;        <span class="keywordflow">if</span>((index1st == suballocations1st.size() &amp;&amp; resultOffset + allocSize + VMA_DEBUG_MARGIN &lt;= size) ||</div>
+<div class="line"><a name="l11636"></a><span class="lineno">11636</span>&#160;            (index1st &lt; suballocations1st.size() &amp;&amp; resultOffset + allocSize + VMA_DEBUG_MARGIN &lt;= suballocations1st[index1st].offset))</div>
+<div class="line"><a name="l11637"></a><span class="lineno">11637</span>&#160;        {</div>
+<div class="line"><a name="l11638"></a><span class="lineno">11638</span>&#160;            <span class="comment">// Check next suballocations for BufferImageGranularity conflicts.</span></div>
+<div class="line"><a name="l11639"></a><span class="lineno">11639</span>&#160;            <span class="comment">// If conflict exists, allocation cannot be made here.</span></div>
+<div class="line"><a name="l11640"></a><span class="lineno">11640</span>&#160;            <span class="keywordflow">if</span>(allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity)</div>
+<div class="line"><a name="l11641"></a><span class="lineno">11641</span>&#160;            {</div>
+<div class="line"><a name="l11642"></a><span class="lineno">11642</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> nextSuballocIndex = index1st;</div>
+<div class="line"><a name="l11643"></a><span class="lineno">11643</span>&#160;                    nextSuballocIndex &lt; suballocations1st.size();</div>
+<div class="line"><a name="l11644"></a><span class="lineno">11644</span>&#160;                    nextSuballocIndex++)</div>
+<div class="line"><a name="l11645"></a><span class="lineno">11645</span>&#160;                {</div>
+<div class="line"><a name="l11646"></a><span class="lineno">11646</span>&#160;                    <span class="keyword">const</span> VmaSuballocation&amp; nextSuballoc = suballocations1st[nextSuballocIndex];</div>
+<div class="line"><a name="l11647"></a><span class="lineno">11647</span>&#160;                    <span class="keywordflow">if</span>(VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))</div>
+<div class="line"><a name="l11648"></a><span class="lineno">11648</span>&#160;                    {</div>
+<div class="line"><a name="l11649"></a><span class="lineno">11649</span>&#160;                        <span class="keywordflow">if</span>(VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))</div>
+<div class="line"><a name="l11650"></a><span class="lineno">11650</span>&#160;                        {</div>
+<div class="line"><a name="l11651"></a><span class="lineno">11651</span>&#160;                            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11652"></a><span class="lineno">11652</span>&#160;                        }</div>
+<div class="line"><a name="l11653"></a><span class="lineno">11653</span>&#160;                    }</div>
+<div class="line"><a name="l11654"></a><span class="lineno">11654</span>&#160;                    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11655"></a><span class="lineno">11655</span>&#160;                    {</div>
+<div class="line"><a name="l11656"></a><span class="lineno">11656</span>&#160;                        <span class="comment">// Already on next page.</span></div>
+<div class="line"><a name="l11657"></a><span class="lineno">11657</span>&#160;                        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11658"></a><span class="lineno">11658</span>&#160;                    }</div>
+<div class="line"><a name="l11659"></a><span class="lineno">11659</span>&#160;                }</div>
+<div class="line"><a name="l11660"></a><span class="lineno">11660</span>&#160;            }</div>
+<div class="line"><a name="l11661"></a><span class="lineno">11661</span>&#160; </div>
+<div class="line"><a name="l11662"></a><span class="lineno">11662</span>&#160;            <span class="comment">// All tests passed: Success.</span></div>
+<div class="line"><a name="l11663"></a><span class="lineno">11663</span>&#160;            pAllocationRequest-&gt;offset = resultOffset;</div>
+<div class="line"><a name="l11664"></a><span class="lineno">11664</span>&#160;            pAllocationRequest-&gt;sumFreeSize =</div>
+<div class="line"><a name="l11665"></a><span class="lineno">11665</span>&#160;                (index1st &lt; suballocations1st.size() ? suballocations1st[index1st].offset : size)</div>
+<div class="line"><a name="l11666"></a><span class="lineno">11666</span>&#160;                - resultBaseOffset</div>
+<div class="line"><a name="l11667"></a><span class="lineno">11667</span>&#160;                - pAllocationRequest-&gt;sumItemSize;</div>
+<div class="line"><a name="l11668"></a><span class="lineno">11668</span>&#160;            pAllocationRequest-&gt;type = VmaAllocationRequestType::EndOf2nd;</div>
+<div class="line"><a name="l11669"></a><span class="lineno">11669</span>&#160;            <span class="comment">// pAllocationRequest-&gt;item, customData unused.</span></div>
+<div class="line"><a name="l11670"></a><span class="lineno">11670</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l11671"></a><span class="lineno">11671</span>&#160;        }</div>
+<div class="line"><a name="l11672"></a><span class="lineno">11672</span>&#160;    }</div>
+<div class="line"><a name="l11673"></a><span class="lineno">11673</span>&#160; </div>
+<div class="line"><a name="l11674"></a><span class="lineno">11674</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11675"></a><span class="lineno">11675</span>&#160;}</div>
+<div class="line"><a name="l11676"></a><span class="lineno">11676</span>&#160; </div>
+<div class="line"><a name="l11677"></a><span class="lineno">11677</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Linear::MakeRequestedAllocationsLost(</div>
+<div class="line"><a name="l11678"></a><span class="lineno">11678</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l11679"></a><span class="lineno">11679</span>&#160;    uint32_t frameInUseCount,</div>
+<div class="line"><a name="l11680"></a><span class="lineno">11680</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
+<div class="line"><a name="l11681"></a><span class="lineno">11681</span>&#160;{</div>
+<div class="line"><a name="l11682"></a><span class="lineno">11682</span>&#160;    <span class="keywordflow">if</span>(pAllocationRequest-&gt;itemsToMakeLostCount == 0)</div>
+<div class="line"><a name="l11683"></a><span class="lineno">11683</span>&#160;    {</div>
+<div class="line"><a name="l11684"></a><span class="lineno">11684</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l11685"></a><span class="lineno">11685</span>&#160;    }</div>
+<div class="line"><a name="l11686"></a><span class="lineno">11686</span>&#160; </div>
+<div class="line"><a name="l11687"></a><span class="lineno">11687</span>&#160;    VMA_ASSERT(m_2ndVectorMode == SECOND_VECTOR_EMPTY || m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER);</div>
+<div class="line"><a name="l11688"></a><span class="lineno">11688</span>&#160; </div>
+<div class="line"><a name="l11689"></a><span class="lineno">11689</span>&#160;    <span class="comment">// We always start from 1st.</span></div>
+<div class="line"><a name="l11690"></a><span class="lineno">11690</span>&#160;    SuballocationVectorType* suballocations = &amp;AccessSuballocations1st();</div>
+<div class="line"><a name="l11691"></a><span class="lineno">11691</span>&#160;    <span class="keywordtype">size_t</span> index = m_1stNullItemsBeginCount;</div>
+<div class="line"><a name="l11692"></a><span class="lineno">11692</span>&#160;    <span class="keywordtype">size_t</span> madeLostCount = 0;</div>
+<div class="line"><a name="l11693"></a><span class="lineno">11693</span>&#160;    <span class="keywordflow">while</span>(madeLostCount &lt; pAllocationRequest-&gt;itemsToMakeLostCount)</div>
+<div class="line"><a name="l11694"></a><span class="lineno">11694</span>&#160;    {</div>
+<div class="line"><a name="l11695"></a><span class="lineno">11695</span>&#160;        <span class="keywordflow">if</span>(index == suballocations-&gt;size())</div>
+<div class="line"><a name="l11696"></a><span class="lineno">11696</span>&#160;        {</div>
+<div class="line"><a name="l11697"></a><span class="lineno">11697</span>&#160;            index = 0;</div>
+<div class="line"><a name="l11698"></a><span class="lineno">11698</span>&#160;            <span class="comment">// If we get to the end of 1st, we wrap around to beginning of 2nd of 1st.</span></div>
+<div class="line"><a name="l11699"></a><span class="lineno">11699</span>&#160;            <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
+<div class="line"><a name="l11700"></a><span class="lineno">11700</span>&#160;            {</div>
+<div class="line"><a name="l11701"></a><span class="lineno">11701</span>&#160;                suballocations = &amp;AccessSuballocations2nd();</div>
+<div class="line"><a name="l11702"></a><span class="lineno">11702</span>&#160;            }</div>
+<div class="line"><a name="l11703"></a><span class="lineno">11703</span>&#160;            <span class="comment">// else: m_2ndVectorMode == SECOND_VECTOR_EMPTY:</span></div>
+<div class="line"><a name="l11704"></a><span class="lineno">11704</span>&#160;            <span class="comment">// suballocations continues pointing at AccessSuballocations1st().</span></div>
+<div class="line"><a name="l11705"></a><span class="lineno">11705</span>&#160;            VMA_ASSERT(!suballocations-&gt;empty());</div>
+<div class="line"><a name="l11706"></a><span class="lineno">11706</span>&#160;        }</div>
+<div class="line"><a name="l11707"></a><span class="lineno">11707</span>&#160;        VmaSuballocation&amp; suballoc = (*suballocations)[index];</div>
+<div class="line"><a name="l11708"></a><span class="lineno">11708</span>&#160;        <span class="keywordflow">if</span>(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)</div>
+<div class="line"><a name="l11709"></a><span class="lineno">11709</span>&#160;        {</div>
+<div class="line"><a name="l11710"></a><span class="lineno">11710</span>&#160;            VMA_ASSERT(suballoc.hAllocation != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l11711"></a><span class="lineno">11711</span>&#160;            VMA_ASSERT(suballoc.hAllocation-&gt;CanBecomeLost());</div>
+<div class="line"><a name="l11712"></a><span class="lineno">11712</span>&#160;            <span class="keywordflow">if</span>(suballoc.hAllocation-&gt;MakeLost(currentFrameIndex, frameInUseCount))</div>
+<div class="line"><a name="l11713"></a><span class="lineno">11713</span>&#160;            {</div>
+<div class="line"><a name="l11714"></a><span class="lineno">11714</span>&#160;                suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;</div>
+<div class="line"><a name="l11715"></a><span class="lineno">11715</span>&#160;                suballoc.hAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l11716"></a><span class="lineno">11716</span>&#160;                m_SumFreeSize += suballoc.size;</div>
+<div class="line"><a name="l11717"></a><span class="lineno">11717</span>&#160;                <span class="keywordflow">if</span>(suballocations == &amp;AccessSuballocations1st())</div>
+<div class="line"><a name="l11718"></a><span class="lineno">11718</span>&#160;                {</div>
+<div class="line"><a name="l11719"></a><span class="lineno">11719</span>&#160;                    ++m_1stNullItemsMiddleCount;</div>
+<div class="line"><a name="l11720"></a><span class="lineno">11720</span>&#160;                }</div>
+<div class="line"><a name="l11721"></a><span class="lineno">11721</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11722"></a><span class="lineno">11722</span>&#160;                {</div>
+<div class="line"><a name="l11723"></a><span class="lineno">11723</span>&#160;                    ++m_2ndNullItemsCount;</div>
+<div class="line"><a name="l11724"></a><span class="lineno">11724</span>&#160;                }</div>
+<div class="line"><a name="l11725"></a><span class="lineno">11725</span>&#160;                ++madeLostCount;</div>
+<div class="line"><a name="l11726"></a><span class="lineno">11726</span>&#160;            }</div>
+<div class="line"><a name="l11727"></a><span class="lineno">11727</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l11728"></a><span class="lineno">11728</span>&#160;            {</div>
+<div class="line"><a name="l11729"></a><span class="lineno">11729</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11730"></a><span class="lineno">11730</span>&#160;            }</div>
+<div class="line"><a name="l11731"></a><span class="lineno">11731</span>&#160;        }</div>
+<div class="line"><a name="l11732"></a><span class="lineno">11732</span>&#160;        ++index;</div>
+<div class="line"><a name="l11733"></a><span class="lineno">11733</span>&#160;    }</div>
+<div class="line"><a name="l11734"></a><span class="lineno">11734</span>&#160; </div>
+<div class="line"><a name="l11735"></a><span class="lineno">11735</span>&#160;    CleanupAfterFree();</div>
+<div class="line"><a name="l11736"></a><span class="lineno">11736</span>&#160;    <span class="comment">//VMA_HEAVY_ASSERT(Validate()); // Already called by CleanupAfterFree().</span></div>
+<div class="line"><a name="l11737"></a><span class="lineno">11737</span>&#160; </div>
+<div class="line"><a name="l11738"></a><span class="lineno">11738</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l11739"></a><span class="lineno">11739</span>&#160;}</div>
+<div class="line"><a name="l11740"></a><span class="lineno">11740</span>&#160; </div>
+<div class="line"><a name="l11741"></a><span class="lineno">11741</span>&#160;uint32_t VmaBlockMetadata_Linear::MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount)</div>
+<div class="line"><a name="l11742"></a><span class="lineno">11742</span>&#160;{</div>
+<div class="line"><a name="l11743"></a><span class="lineno">11743</span>&#160;    uint32_t lostAllocationCount = 0;</div>
+<div class="line"><a name="l11744"></a><span class="lineno">11744</span>&#160; </div>
+<div class="line"><a name="l11745"></a><span class="lineno">11745</span>&#160;    SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
+<div class="line"><a name="l11746"></a><span class="lineno">11746</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_1stNullItemsBeginCount, count = suballocations1st.size(); i &lt; count; ++i)</div>
+<div class="line"><a name="l11747"></a><span class="lineno">11747</span>&#160;    {</div>
+<div class="line"><a name="l11748"></a><span class="lineno">11748</span>&#160;        VmaSuballocation&amp; suballoc = suballocations1st[i];</div>
+<div class="line"><a name="l11749"></a><span class="lineno">11749</span>&#160;        <span class="keywordflow">if</span>(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE &amp;&amp;</div>
+<div class="line"><a name="l11750"></a><span class="lineno">11750</span>&#160;            suballoc.hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
+<div class="line"><a name="l11751"></a><span class="lineno">11751</span>&#160;            suballoc.hAllocation-&gt;MakeLost(currentFrameIndex, frameInUseCount))</div>
+<div class="line"><a name="l11752"></a><span class="lineno">11752</span>&#160;        {</div>
+<div class="line"><a name="l11753"></a><span class="lineno">11753</span>&#160;            suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;</div>
+<div class="line"><a name="l11754"></a><span class="lineno">11754</span>&#160;            suballoc.hAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l11755"></a><span class="lineno">11755</span>&#160;            ++m_1stNullItemsMiddleCount;</div>
+<div class="line"><a name="l11756"></a><span class="lineno">11756</span>&#160;            m_SumFreeSize += suballoc.size;</div>
+<div class="line"><a name="l11757"></a><span class="lineno">11757</span>&#160;            ++lostAllocationCount;</div>
+<div class="line"><a name="l11758"></a><span class="lineno">11758</span>&#160;        }</div>
+<div class="line"><a name="l11759"></a><span class="lineno">11759</span>&#160;    }</div>
+<div class="line"><a name="l11760"></a><span class="lineno">11760</span>&#160; </div>
+<div class="line"><a name="l11761"></a><span class="lineno">11761</span>&#160;    SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
+<div class="line"><a name="l11762"></a><span class="lineno">11762</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0, count = suballocations2nd.size(); i &lt; count; ++i)</div>
+<div class="line"><a name="l11763"></a><span class="lineno">11763</span>&#160;    {</div>
+<div class="line"><a name="l11764"></a><span class="lineno">11764</span>&#160;        VmaSuballocation&amp; suballoc = suballocations2nd[i];</div>
+<div class="line"><a name="l11765"></a><span class="lineno">11765</span>&#160;        <span class="keywordflow">if</span>(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE &amp;&amp;</div>
+<div class="line"><a name="l11766"></a><span class="lineno">11766</span>&#160;            suballoc.hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
+<div class="line"><a name="l11767"></a><span class="lineno">11767</span>&#160;            suballoc.hAllocation-&gt;MakeLost(currentFrameIndex, frameInUseCount))</div>
+<div class="line"><a name="l11768"></a><span class="lineno">11768</span>&#160;        {</div>
+<div class="line"><a name="l11769"></a><span class="lineno">11769</span>&#160;            suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;</div>
+<div class="line"><a name="l11770"></a><span class="lineno">11770</span>&#160;            suballoc.hAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l11771"></a><span class="lineno">11771</span>&#160;            ++m_2ndNullItemsCount;</div>
+<div class="line"><a name="l11772"></a><span class="lineno">11772</span>&#160;            m_SumFreeSize += suballoc.size;</div>
+<div class="line"><a name="l11773"></a><span class="lineno">11773</span>&#160;            ++lostAllocationCount;</div>
+<div class="line"><a name="l11774"></a><span class="lineno">11774</span>&#160;        }</div>
+<div class="line"><a name="l11775"></a><span class="lineno">11775</span>&#160;    }</div>
+<div class="line"><a name="l11776"></a><span class="lineno">11776</span>&#160; </div>
+<div class="line"><a name="l11777"></a><span class="lineno">11777</span>&#160;    <span class="keywordflow">if</span>(lostAllocationCount)</div>
+<div class="line"><a name="l11778"></a><span class="lineno">11778</span>&#160;    {</div>
+<div class="line"><a name="l11779"></a><span class="lineno">11779</span>&#160;        CleanupAfterFree();</div>
+<div class="line"><a name="l11780"></a><span class="lineno">11780</span>&#160;    }</div>
+<div class="line"><a name="l11781"></a><span class="lineno">11781</span>&#160; </div>
+<div class="line"><a name="l11782"></a><span class="lineno">11782</span>&#160;    <span class="keywordflow">return</span> lostAllocationCount;</div>
+<div class="line"><a name="l11783"></a><span class="lineno">11783</span>&#160;}</div>
+<div class="line"><a name="l11784"></a><span class="lineno">11784</span>&#160; </div>
+<div class="line"><a name="l11785"></a><span class="lineno">11785</span>&#160;VkResult VmaBlockMetadata_Linear::CheckCorruption(<span class="keyword">const</span> <span class="keywordtype">void</span>* pBlockData)</div>
+<div class="line"><a name="l11786"></a><span class="lineno">11786</span>&#160;{</div>
+<div class="line"><a name="l11787"></a><span class="lineno">11787</span>&#160;    SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
+<div class="line"><a name="l11788"></a><span class="lineno">11788</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_1stNullItemsBeginCount, count = suballocations1st.size(); i &lt; count; ++i)</div>
+<div class="line"><a name="l11789"></a><span class="lineno">11789</span>&#160;    {</div>
+<div class="line"><a name="l11790"></a><span class="lineno">11790</span>&#160;        <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations1st[i];</div>
+<div class="line"><a name="l11791"></a><span class="lineno">11791</span>&#160;        <span class="keywordflow">if</span>(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)</div>
+<div class="line"><a name="l11792"></a><span class="lineno">11792</span>&#160;        {</div>
+<div class="line"><a name="l11793"></a><span class="lineno">11793</span>&#160;            <span class="keywordflow">if</span>(!VmaValidateMagicValue(pBlockData, suballoc.offset - VMA_DEBUG_MARGIN))</div>
+<div class="line"><a name="l11794"></a><span class="lineno">11794</span>&#160;            {</div>
+<div class="line"><a name="l11795"></a><span class="lineno">11795</span>&#160;                VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED BEFORE VALIDATED ALLOCATION!&quot;</span>);</div>
+<div class="line"><a name="l11796"></a><span class="lineno">11796</span>&#160;                <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
+<div class="line"><a name="l11797"></a><span class="lineno">11797</span>&#160;            }</div>
+<div class="line"><a name="l11798"></a><span class="lineno">11798</span>&#160;            <span class="keywordflow">if</span>(!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))</div>
+<div class="line"><a name="l11799"></a><span class="lineno">11799</span>&#160;            {</div>
+<div class="line"><a name="l11800"></a><span class="lineno">11800</span>&#160;                VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!&quot;</span>);</div>
+<div class="line"><a name="l11801"></a><span class="lineno">11801</span>&#160;                <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
+<div class="line"><a name="l11802"></a><span class="lineno">11802</span>&#160;            }</div>
+<div class="line"><a name="l11803"></a><span class="lineno">11803</span>&#160;        }</div>
+<div class="line"><a name="l11804"></a><span class="lineno">11804</span>&#160;    }</div>
+<div class="line"><a name="l11805"></a><span class="lineno">11805</span>&#160; </div>
+<div class="line"><a name="l11806"></a><span class="lineno">11806</span>&#160;    SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
+<div class="line"><a name="l11807"></a><span class="lineno">11807</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0, count = suballocations2nd.size(); i &lt; count; ++i)</div>
+<div class="line"><a name="l11808"></a><span class="lineno">11808</span>&#160;    {</div>
+<div class="line"><a name="l11809"></a><span class="lineno">11809</span>&#160;        <span class="keyword">const</span> VmaSuballocation&amp; suballoc = suballocations2nd[i];</div>
+<div class="line"><a name="l11810"></a><span class="lineno">11810</span>&#160;        <span class="keywordflow">if</span>(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)</div>
+<div class="line"><a name="l11811"></a><span class="lineno">11811</span>&#160;        {</div>
+<div class="line"><a name="l11812"></a><span class="lineno">11812</span>&#160;            <span class="keywordflow">if</span>(!VmaValidateMagicValue(pBlockData, suballoc.offset - VMA_DEBUG_MARGIN))</div>
+<div class="line"><a name="l11813"></a><span class="lineno">11813</span>&#160;            {</div>
+<div class="line"><a name="l11814"></a><span class="lineno">11814</span>&#160;                VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED BEFORE VALIDATED ALLOCATION!&quot;</span>);</div>
+<div class="line"><a name="l11815"></a><span class="lineno">11815</span>&#160;                <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
+<div class="line"><a name="l11816"></a><span class="lineno">11816</span>&#160;            }</div>
+<div class="line"><a name="l11817"></a><span class="lineno">11817</span>&#160;            <span class="keywordflow">if</span>(!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))</div>
+<div class="line"><a name="l11818"></a><span class="lineno">11818</span>&#160;            {</div>
+<div class="line"><a name="l11819"></a><span class="lineno">11819</span>&#160;                VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!&quot;</span>);</div>
+<div class="line"><a name="l11820"></a><span class="lineno">11820</span>&#160;                <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
+<div class="line"><a name="l11821"></a><span class="lineno">11821</span>&#160;            }</div>
+<div class="line"><a name="l11822"></a><span class="lineno">11822</span>&#160;        }</div>
+<div class="line"><a name="l11823"></a><span class="lineno">11823</span>&#160;    }</div>
+<div class="line"><a name="l11824"></a><span class="lineno">11824</span>&#160; </div>
+<div class="line"><a name="l11825"></a><span class="lineno">11825</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l11826"></a><span class="lineno">11826</span>&#160;}</div>
+<div class="line"><a name="l11827"></a><span class="lineno">11827</span>&#160; </div>
+<div class="line"><a name="l11828"></a><span class="lineno">11828</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::Alloc(</div>
+<div class="line"><a name="l11829"></a><span class="lineno">11829</span>&#160;    <span class="keyword">const</span> VmaAllocationRequest&amp; request,</div>
+<div class="line"><a name="l11830"></a><span class="lineno">11830</span>&#160;    VmaSuballocationType type,</div>
+<div class="line"><a name="l11831"></a><span class="lineno">11831</span>&#160;    VkDeviceSize allocSize,</div>
+<div class="line"><a name="l11832"></a><span class="lineno">11832</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</div>
+<div class="line"><a name="l11833"></a><span class="lineno">11833</span>&#160;{</div>
+<div class="line"><a name="l11834"></a><span class="lineno">11834</span>&#160;    <span class="keyword">const</span> VmaSuballocation newSuballoc = { request.offset, allocSize, hAllocation, type };</div>
+<div class="line"><a name="l11835"></a><span class="lineno">11835</span>&#160; </div>
+<div class="line"><a name="l11836"></a><span class="lineno">11836</span>&#160;    <span class="keywordflow">switch</span>(request.type)</div>
+<div class="line"><a name="l11837"></a><span class="lineno">11837</span>&#160;    {</div>
+<div class="line"><a name="l11838"></a><span class="lineno">11838</span>&#160;    <span class="keywordflow">case</span> VmaAllocationRequestType::UpperAddress:</div>
+<div class="line"><a name="l11839"></a><span class="lineno">11839</span>&#160;        {</div>
+<div class="line"><a name="l11840"></a><span class="lineno">11840</span>&#160;            VMA_ASSERT(m_2ndVectorMode != SECOND_VECTOR_RING_BUFFER &amp;&amp;</div>
+<div class="line"><a name="l11841"></a><span class="lineno">11841</span>&#160;                <span class="stringliteral">&quot;CRITICAL ERROR: Trying to use linear allocator as double stack while it was already used as ring buffer.&quot;</span>);</div>
+<div class="line"><a name="l11842"></a><span class="lineno">11842</span>&#160;            SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
+<div class="line"><a name="l11843"></a><span class="lineno">11843</span>&#160;            suballocations2nd.push_back(newSuballoc);</div>
+<div class="line"><a name="l11844"></a><span class="lineno">11844</span>&#160;            m_2ndVectorMode = SECOND_VECTOR_DOUBLE_STACK;</div>
+<div class="line"><a name="l11845"></a><span class="lineno">11845</span>&#160;        }</div>
+<div class="line"><a name="l11846"></a><span class="lineno">11846</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11847"></a><span class="lineno">11847</span>&#160;    <span class="keywordflow">case</span> VmaAllocationRequestType::EndOf1st:</div>
+<div class="line"><a name="l11848"></a><span class="lineno">11848</span>&#160;        {</div>
+<div class="line"><a name="l11849"></a><span class="lineno">11849</span>&#160;            SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
+<div class="line"><a name="l11850"></a><span class="lineno">11850</span>&#160; </div>
+<div class="line"><a name="l11851"></a><span class="lineno">11851</span>&#160;            VMA_ASSERT(suballocations1st.empty() ||</div>
+<div class="line"><a name="l11852"></a><span class="lineno">11852</span>&#160;                request.offset &gt;= suballocations1st.back().offset + suballocations1st.back().size);</div>
+<div class="line"><a name="l11853"></a><span class="lineno">11853</span>&#160;            <span class="comment">// Check if it fits before the end of the block.</span></div>
+<div class="line"><a name="l11854"></a><span class="lineno">11854</span>&#160;            VMA_ASSERT(request.offset + allocSize &lt;= GetSize());</div>
+<div class="line"><a name="l11855"></a><span class="lineno">11855</span>&#160; </div>
+<div class="line"><a name="l11856"></a><span class="lineno">11856</span>&#160;            suballocations1st.push_back(newSuballoc);</div>
+<div class="line"><a name="l11857"></a><span class="lineno">11857</span>&#160;        }</div>
+<div class="line"><a name="l11858"></a><span class="lineno">11858</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11859"></a><span class="lineno">11859</span>&#160;    <span class="keywordflow">case</span> VmaAllocationRequestType::EndOf2nd:</div>
+<div class="line"><a name="l11860"></a><span class="lineno">11860</span>&#160;        {</div>
+<div class="line"><a name="l11861"></a><span class="lineno">11861</span>&#160;            SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
+<div class="line"><a name="l11862"></a><span class="lineno">11862</span>&#160;            <span class="comment">// New allocation at the end of 2-part ring buffer, so before first allocation from 1st vector.</span></div>
+<div class="line"><a name="l11863"></a><span class="lineno">11863</span>&#160;            VMA_ASSERT(!suballocations1st.empty() &amp;&amp;</div>
+<div class="line"><a name="l11864"></a><span class="lineno">11864</span>&#160;                request.offset + allocSize &lt;= suballocations1st[m_1stNullItemsBeginCount].offset);</div>
+<div class="line"><a name="l11865"></a><span class="lineno">11865</span>&#160;            SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
+<div class="line"><a name="l11866"></a><span class="lineno">11866</span>&#160; </div>
+<div class="line"><a name="l11867"></a><span class="lineno">11867</span>&#160;            <span class="keywordflow">switch</span>(m_2ndVectorMode)</div>
+<div class="line"><a name="l11868"></a><span class="lineno">11868</span>&#160;            {</div>
+<div class="line"><a name="l11869"></a><span class="lineno">11869</span>&#160;            <span class="keywordflow">case</span> SECOND_VECTOR_EMPTY:</div>
+<div class="line"><a name="l11870"></a><span class="lineno">11870</span>&#160;                <span class="comment">// First allocation from second part ring buffer.</span></div>
+<div class="line"><a name="l11871"></a><span class="lineno">11871</span>&#160;                VMA_ASSERT(suballocations2nd.empty());</div>
+<div class="line"><a name="l11872"></a><span class="lineno">11872</span>&#160;                m_2ndVectorMode = SECOND_VECTOR_RING_BUFFER;</div>
+<div class="line"><a name="l11873"></a><span class="lineno">11873</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11874"></a><span class="lineno">11874</span>&#160;            <span class="keywordflow">case</span> SECOND_VECTOR_RING_BUFFER:</div>
+<div class="line"><a name="l11875"></a><span class="lineno">11875</span>&#160;                <span class="comment">// 2-part ring buffer is already started.</span></div>
+<div class="line"><a name="l11876"></a><span class="lineno">11876</span>&#160;                VMA_ASSERT(!suballocations2nd.empty());</div>
+<div class="line"><a name="l11877"></a><span class="lineno">11877</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11878"></a><span class="lineno">11878</span>&#160;            <span class="keywordflow">case</span> SECOND_VECTOR_DOUBLE_STACK:</div>
+<div class="line"><a name="l11879"></a><span class="lineno">11879</span>&#160;                VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;CRITICAL ERROR: Trying to use linear allocator as ring buffer while it was already used as double stack.&quot;</span>);</div>
+<div class="line"><a name="l11880"></a><span class="lineno">11880</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11881"></a><span class="lineno">11881</span>&#160;            <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l11882"></a><span class="lineno">11882</span>&#160;                VMA_ASSERT(0);</div>
+<div class="line"><a name="l11883"></a><span class="lineno">11883</span>&#160;            }</div>
+<div class="line"><a name="l11884"></a><span class="lineno">11884</span>&#160; </div>
+<div class="line"><a name="l11885"></a><span class="lineno">11885</span>&#160;            suballocations2nd.push_back(newSuballoc);</div>
+<div class="line"><a name="l11886"></a><span class="lineno">11886</span>&#160;        }</div>
+<div class="line"><a name="l11887"></a><span class="lineno">11887</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11888"></a><span class="lineno">11888</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l11889"></a><span class="lineno">11889</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;CRITICAL INTERNAL ERROR.&quot;</span>);</div>
+<div class="line"><a name="l11890"></a><span class="lineno">11890</span>&#160;    }</div>
+<div class="line"><a name="l11891"></a><span class="lineno">11891</span>&#160; </div>
+<div class="line"><a name="l11892"></a><span class="lineno">11892</span>&#160;    m_SumFreeSize -= newSuballoc.size;</div>
+<div class="line"><a name="l11893"></a><span class="lineno">11893</span>&#160;}</div>
+<div class="line"><a name="l11894"></a><span class="lineno">11894</span>&#160; </div>
+<div class="line"><a name="l11895"></a><span class="lineno">11895</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::Free(<span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l11896"></a><span class="lineno">11896</span>&#160;{</div>
+<div class="line"><a name="l11897"></a><span class="lineno">11897</span>&#160;    FreeAtOffset(allocation-&gt;GetOffset());</div>
+<div class="line"><a name="l11898"></a><span class="lineno">11898</span>&#160;}</div>
+<div class="line"><a name="l11899"></a><span class="lineno">11899</span>&#160; </div>
+<div class="line"><a name="l11900"></a><span class="lineno">11900</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::FreeAtOffset(VkDeviceSize offset)</div>
+<div class="line"><a name="l11901"></a><span class="lineno">11901</span>&#160;{</div>
+<div class="line"><a name="l11902"></a><span class="lineno">11902</span>&#160;    SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
+<div class="line"><a name="l11903"></a><span class="lineno">11903</span>&#160;    SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
+<div class="line"><a name="l11904"></a><span class="lineno">11904</span>&#160; </div>
+<div class="line"><a name="l11905"></a><span class="lineno">11905</span>&#160;    <span class="keywordflow">if</span>(!suballocations1st.empty())</div>
+<div class="line"><a name="l11906"></a><span class="lineno">11906</span>&#160;    {</div>
+<div class="line"><a name="l11907"></a><span class="lineno">11907</span>&#160;        <span class="comment">// First allocation: Mark it as next empty at the beginning.</span></div>
+<div class="line"><a name="l11908"></a><span class="lineno">11908</span>&#160;        VmaSuballocation&amp; firstSuballoc = suballocations1st[m_1stNullItemsBeginCount];</div>
+<div class="line"><a name="l11909"></a><span class="lineno">11909</span>&#160;        <span class="keywordflow">if</span>(firstSuballoc.offset == offset)</div>
+<div class="line"><a name="l11910"></a><span class="lineno">11910</span>&#160;        {</div>
+<div class="line"><a name="l11911"></a><span class="lineno">11911</span>&#160;            firstSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE;</div>
+<div class="line"><a name="l11912"></a><span class="lineno">11912</span>&#160;            firstSuballoc.hAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l11913"></a><span class="lineno">11913</span>&#160;            m_SumFreeSize += firstSuballoc.size;</div>
+<div class="line"><a name="l11914"></a><span class="lineno">11914</span>&#160;            ++m_1stNullItemsBeginCount;</div>
+<div class="line"><a name="l11915"></a><span class="lineno">11915</span>&#160;            CleanupAfterFree();</div>
+<div class="line"><a name="l11916"></a><span class="lineno">11916</span>&#160;            <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l11917"></a><span class="lineno">11917</span>&#160;        }</div>
+<div class="line"><a name="l11918"></a><span class="lineno">11918</span>&#160;    }</div>
+<div class="line"><a name="l11919"></a><span class="lineno">11919</span>&#160; </div>
+<div class="line"><a name="l11920"></a><span class="lineno">11920</span>&#160;    <span class="comment">// Last allocation in 2-part ring buffer or top of upper stack (same logic).</span></div>
+<div class="line"><a name="l11921"></a><span class="lineno">11921</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER ||</div>
+<div class="line"><a name="l11922"></a><span class="lineno">11922</span>&#160;        m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)</div>
+<div class="line"><a name="l11923"></a><span class="lineno">11923</span>&#160;    {</div>
+<div class="line"><a name="l11924"></a><span class="lineno">11924</span>&#160;        VmaSuballocation&amp; lastSuballoc = suballocations2nd.back();</div>
+<div class="line"><a name="l11925"></a><span class="lineno">11925</span>&#160;        <span class="keywordflow">if</span>(lastSuballoc.offset == offset)</div>
+<div class="line"><a name="l11926"></a><span class="lineno">11926</span>&#160;        {</div>
+<div class="line"><a name="l11927"></a><span class="lineno">11927</span>&#160;            m_SumFreeSize += lastSuballoc.size;</div>
+<div class="line"><a name="l11928"></a><span class="lineno">11928</span>&#160;            suballocations2nd.pop_back();</div>
+<div class="line"><a name="l11929"></a><span class="lineno">11929</span>&#160;            CleanupAfterFree();</div>
+<div class="line"><a name="l11930"></a><span class="lineno">11930</span>&#160;            <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l11931"></a><span class="lineno">11931</span>&#160;        }</div>
+<div class="line"><a name="l11932"></a><span class="lineno">11932</span>&#160;    }</div>
+<div class="line"><a name="l11933"></a><span class="lineno">11933</span>&#160;    <span class="comment">// Last allocation in 1st vector.</span></div>
+<div class="line"><a name="l11934"></a><span class="lineno">11934</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_2ndVectorMode == SECOND_VECTOR_EMPTY)</div>
+<div class="line"><a name="l11935"></a><span class="lineno">11935</span>&#160;    {</div>
+<div class="line"><a name="l11936"></a><span class="lineno">11936</span>&#160;        VmaSuballocation&amp; lastSuballoc = suballocations1st.back();</div>
+<div class="line"><a name="l11937"></a><span class="lineno">11937</span>&#160;        <span class="keywordflow">if</span>(lastSuballoc.offset == offset)</div>
+<div class="line"><a name="l11938"></a><span class="lineno">11938</span>&#160;        {</div>
+<div class="line"><a name="l11939"></a><span class="lineno">11939</span>&#160;            m_SumFreeSize += lastSuballoc.size;</div>
+<div class="line"><a name="l11940"></a><span class="lineno">11940</span>&#160;            suballocations1st.pop_back();</div>
+<div class="line"><a name="l11941"></a><span class="lineno">11941</span>&#160;            CleanupAfterFree();</div>
+<div class="line"><a name="l11942"></a><span class="lineno">11942</span>&#160;            <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l11943"></a><span class="lineno">11943</span>&#160;        }</div>
+<div class="line"><a name="l11944"></a><span class="lineno">11944</span>&#160;    }</div>
+<div class="line"><a name="l11945"></a><span class="lineno">11945</span>&#160; </div>
+<div class="line"><a name="l11946"></a><span class="lineno">11946</span>&#160;    <span class="comment">// Item from the middle of 1st vector.</span></div>
+<div class="line"><a name="l11947"></a><span class="lineno">11947</span>&#160;    {</div>
+<div class="line"><a name="l11948"></a><span class="lineno">11948</span>&#160;        VmaSuballocation refSuballoc;</div>
+<div class="line"><a name="l11949"></a><span class="lineno">11949</span>&#160;        refSuballoc.offset = offset;</div>
+<div class="line"><a name="l11950"></a><span class="lineno">11950</span>&#160;        <span class="comment">// Rest of members stays uninitialized intentionally for better performance.</span></div>
+<div class="line"><a name="l11951"></a><span class="lineno">11951</span>&#160;        SuballocationVectorType::iterator it = VmaBinaryFindSorted(</div>
+<div class="line"><a name="l11952"></a><span class="lineno">11952</span>&#160;            suballocations1st.begin() + m_1stNullItemsBeginCount,</div>
+<div class="line"><a name="l11953"></a><span class="lineno">11953</span>&#160;            suballocations1st.end(),</div>
+<div class="line"><a name="l11954"></a><span class="lineno">11954</span>&#160;            refSuballoc,</div>
+<div class="line"><a name="l11955"></a><span class="lineno">11955</span>&#160;            VmaSuballocationOffsetLess());</div>
+<div class="line"><a name="l11956"></a><span class="lineno">11956</span>&#160;        <span class="keywordflow">if</span>(it != suballocations1st.end())</div>
+<div class="line"><a name="l11957"></a><span class="lineno">11957</span>&#160;        {</div>
+<div class="line"><a name="l11958"></a><span class="lineno">11958</span>&#160;            it-&gt;type = VMA_SUBALLOCATION_TYPE_FREE;</div>
+<div class="line"><a name="l11959"></a><span class="lineno">11959</span>&#160;            it-&gt;hAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l11960"></a><span class="lineno">11960</span>&#160;            ++m_1stNullItemsMiddleCount;</div>
+<div class="line"><a name="l11961"></a><span class="lineno">11961</span>&#160;            m_SumFreeSize += it-&gt;size;</div>
+<div class="line"><a name="l11962"></a><span class="lineno">11962</span>&#160;            CleanupAfterFree();</div>
+<div class="line"><a name="l11963"></a><span class="lineno">11963</span>&#160;            <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l11964"></a><span class="lineno">11964</span>&#160;        }</div>
+<div class="line"><a name="l11965"></a><span class="lineno">11965</span>&#160;    }</div>
+<div class="line"><a name="l11966"></a><span class="lineno">11966</span>&#160; </div>
+<div class="line"><a name="l11967"></a><span class="lineno">11967</span>&#160;    <span class="keywordflow">if</span>(m_2ndVectorMode != SECOND_VECTOR_EMPTY)</div>
+<div class="line"><a name="l11968"></a><span class="lineno">11968</span>&#160;    {</div>
+<div class="line"><a name="l11969"></a><span class="lineno">11969</span>&#160;        <span class="comment">// Item from the middle of 2nd vector.</span></div>
+<div class="line"><a name="l11970"></a><span class="lineno">11970</span>&#160;        VmaSuballocation refSuballoc;</div>
+<div class="line"><a name="l11971"></a><span class="lineno">11971</span>&#160;        refSuballoc.offset = offset;</div>
+<div class="line"><a name="l11972"></a><span class="lineno">11972</span>&#160;        <span class="comment">// Rest of members stays uninitialized intentionally for better performance.</span></div>
+<div class="line"><a name="l11973"></a><span class="lineno">11973</span>&#160;        SuballocationVectorType::iterator it = m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER ?</div>
+<div class="line"><a name="l11974"></a><span class="lineno">11974</span>&#160;            VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetLess()) :</div>
+<div class="line"><a name="l11975"></a><span class="lineno">11975</span>&#160;            VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetGreater());</div>
+<div class="line"><a name="l11976"></a><span class="lineno">11976</span>&#160;        <span class="keywordflow">if</span>(it != suballocations2nd.end())</div>
+<div class="line"><a name="l11977"></a><span class="lineno">11977</span>&#160;        {</div>
+<div class="line"><a name="l11978"></a><span class="lineno">11978</span>&#160;            it-&gt;type = VMA_SUBALLOCATION_TYPE_FREE;</div>
+<div class="line"><a name="l11979"></a><span class="lineno">11979</span>&#160;            it-&gt;hAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l11980"></a><span class="lineno">11980</span>&#160;            ++m_2ndNullItemsCount;</div>
+<div class="line"><a name="l11981"></a><span class="lineno">11981</span>&#160;            m_SumFreeSize += it-&gt;size;</div>
+<div class="line"><a name="l11982"></a><span class="lineno">11982</span>&#160;            CleanupAfterFree();</div>
+<div class="line"><a name="l11983"></a><span class="lineno">11983</span>&#160;            <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l11984"></a><span class="lineno">11984</span>&#160;        }</div>
+<div class="line"><a name="l11985"></a><span class="lineno">11985</span>&#160;    }</div>
+<div class="line"><a name="l11986"></a><span class="lineno">11986</span>&#160; </div>
+<div class="line"><a name="l11987"></a><span class="lineno">11987</span>&#160;    VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Allocation to free not found in linear allocator!&quot;</span>);</div>
+<div class="line"><a name="l11988"></a><span class="lineno">11988</span>&#160;}</div>
+<div class="line"><a name="l11989"></a><span class="lineno">11989</span>&#160; </div>
+<div class="line"><a name="l11990"></a><span class="lineno">11990</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Linear::ShouldCompact1st()<span class="keyword"> const</span></div>
+<div class="line"><a name="l11991"></a><span class="lineno">11991</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l11992"></a><span class="lineno">11992</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> nullItemCount = m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount;</div>
+<div class="line"><a name="l11993"></a><span class="lineno">11993</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballocCount = AccessSuballocations1st().size();</div>
+<div class="line"><a name="l11994"></a><span class="lineno">11994</span>&#160;    <span class="keywordflow">return</span> suballocCount &gt; 32 &amp;&amp; nullItemCount * 2 &gt;= (suballocCount - nullItemCount) * 3;</div>
+<div class="line"><a name="l11995"></a><span class="lineno">11995</span>&#160;}</div>
+<div class="line"><a name="l11996"></a><span class="lineno">11996</span>&#160; </div>
+<div class="line"><a name="l11997"></a><span class="lineno">11997</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Linear::CleanupAfterFree()</div>
+<div class="line"><a name="l11998"></a><span class="lineno">11998</span>&#160;{</div>
+<div class="line"><a name="l11999"></a><span class="lineno">11999</span>&#160;    SuballocationVectorType&amp; suballocations1st = AccessSuballocations1st();</div>
+<div class="line"><a name="l12000"></a><span class="lineno">12000</span>&#160;    SuballocationVectorType&amp; suballocations2nd = AccessSuballocations2nd();</div>
+<div class="line"><a name="l12001"></a><span class="lineno">12001</span>&#160; </div>
+<div class="line"><a name="l12002"></a><span class="lineno">12002</span>&#160;    <span class="keywordflow">if</span>(IsEmpty())</div>
+<div class="line"><a name="l12003"></a><span class="lineno">12003</span>&#160;    {</div>
+<div class="line"><a name="l12004"></a><span class="lineno">12004</span>&#160;        suballocations1st.clear();</div>
+<div class="line"><a name="l12005"></a><span class="lineno">12005</span>&#160;        suballocations2nd.clear();</div>
+<div class="line"><a name="l12006"></a><span class="lineno">12006</span>&#160;        m_1stNullItemsBeginCount = 0;</div>
+<div class="line"><a name="l12007"></a><span class="lineno">12007</span>&#160;        m_1stNullItemsMiddleCount = 0;</div>
+<div class="line"><a name="l12008"></a><span class="lineno">12008</span>&#160;        m_2ndNullItemsCount = 0;</div>
+<div class="line"><a name="l12009"></a><span class="lineno">12009</span>&#160;        m_2ndVectorMode = SECOND_VECTOR_EMPTY;</div>
+<div class="line"><a name="l12010"></a><span class="lineno">12010</span>&#160;    }</div>
+<div class="line"><a name="l12011"></a><span class="lineno">12011</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l12012"></a><span class="lineno">12012</span>&#160;    {</div>
+<div class="line"><a name="l12013"></a><span class="lineno">12013</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> suballoc1stCount = suballocations1st.size();</div>
+<div class="line"><a name="l12014"></a><span class="lineno">12014</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> nullItem1stCount = m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount;</div>
+<div class="line"><a name="l12015"></a><span class="lineno">12015</span>&#160;        VMA_ASSERT(nullItem1stCount &lt;= suballoc1stCount);</div>
+<div class="line"><a name="l12016"></a><span class="lineno">12016</span>&#160; </div>
+<div class="line"><a name="l12017"></a><span class="lineno">12017</span>&#160;        <span class="comment">// Find more null items at the beginning of 1st vector.</span></div>
+<div class="line"><a name="l12018"></a><span class="lineno">12018</span>&#160;        <span class="keywordflow">while</span>(m_1stNullItemsBeginCount &lt; suballoc1stCount &amp;&amp;</div>
+<div class="line"><a name="l12019"></a><span class="lineno">12019</span>&#160;            suballocations1st[m_1stNullItemsBeginCount].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l12020"></a><span class="lineno">12020</span>&#160;        {</div>
+<div class="line"><a name="l12021"></a><span class="lineno">12021</span>&#160;            ++m_1stNullItemsBeginCount;</div>
+<div class="line"><a name="l12022"></a><span class="lineno">12022</span>&#160;            --m_1stNullItemsMiddleCount;</div>
+<div class="line"><a name="l12023"></a><span class="lineno">12023</span>&#160;        }</div>
+<div class="line"><a name="l12024"></a><span class="lineno">12024</span>&#160; </div>
+<div class="line"><a name="l12025"></a><span class="lineno">12025</span>&#160;        <span class="comment">// Find more null items at the end of 1st vector.</span></div>
+<div class="line"><a name="l12026"></a><span class="lineno">12026</span>&#160;        <span class="keywordflow">while</span>(m_1stNullItemsMiddleCount &gt; 0 &amp;&amp;</div>
+<div class="line"><a name="l12027"></a><span class="lineno">12027</span>&#160;            suballocations1st.back().hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l12028"></a><span class="lineno">12028</span>&#160;        {</div>
+<div class="line"><a name="l12029"></a><span class="lineno">12029</span>&#160;            --m_1stNullItemsMiddleCount;</div>
+<div class="line"><a name="l12030"></a><span class="lineno">12030</span>&#160;            suballocations1st.pop_back();</div>
+<div class="line"><a name="l12031"></a><span class="lineno">12031</span>&#160;        }</div>
+<div class="line"><a name="l12032"></a><span class="lineno">12032</span>&#160; </div>
+<div class="line"><a name="l12033"></a><span class="lineno">12033</span>&#160;        <span class="comment">// Find more null items at the end of 2nd vector.</span></div>
+<div class="line"><a name="l12034"></a><span class="lineno">12034</span>&#160;        <span class="keywordflow">while</span>(m_2ndNullItemsCount &gt; 0 &amp;&amp;</div>
+<div class="line"><a name="l12035"></a><span class="lineno">12035</span>&#160;            suballocations2nd.back().hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l12036"></a><span class="lineno">12036</span>&#160;        {</div>
+<div class="line"><a name="l12037"></a><span class="lineno">12037</span>&#160;            --m_2ndNullItemsCount;</div>
+<div class="line"><a name="l12038"></a><span class="lineno">12038</span>&#160;            suballocations2nd.pop_back();</div>
+<div class="line"><a name="l12039"></a><span class="lineno">12039</span>&#160;        }</div>
+<div class="line"><a name="l12040"></a><span class="lineno">12040</span>&#160; </div>
+<div class="line"><a name="l12041"></a><span class="lineno">12041</span>&#160;        <span class="comment">// Find more null items at the beginning of 2nd vector.</span></div>
+<div class="line"><a name="l12042"></a><span class="lineno">12042</span>&#160;        <span class="keywordflow">while</span>(m_2ndNullItemsCount &gt; 0 &amp;&amp;</div>
+<div class="line"><a name="l12043"></a><span class="lineno">12043</span>&#160;            suballocations2nd[0].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l12044"></a><span class="lineno">12044</span>&#160;        {</div>
+<div class="line"><a name="l12045"></a><span class="lineno">12045</span>&#160;            --m_2ndNullItemsCount;</div>
+<div class="line"><a name="l12046"></a><span class="lineno">12046</span>&#160;            VmaVectorRemove(suballocations2nd, 0);</div>
+<div class="line"><a name="l12047"></a><span class="lineno">12047</span>&#160;        }</div>
+<div class="line"><a name="l12048"></a><span class="lineno">12048</span>&#160; </div>
+<div class="line"><a name="l12049"></a><span class="lineno">12049</span>&#160;        <span class="keywordflow">if</span>(ShouldCompact1st())</div>
+<div class="line"><a name="l12050"></a><span class="lineno">12050</span>&#160;        {</div>
+<div class="line"><a name="l12051"></a><span class="lineno">12051</span>&#160;            <span class="keyword">const</span> <span class="keywordtype">size_t</span> nonNullItemCount = suballoc1stCount - nullItem1stCount;</div>
+<div class="line"><a name="l12052"></a><span class="lineno">12052</span>&#160;            <span class="keywordtype">size_t</span> srcIndex = m_1stNullItemsBeginCount;</div>
+<div class="line"><a name="l12053"></a><span class="lineno">12053</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> dstIndex = 0; dstIndex &lt; nonNullItemCount; ++dstIndex)</div>
+<div class="line"><a name="l12054"></a><span class="lineno">12054</span>&#160;            {</div>
+<div class="line"><a name="l12055"></a><span class="lineno">12055</span>&#160;                <span class="keywordflow">while</span>(suballocations1st[srcIndex].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l12056"></a><span class="lineno">12056</span>&#160;                {</div>
+<div class="line"><a name="l12057"></a><span class="lineno">12057</span>&#160;                    ++srcIndex;</div>
+<div class="line"><a name="l12058"></a><span class="lineno">12058</span>&#160;                }</div>
+<div class="line"><a name="l12059"></a><span class="lineno">12059</span>&#160;                <span class="keywordflow">if</span>(dstIndex != srcIndex)</div>
+<div class="line"><a name="l12060"></a><span class="lineno">12060</span>&#160;                {</div>
+<div class="line"><a name="l12061"></a><span class="lineno">12061</span>&#160;                    suballocations1st[dstIndex] = suballocations1st[srcIndex];</div>
+<div class="line"><a name="l12062"></a><span class="lineno">12062</span>&#160;                }</div>
+<div class="line"><a name="l12063"></a><span class="lineno">12063</span>&#160;                ++srcIndex;</div>
+<div class="line"><a name="l12064"></a><span class="lineno">12064</span>&#160;            }</div>
+<div class="line"><a name="l12065"></a><span class="lineno">12065</span>&#160;            suballocations1st.resize(nonNullItemCount);</div>
+<div class="line"><a name="l12066"></a><span class="lineno">12066</span>&#160;            m_1stNullItemsBeginCount = 0;</div>
+<div class="line"><a name="l12067"></a><span class="lineno">12067</span>&#160;            m_1stNullItemsMiddleCount = 0;</div>
+<div class="line"><a name="l12068"></a><span class="lineno">12068</span>&#160;        }</div>
+<div class="line"><a name="l12069"></a><span class="lineno">12069</span>&#160; </div>
+<div class="line"><a name="l12070"></a><span class="lineno">12070</span>&#160;        <span class="comment">// 2nd vector became empty.</span></div>
+<div class="line"><a name="l12071"></a><span class="lineno">12071</span>&#160;        <span class="keywordflow">if</span>(suballocations2nd.empty())</div>
+<div class="line"><a name="l12072"></a><span class="lineno">12072</span>&#160;        {</div>
+<div class="line"><a name="l12073"></a><span class="lineno">12073</span>&#160;            m_2ndVectorMode = SECOND_VECTOR_EMPTY;</div>
+<div class="line"><a name="l12074"></a><span class="lineno">12074</span>&#160;        }</div>
+<div class="line"><a name="l12075"></a><span class="lineno">12075</span>&#160; </div>
+<div class="line"><a name="l12076"></a><span class="lineno">12076</span>&#160;        <span class="comment">// 1st vector became empty.</span></div>
+<div class="line"><a name="l12077"></a><span class="lineno">12077</span>&#160;        <span class="keywordflow">if</span>(suballocations1st.size() - m_1stNullItemsBeginCount == 0)</div>
+<div class="line"><a name="l12078"></a><span class="lineno">12078</span>&#160;        {</div>
+<div class="line"><a name="l12079"></a><span class="lineno">12079</span>&#160;            suballocations1st.clear();</div>
+<div class="line"><a name="l12080"></a><span class="lineno">12080</span>&#160;            m_1stNullItemsBeginCount = 0;</div>
+<div class="line"><a name="l12081"></a><span class="lineno">12081</span>&#160; </div>
+<div class="line"><a name="l12082"></a><span class="lineno">12082</span>&#160;            <span class="keywordflow">if</span>(!suballocations2nd.empty() &amp;&amp; m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)</div>
+<div class="line"><a name="l12083"></a><span class="lineno">12083</span>&#160;            {</div>
+<div class="line"><a name="l12084"></a><span class="lineno">12084</span>&#160;                <span class="comment">// Swap 1st with 2nd. Now 2nd is empty.</span></div>
+<div class="line"><a name="l12085"></a><span class="lineno">12085</span>&#160;                m_2ndVectorMode = SECOND_VECTOR_EMPTY;</div>
+<div class="line"><a name="l12086"></a><span class="lineno">12086</span>&#160;                m_1stNullItemsMiddleCount = m_2ndNullItemsCount;</div>
+<div class="line"><a name="l12087"></a><span class="lineno">12087</span>&#160;                <span class="keywordflow">while</span>(m_1stNullItemsBeginCount &lt; suballocations2nd.size() &amp;&amp;</div>
+<div class="line"><a name="l12088"></a><span class="lineno">12088</span>&#160;                    suballocations2nd[m_1stNullItemsBeginCount].hAllocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l12089"></a><span class="lineno">12089</span>&#160;                {</div>
+<div class="line"><a name="l12090"></a><span class="lineno">12090</span>&#160;                    ++m_1stNullItemsBeginCount;</div>
+<div class="line"><a name="l12091"></a><span class="lineno">12091</span>&#160;                    --m_1stNullItemsMiddleCount;</div>
+<div class="line"><a name="l12092"></a><span class="lineno">12092</span>&#160;                }</div>
+<div class="line"><a name="l12093"></a><span class="lineno">12093</span>&#160;                m_2ndNullItemsCount = 0;</div>
+<div class="line"><a name="l12094"></a><span class="lineno">12094</span>&#160;                m_1stVectorIndex ^= 1;</div>
+<div class="line"><a name="l12095"></a><span class="lineno">12095</span>&#160;            }</div>
+<div class="line"><a name="l12096"></a><span class="lineno">12096</span>&#160;        }</div>
+<div class="line"><a name="l12097"></a><span class="lineno">12097</span>&#160;    }</div>
+<div class="line"><a name="l12098"></a><span class="lineno">12098</span>&#160; </div>
+<div class="line"><a name="l12099"></a><span class="lineno">12099</span>&#160;    VMA_HEAVY_ASSERT(Validate());</div>
+<div class="line"><a name="l12100"></a><span class="lineno">12100</span>&#160;}</div>
+<div class="line"><a name="l12101"></a><span class="lineno">12101</span>&#160; </div>
 <div class="line"><a name="l12102"></a><span class="lineno">12102</span>&#160; </div>
-<div class="line"><a name="l12103"></a><span class="lineno">12103</span>&#160; </div>
-<div class="line"><a name="l12105"></a><span class="lineno">12105</span>&#160;<span class="comment">// class VmaBlockMetadata_Buddy</span></div>
-<div class="line"><a name="l12106"></a><span class="lineno">12106</span>&#160; </div>
-<div class="line"><a name="l12107"></a><span class="lineno">12107</span>&#160;VmaBlockMetadata_Buddy::VmaBlockMetadata_Buddy(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator) :</div>
-<div class="line"><a name="l12108"></a><span class="lineno">12108</span>&#160;    VmaBlockMetadata(hAllocator),</div>
-<div class="line"><a name="l12109"></a><span class="lineno">12109</span>&#160;    m_Root(VMA_NULL),</div>
-<div class="line"><a name="l12110"></a><span class="lineno">12110</span>&#160;    m_AllocationCount(0),</div>
-<div class="line"><a name="l12111"></a><span class="lineno">12111</span>&#160;    m_FreeCount(1),</div>
-<div class="line"><a name="l12112"></a><span class="lineno">12112</span>&#160;    m_SumFreeSize(0)</div>
-<div class="line"><a name="l12113"></a><span class="lineno">12113</span>&#160;{</div>
-<div class="line"><a name="l12114"></a><span class="lineno">12114</span>&#160;    memset(m_FreeList, 0, <span class="keyword">sizeof</span>(m_FreeList));</div>
-<div class="line"><a name="l12115"></a><span class="lineno">12115</span>&#160;}</div>
-<div class="line"><a name="l12116"></a><span class="lineno">12116</span>&#160; </div>
-<div class="line"><a name="l12117"></a><span class="lineno">12117</span>&#160;VmaBlockMetadata_Buddy::~VmaBlockMetadata_Buddy()</div>
-<div class="line"><a name="l12118"></a><span class="lineno">12118</span>&#160;{</div>
-<div class="line"><a name="l12119"></a><span class="lineno">12119</span>&#160;    DeleteNode(m_Root);</div>
-<div class="line"><a name="l12120"></a><span class="lineno">12120</span>&#160;}</div>
-<div class="line"><a name="l12121"></a><span class="lineno">12121</span>&#160; </div>
-<div class="line"><a name="l12122"></a><span class="lineno">12122</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::Init(VkDeviceSize size)</div>
-<div class="line"><a name="l12123"></a><span class="lineno">12123</span>&#160;{</div>
-<div class="line"><a name="l12124"></a><span class="lineno">12124</span>&#160;    VmaBlockMetadata::Init(size);</div>
-<div class="line"><a name="l12125"></a><span class="lineno">12125</span>&#160; </div>
-<div class="line"><a name="l12126"></a><span class="lineno">12126</span>&#160;    m_UsableSize = VmaPrevPow2(size);</div>
-<div class="line"><a name="l12127"></a><span class="lineno">12127</span>&#160;    m_SumFreeSize = m_UsableSize;</div>
-<div class="line"><a name="l12128"></a><span class="lineno">12128</span>&#160; </div>
-<div class="line"><a name="l12129"></a><span class="lineno">12129</span>&#160;    <span class="comment">// Calculate m_LevelCount.</span></div>
-<div class="line"><a name="l12130"></a><span class="lineno">12130</span>&#160;    m_LevelCount = 1;</div>
-<div class="line"><a name="l12131"></a><span class="lineno">12131</span>&#160;    <span class="keywordflow">while</span>(m_LevelCount &lt; MAX_LEVELS &amp;&amp;</div>
-<div class="line"><a name="l12132"></a><span class="lineno">12132</span>&#160;        LevelToNodeSize(m_LevelCount) &gt;= MIN_NODE_SIZE)</div>
-<div class="line"><a name="l12133"></a><span class="lineno">12133</span>&#160;    {</div>
-<div class="line"><a name="l12134"></a><span class="lineno">12134</span>&#160;        ++m_LevelCount;</div>
-<div class="line"><a name="l12135"></a><span class="lineno">12135</span>&#160;    }</div>
-<div class="line"><a name="l12136"></a><span class="lineno">12136</span>&#160; </div>
-<div class="line"><a name="l12137"></a><span class="lineno">12137</span>&#160;    Node* rootNode = vma_new(GetAllocationCallbacks(), Node)();</div>
-<div class="line"><a name="l12138"></a><span class="lineno">12138</span>&#160;    rootNode-&gt;offset = 0;</div>
-<div class="line"><a name="l12139"></a><span class="lineno">12139</span>&#160;    rootNode-&gt;type = Node::TYPE_FREE;</div>
-<div class="line"><a name="l12140"></a><span class="lineno">12140</span>&#160;    rootNode-&gt;parent = VMA_NULL;</div>
-<div class="line"><a name="l12141"></a><span class="lineno">12141</span>&#160;    rootNode-&gt;buddy = VMA_NULL;</div>
-<div class="line"><a name="l12142"></a><span class="lineno">12142</span>&#160; </div>
-<div class="line"><a name="l12143"></a><span class="lineno">12143</span>&#160;    m_Root = rootNode;</div>
-<div class="line"><a name="l12144"></a><span class="lineno">12144</span>&#160;    AddToFreeListFront(0, rootNode);</div>
-<div class="line"><a name="l12145"></a><span class="lineno">12145</span>&#160;}</div>
-<div class="line"><a name="l12146"></a><span class="lineno">12146</span>&#160; </div>
-<div class="line"><a name="l12147"></a><span class="lineno">12147</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Buddy::Validate()<span class="keyword"> const</span></div>
-<div class="line"><a name="l12148"></a><span class="lineno">12148</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l12149"></a><span class="lineno">12149</span>&#160;    <span class="comment">// Validate tree.</span></div>
-<div class="line"><a name="l12150"></a><span class="lineno">12150</span>&#160;    ValidationContext ctx;</div>
-<div class="line"><a name="l12151"></a><span class="lineno">12151</span>&#160;    <span class="keywordflow">if</span>(!ValidateNode(ctx, VMA_NULL, m_Root, 0, LevelToNodeSize(0)))</div>
-<div class="line"><a name="l12152"></a><span class="lineno">12152</span>&#160;    {</div>
-<div class="line"><a name="l12153"></a><span class="lineno">12153</span>&#160;        VMA_VALIDATE(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;ValidateNode failed.&quot;</span>);</div>
-<div class="line"><a name="l12154"></a><span class="lineno">12154</span>&#160;    }</div>
-<div class="line"><a name="l12155"></a><span class="lineno">12155</span>&#160;    VMA_VALIDATE(m_AllocationCount == ctx.calculatedAllocationCount);</div>
-<div class="line"><a name="l12156"></a><span class="lineno">12156</span>&#160;    VMA_VALIDATE(m_SumFreeSize == ctx.calculatedSumFreeSize);</div>
-<div class="line"><a name="l12157"></a><span class="lineno">12157</span>&#160; </div>
-<div class="line"><a name="l12158"></a><span class="lineno">12158</span>&#160;    <span class="comment">// Validate free node lists.</span></div>
-<div class="line"><a name="l12159"></a><span class="lineno">12159</span>&#160;    <span class="keywordflow">for</span>(uint32_t level = 0; level &lt; m_LevelCount; ++level)</div>
-<div class="line"><a name="l12160"></a><span class="lineno">12160</span>&#160;    {</div>
-<div class="line"><a name="l12161"></a><span class="lineno">12161</span>&#160;        VMA_VALIDATE(m_FreeList[level].front == VMA_NULL ||</div>
-<div class="line"><a name="l12162"></a><span class="lineno">12162</span>&#160;            m_FreeList[level].front-&gt;free.prev == VMA_NULL);</div>
-<div class="line"><a name="l12163"></a><span class="lineno">12163</span>&#160; </div>
-<div class="line"><a name="l12164"></a><span class="lineno">12164</span>&#160;        <span class="keywordflow">for</span>(Node* node = m_FreeList[level].front;</div>
-<div class="line"><a name="l12165"></a><span class="lineno">12165</span>&#160;            node != VMA_NULL;</div>
-<div class="line"><a name="l12166"></a><span class="lineno">12166</span>&#160;            node = node-&gt;free.next)</div>
-<div class="line"><a name="l12167"></a><span class="lineno">12167</span>&#160;        {</div>
-<div class="line"><a name="l12168"></a><span class="lineno">12168</span>&#160;            VMA_VALIDATE(node-&gt;type == Node::TYPE_FREE);</div>
-<div class="line"><a name="l12169"></a><span class="lineno">12169</span>&#160; </div>
-<div class="line"><a name="l12170"></a><span class="lineno">12170</span>&#160;            <span class="keywordflow">if</span>(node-&gt;free.next == VMA_NULL)</div>
-<div class="line"><a name="l12171"></a><span class="lineno">12171</span>&#160;            {</div>
-<div class="line"><a name="l12172"></a><span class="lineno">12172</span>&#160;                VMA_VALIDATE(m_FreeList[level].back == node);</div>
-<div class="line"><a name="l12173"></a><span class="lineno">12173</span>&#160;            }</div>
-<div class="line"><a name="l12174"></a><span class="lineno">12174</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l12175"></a><span class="lineno">12175</span>&#160;            {</div>
-<div class="line"><a name="l12176"></a><span class="lineno">12176</span>&#160;                VMA_VALIDATE(node-&gt;free.next-&gt;free.prev == node);</div>
-<div class="line"><a name="l12177"></a><span class="lineno">12177</span>&#160;            }</div>
-<div class="line"><a name="l12178"></a><span class="lineno">12178</span>&#160;        }</div>
-<div class="line"><a name="l12179"></a><span class="lineno">12179</span>&#160;    }</div>
-<div class="line"><a name="l12180"></a><span class="lineno">12180</span>&#160; </div>
-<div class="line"><a name="l12181"></a><span class="lineno">12181</span>&#160;    <span class="comment">// Validate that free lists ar higher levels are empty.</span></div>
-<div class="line"><a name="l12182"></a><span class="lineno">12182</span>&#160;    <span class="keywordflow">for</span>(uint32_t level = m_LevelCount; level &lt; MAX_LEVELS; ++level)</div>
-<div class="line"><a name="l12183"></a><span class="lineno">12183</span>&#160;    {</div>
-<div class="line"><a name="l12184"></a><span class="lineno">12184</span>&#160;        VMA_VALIDATE(m_FreeList[level].front == VMA_NULL &amp;&amp; m_FreeList[level].back == VMA_NULL);</div>
-<div class="line"><a name="l12185"></a><span class="lineno">12185</span>&#160;    }</div>
-<div class="line"><a name="l12186"></a><span class="lineno">12186</span>&#160; </div>
-<div class="line"><a name="l12187"></a><span class="lineno">12187</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l12188"></a><span class="lineno">12188</span>&#160;}</div>
-<div class="line"><a name="l12189"></a><span class="lineno">12189</span>&#160; </div>
-<div class="line"><a name="l12190"></a><span class="lineno">12190</span>&#160;VkDeviceSize VmaBlockMetadata_Buddy::GetUnusedRangeSizeMax()<span class="keyword"> const</span></div>
-<div class="line"><a name="l12191"></a><span class="lineno">12191</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l12192"></a><span class="lineno">12192</span>&#160;    <span class="keywordflow">for</span>(uint32_t level = 0; level &lt; m_LevelCount; ++level)</div>
-<div class="line"><a name="l12193"></a><span class="lineno">12193</span>&#160;    {</div>
-<div class="line"><a name="l12194"></a><span class="lineno">12194</span>&#160;        <span class="keywordflow">if</span>(m_FreeList[level].front != VMA_NULL)</div>
-<div class="line"><a name="l12195"></a><span class="lineno">12195</span>&#160;        {</div>
-<div class="line"><a name="l12196"></a><span class="lineno">12196</span>&#160;            <span class="keywordflow">return</span> LevelToNodeSize(level);</div>
-<div class="line"><a name="l12197"></a><span class="lineno">12197</span>&#160;        }</div>
-<div class="line"><a name="l12198"></a><span class="lineno">12198</span>&#160;    }</div>
-<div class="line"><a name="l12199"></a><span class="lineno">12199</span>&#160;    <span class="keywordflow">return</span> 0;</div>
-<div class="line"><a name="l12200"></a><span class="lineno">12200</span>&#160;}</div>
-<div class="line"><a name="l12201"></a><span class="lineno">12201</span>&#160; </div>
-<div class="line"><a name="l12202"></a><span class="lineno">12202</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::CalcAllocationStatInfo(<a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a>&amp; outInfo)<span class="keyword"> const</span></div>
-<div class="line"><a name="l12203"></a><span class="lineno">12203</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l12204"></a><span class="lineno">12204</span>&#160;    <span class="keyword">const</span> VkDeviceSize unusableSize = GetUnusableSize();</div>
-<div class="line"><a name="l12205"></a><span class="lineno">12205</span>&#160; </div>
-<div class="line"><a name="l12206"></a><span class="lineno">12206</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a> = 1;</div>
-<div class="line"><a name="l12207"></a><span class="lineno">12207</span>&#160; </div>
-<div class="line"><a name="l12208"></a><span class="lineno">12208</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a> = outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a> = 0;</div>
-<div class="line"><a name="l12209"></a><span class="lineno">12209</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a> = outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> = 0;</div>
-<div class="line"><a name="l12210"></a><span class="lineno">12210</span>&#160; </div>
-<div class="line"><a name="l12211"></a><span class="lineno">12211</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a> = outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = 0;</div>
-<div class="line"><a name="l12212"></a><span class="lineno">12212</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = UINT64_MAX;</div>
-<div class="line"><a name="l12213"></a><span class="lineno">12213</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#a1081a039964e566c672e7a2347f9e599">allocationSizeAvg</a> = outInfo.<a class="code" href="struct_vma_stat_info.html#a2f9b3452af90c9768a30b7fb6ae194fc">unusedRangeSizeAvg</a> = 0; <span class="comment">// Unused.</span></div>
-<div class="line"><a name="l12214"></a><span class="lineno">12214</span>&#160; </div>
-<div class="line"><a name="l12215"></a><span class="lineno">12215</span>&#160;    CalcAllocationStatInfoNode(outInfo, m_Root, LevelToNodeSize(0));</div>
-<div class="line"><a name="l12216"></a><span class="lineno">12216</span>&#160; </div>
-<div class="line"><a name="l12217"></a><span class="lineno">12217</span>&#160;    <span class="keywordflow">if</span>(unusableSize &gt; 0)</div>
-<div class="line"><a name="l12218"></a><span class="lineno">12218</span>&#160;    {</div>
-<div class="line"><a name="l12219"></a><span class="lineno">12219</span>&#160;        ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
-<div class="line"><a name="l12220"></a><span class="lineno">12220</span>&#160;        outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusableSize;</div>
-<div class="line"><a name="l12221"></a><span class="lineno">12221</span>&#160;        outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MAX(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusableSize);</div>
-<div class="line"><a name="l12222"></a><span class="lineno">12222</span>&#160;        outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusableSize);</div>
-<div class="line"><a name="l12223"></a><span class="lineno">12223</span>&#160;    }</div>
-<div class="line"><a name="l12224"></a><span class="lineno">12224</span>&#160;}</div>
-<div class="line"><a name="l12225"></a><span class="lineno">12225</span>&#160; </div>
-<div class="line"><a name="l12226"></a><span class="lineno">12226</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::AddPoolStats(<a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>&amp; inoutStats)<span class="keyword"> const</span></div>
-<div class="line"><a name="l12227"></a><span class="lineno">12227</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l12228"></a><span class="lineno">12228</span>&#160;    <span class="keyword">const</span> VkDeviceSize unusableSize = GetUnusableSize();</div>
-<div class="line"><a name="l12229"></a><span class="lineno">12229</span>&#160; </div>
-<div class="line"><a name="l12230"></a><span class="lineno">12230</span>&#160;    inoutStats.<a class="code" href="struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c">size</a> += GetSize();</div>
-<div class="line"><a name="l12231"></a><span class="lineno">12231</span>&#160;    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> += m_SumFreeSize + unusableSize;</div>
-<div class="line"><a name="l12232"></a><span class="lineno">12232</span>&#160;    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">allocationCount</a> += m_AllocationCount;</div>
-<div class="line"><a name="l12233"></a><span class="lineno">12233</span>&#160;    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a> += m_FreeCount;</div>
-<div class="line"><a name="l12234"></a><span class="lineno">12234</span>&#160;    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = VMA_MAX(inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>, GetUnusedRangeSizeMax());</div>
-<div class="line"><a name="l12235"></a><span class="lineno">12235</span>&#160; </div>
-<div class="line"><a name="l12236"></a><span class="lineno">12236</span>&#160;    <span class="keywordflow">if</span>(unusableSize &gt; 0)</div>
-<div class="line"><a name="l12237"></a><span class="lineno">12237</span>&#160;    {</div>
-<div class="line"><a name="l12238"></a><span class="lineno">12238</span>&#160;        ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
-<div class="line"><a name="l12239"></a><span class="lineno">12239</span>&#160;        <span class="comment">// Not updating inoutStats.unusedRangeSizeMax with unusableSize because this space is not available for allocations.</span></div>
-<div class="line"><a name="l12240"></a><span class="lineno">12240</span>&#160;    }</div>
-<div class="line"><a name="l12241"></a><span class="lineno">12241</span>&#160;}</div>
-<div class="line"><a name="l12242"></a><span class="lineno">12242</span>&#160; </div>
-<div class="line"><a name="l12243"></a><span class="lineno">12243</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l12244"></a><span class="lineno">12244</span>&#160; </div>
-<div class="line"><a name="l12245"></a><span class="lineno">12245</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::PrintDetailedMap(<span class="keyword">class</span> VmaJsonWriter&amp; json)<span class="keyword"> const</span></div>
-<div class="line"><a name="l12246"></a><span class="lineno">12246</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l12247"></a><span class="lineno">12247</span>&#160;    <span class="comment">// TODO optimize</span></div>
-<div class="line"><a name="l12248"></a><span class="lineno">12248</span>&#160;    <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> stat;</div>
-<div class="line"><a name="l12249"></a><span class="lineno">12249</span>&#160;    CalcAllocationStatInfo(stat);</div>
-<div class="line"><a name="l12250"></a><span class="lineno">12250</span>&#160; </div>
-<div class="line"><a name="l12251"></a><span class="lineno">12251</span>&#160;    PrintDetailedMap_Begin(</div>
-<div class="line"><a name="l12252"></a><span class="lineno">12252</span>&#160;        json,</div>
-<div class="line"><a name="l12253"></a><span class="lineno">12253</span>&#160;        stat.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a>,</div>
-<div class="line"><a name="l12254"></a><span class="lineno">12254</span>&#160;        stat.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a>,</div>
-<div class="line"><a name="l12255"></a><span class="lineno">12255</span>&#160;        stat.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>);</div>
-<div class="line"><a name="l12256"></a><span class="lineno">12256</span>&#160; </div>
-<div class="line"><a name="l12257"></a><span class="lineno">12257</span>&#160;    PrintDetailedMapNode(json, m_Root, LevelToNodeSize(0));</div>
-<div class="line"><a name="l12258"></a><span class="lineno">12258</span>&#160; </div>
-<div class="line"><a name="l12259"></a><span class="lineno">12259</span>&#160;    <span class="keyword">const</span> VkDeviceSize unusableSize = GetUnusableSize();</div>
-<div class="line"><a name="l12260"></a><span class="lineno">12260</span>&#160;    <span class="keywordflow">if</span>(unusableSize &gt; 0)</div>
-<div class="line"><a name="l12261"></a><span class="lineno">12261</span>&#160;    {</div>
-<div class="line"><a name="l12262"></a><span class="lineno">12262</span>&#160;        PrintDetailedMap_UnusedRange(json,</div>
-<div class="line"><a name="l12263"></a><span class="lineno">12263</span>&#160;            m_UsableSize, <span class="comment">// offset</span></div>
-<div class="line"><a name="l12264"></a><span class="lineno">12264</span>&#160;            unusableSize); <span class="comment">// size</span></div>
-<div class="line"><a name="l12265"></a><span class="lineno">12265</span>&#160;    }</div>
-<div class="line"><a name="l12266"></a><span class="lineno">12266</span>&#160; </div>
-<div class="line"><a name="l12267"></a><span class="lineno">12267</span>&#160;    PrintDetailedMap_End(json);</div>
-<div class="line"><a name="l12268"></a><span class="lineno">12268</span>&#160;}</div>
-<div class="line"><a name="l12269"></a><span class="lineno">12269</span>&#160; </div>
-<div class="line"><a name="l12270"></a><span class="lineno">12270</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l12271"></a><span class="lineno">12271</span>&#160; </div>
-<div class="line"><a name="l12272"></a><span class="lineno">12272</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Buddy::CreateAllocationRequest(</div>
-<div class="line"><a name="l12273"></a><span class="lineno">12273</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l12274"></a><span class="lineno">12274</span>&#160;    uint32_t frameInUseCount,</div>
-<div class="line"><a name="l12275"></a><span class="lineno">12275</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
-<div class="line"><a name="l12276"></a><span class="lineno">12276</span>&#160;    VkDeviceSize allocSize,</div>
-<div class="line"><a name="l12277"></a><span class="lineno">12277</span>&#160;    VkDeviceSize allocAlignment,</div>
-<div class="line"><a name="l12278"></a><span class="lineno">12278</span>&#160;    <span class="keywordtype">bool</span> upperAddress,</div>
-<div class="line"><a name="l12279"></a><span class="lineno">12279</span>&#160;    VmaSuballocationType allocType,</div>
-<div class="line"><a name="l12280"></a><span class="lineno">12280</span>&#160;    <span class="keywordtype">bool</span> canMakeOtherLost,</div>
-<div class="line"><a name="l12281"></a><span class="lineno">12281</span>&#160;    uint32_t strategy,</div>
-<div class="line"><a name="l12282"></a><span class="lineno">12282</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
-<div class="line"><a name="l12283"></a><span class="lineno">12283</span>&#160;{</div>
-<div class="line"><a name="l12284"></a><span class="lineno">12284</span>&#160;    VMA_ASSERT(!upperAddress &amp;&amp; <span class="stringliteral">&quot;VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT can be used only with linear algorithm.&quot;</span>);</div>
-<div class="line"><a name="l12285"></a><span class="lineno">12285</span>&#160; </div>
-<div class="line"><a name="l12286"></a><span class="lineno">12286</span>&#160;    <span class="comment">// Simple way to respect bufferImageGranularity. May be optimized some day.</span></div>
-<div class="line"><a name="l12287"></a><span class="lineno">12287</span>&#160;    <span class="comment">// Whenever it might be an OPTIMAL image...</span></div>
-<div class="line"><a name="l12288"></a><span class="lineno">12288</span>&#160;    <span class="keywordflow">if</span>(allocType == VMA_SUBALLOCATION_TYPE_UNKNOWN ||</div>
-<div class="line"><a name="l12289"></a><span class="lineno">12289</span>&#160;        allocType == VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN ||</div>
-<div class="line"><a name="l12290"></a><span class="lineno">12290</span>&#160;        allocType == VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL)</div>
-<div class="line"><a name="l12291"></a><span class="lineno">12291</span>&#160;    {</div>
-<div class="line"><a name="l12292"></a><span class="lineno">12292</span>&#160;        allocAlignment = VMA_MAX(allocAlignment, bufferImageGranularity);</div>
-<div class="line"><a name="l12293"></a><span class="lineno">12293</span>&#160;        allocSize = VMA_MAX(allocSize, bufferImageGranularity);</div>
-<div class="line"><a name="l12294"></a><span class="lineno">12294</span>&#160;    }</div>
-<div class="line"><a name="l12295"></a><span class="lineno">12295</span>&#160; </div>
-<div class="line"><a name="l12296"></a><span class="lineno">12296</span>&#160;    <span class="keywordflow">if</span>(allocSize &gt; m_UsableSize)</div>
-<div class="line"><a name="l12297"></a><span class="lineno">12297</span>&#160;    {</div>
-<div class="line"><a name="l12298"></a><span class="lineno">12298</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l12299"></a><span class="lineno">12299</span>&#160;    }</div>
-<div class="line"><a name="l12300"></a><span class="lineno">12300</span>&#160; </div>
-<div class="line"><a name="l12301"></a><span class="lineno">12301</span>&#160;    <span class="keyword">const</span> uint32_t targetLevel = AllocSizeToLevel(allocSize);</div>
-<div class="line"><a name="l12302"></a><span class="lineno">12302</span>&#160;    <span class="keywordflow">for</span>(uint32_t level = targetLevel + 1; level--; )</div>
-<div class="line"><a name="l12303"></a><span class="lineno">12303</span>&#160;    {</div>
-<div class="line"><a name="l12304"></a><span class="lineno">12304</span>&#160;        <span class="keywordflow">for</span>(Node* freeNode = m_FreeList[level].front;</div>
-<div class="line"><a name="l12305"></a><span class="lineno">12305</span>&#160;            freeNode != VMA_NULL;</div>
-<div class="line"><a name="l12306"></a><span class="lineno">12306</span>&#160;            freeNode = freeNode-&gt;free.next)</div>
-<div class="line"><a name="l12307"></a><span class="lineno">12307</span>&#160;        {</div>
-<div class="line"><a name="l12308"></a><span class="lineno">12308</span>&#160;            <span class="keywordflow">if</span>(freeNode-&gt;offset % allocAlignment == 0)</div>
-<div class="line"><a name="l12309"></a><span class="lineno">12309</span>&#160;            {</div>
-<div class="line"><a name="l12310"></a><span class="lineno">12310</span>&#160;                pAllocationRequest-&gt;type = VmaAllocationRequestType::Normal;</div>
-<div class="line"><a name="l12311"></a><span class="lineno">12311</span>&#160;                pAllocationRequest-&gt;offset = freeNode-&gt;offset;</div>
-<div class="line"><a name="l12312"></a><span class="lineno">12312</span>&#160;                pAllocationRequest-&gt;sumFreeSize = LevelToNodeSize(level);</div>
-<div class="line"><a name="l12313"></a><span class="lineno">12313</span>&#160;                pAllocationRequest-&gt;sumItemSize = 0;</div>
-<div class="line"><a name="l12314"></a><span class="lineno">12314</span>&#160;                pAllocationRequest-&gt;itemsToMakeLostCount = 0;</div>
-<div class="line"><a name="l12315"></a><span class="lineno">12315</span>&#160;                pAllocationRequest-&gt;customData = (<span class="keywordtype">void</span>*)(uintptr_t)level;</div>
-<div class="line"><a name="l12316"></a><span class="lineno">12316</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l12317"></a><span class="lineno">12317</span>&#160;            }</div>
-<div class="line"><a name="l12318"></a><span class="lineno">12318</span>&#160;        }</div>
-<div class="line"><a name="l12319"></a><span class="lineno">12319</span>&#160;    }</div>
-<div class="line"><a name="l12320"></a><span class="lineno">12320</span>&#160; </div>
-<div class="line"><a name="l12321"></a><span class="lineno">12321</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l12322"></a><span class="lineno">12322</span>&#160;}</div>
-<div class="line"><a name="l12323"></a><span class="lineno">12323</span>&#160; </div>
-<div class="line"><a name="l12324"></a><span class="lineno">12324</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Buddy::MakeRequestedAllocationsLost(</div>
-<div class="line"><a name="l12325"></a><span class="lineno">12325</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l12326"></a><span class="lineno">12326</span>&#160;    uint32_t frameInUseCount,</div>
-<div class="line"><a name="l12327"></a><span class="lineno">12327</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
-<div class="line"><a name="l12328"></a><span class="lineno">12328</span>&#160;{</div>
-<div class="line"><a name="l12329"></a><span class="lineno">12329</span>&#160;    <span class="comment">/*</span></div>
-<div class="line"><a name="l12330"></a><span class="lineno">12330</span>&#160;<span class="comment">    Lost allocations are not supported in buddy allocator at the moment.</span></div>
-<div class="line"><a name="l12331"></a><span class="lineno">12331</span>&#160;<span class="comment">    Support might be added in the future.</span></div>
-<div class="line"><a name="l12332"></a><span class="lineno">12332</span>&#160;<span class="comment">    */</span></div>
-<div class="line"><a name="l12333"></a><span class="lineno">12333</span>&#160;    <span class="keywordflow">return</span> pAllocationRequest-&gt;itemsToMakeLostCount == 0;</div>
-<div class="line"><a name="l12334"></a><span class="lineno">12334</span>&#160;}</div>
-<div class="line"><a name="l12335"></a><span class="lineno">12335</span>&#160; </div>
-<div class="line"><a name="l12336"></a><span class="lineno">12336</span>&#160;uint32_t VmaBlockMetadata_Buddy::MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount)</div>
-<div class="line"><a name="l12337"></a><span class="lineno">12337</span>&#160;{</div>
-<div class="line"><a name="l12338"></a><span class="lineno">12338</span>&#160;    <span class="comment">/*</span></div>
-<div class="line"><a name="l12339"></a><span class="lineno">12339</span>&#160;<span class="comment">    Lost allocations are not supported in buddy allocator at the moment.</span></div>
-<div class="line"><a name="l12340"></a><span class="lineno">12340</span>&#160;<span class="comment">    Support might be added in the future.</span></div>
-<div class="line"><a name="l12341"></a><span class="lineno">12341</span>&#160;<span class="comment">    */</span></div>
-<div class="line"><a name="l12342"></a><span class="lineno">12342</span>&#160;    <span class="keywordflow">return</span> 0;</div>
-<div class="line"><a name="l12343"></a><span class="lineno">12343</span>&#160;}</div>
-<div class="line"><a name="l12344"></a><span class="lineno">12344</span>&#160; </div>
-<div class="line"><a name="l12345"></a><span class="lineno">12345</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::Alloc(</div>
-<div class="line"><a name="l12346"></a><span class="lineno">12346</span>&#160;    <span class="keyword">const</span> VmaAllocationRequest&amp; request,</div>
-<div class="line"><a name="l12347"></a><span class="lineno">12347</span>&#160;    VmaSuballocationType type,</div>
-<div class="line"><a name="l12348"></a><span class="lineno">12348</span>&#160;    VkDeviceSize allocSize,</div>
-<div class="line"><a name="l12349"></a><span class="lineno">12349</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</div>
-<div class="line"><a name="l12350"></a><span class="lineno">12350</span>&#160;{</div>
-<div class="line"><a name="l12351"></a><span class="lineno">12351</span>&#160;    VMA_ASSERT(request.type == VmaAllocationRequestType::Normal);</div>
-<div class="line"><a name="l12352"></a><span class="lineno">12352</span>&#160; </div>
-<div class="line"><a name="l12353"></a><span class="lineno">12353</span>&#160;    <span class="keyword">const</span> uint32_t targetLevel = AllocSizeToLevel(allocSize);</div>
-<div class="line"><a name="l12354"></a><span class="lineno">12354</span>&#160;    uint32_t currLevel = (uint32_t)(uintptr_t)request.customData;</div>
-<div class="line"><a name="l12355"></a><span class="lineno">12355</span>&#160; </div>
-<div class="line"><a name="l12356"></a><span class="lineno">12356</span>&#160;    Node* currNode = m_FreeList[currLevel].front;</div>
-<div class="line"><a name="l12357"></a><span class="lineno">12357</span>&#160;    VMA_ASSERT(currNode != VMA_NULL &amp;&amp; currNode-&gt;type == Node::TYPE_FREE);</div>
-<div class="line"><a name="l12358"></a><span class="lineno">12358</span>&#160;    <span class="keywordflow">while</span>(currNode-&gt;offset != request.offset)</div>
-<div class="line"><a name="l12359"></a><span class="lineno">12359</span>&#160;    {</div>
-<div class="line"><a name="l12360"></a><span class="lineno">12360</span>&#160;        currNode = currNode-&gt;free.next;</div>
-<div class="line"><a name="l12361"></a><span class="lineno">12361</span>&#160;        VMA_ASSERT(currNode != VMA_NULL &amp;&amp; currNode-&gt;type == Node::TYPE_FREE);</div>
-<div class="line"><a name="l12362"></a><span class="lineno">12362</span>&#160;    }</div>
-<div class="line"><a name="l12363"></a><span class="lineno">12363</span>&#160; </div>
-<div class="line"><a name="l12364"></a><span class="lineno">12364</span>&#160;    <span class="comment">// Go down, splitting free nodes.</span></div>
-<div class="line"><a name="l12365"></a><span class="lineno">12365</span>&#160;    <span class="keywordflow">while</span>(currLevel &lt; targetLevel)</div>
-<div class="line"><a name="l12366"></a><span class="lineno">12366</span>&#160;    {</div>
-<div class="line"><a name="l12367"></a><span class="lineno">12367</span>&#160;        <span class="comment">// currNode is already first free node at currLevel.</span></div>
-<div class="line"><a name="l12368"></a><span class="lineno">12368</span>&#160;        <span class="comment">// Remove it from list of free nodes at this currLevel.</span></div>
-<div class="line"><a name="l12369"></a><span class="lineno">12369</span>&#160;        RemoveFromFreeList(currLevel, currNode);</div>
-<div class="line"><a name="l12370"></a><span class="lineno">12370</span>&#160; </div>
-<div class="line"><a name="l12371"></a><span class="lineno">12371</span>&#160;        <span class="keyword">const</span> uint32_t childrenLevel = currLevel + 1;</div>
-<div class="line"><a name="l12372"></a><span class="lineno">12372</span>&#160; </div>
-<div class="line"><a name="l12373"></a><span class="lineno">12373</span>&#160;        <span class="comment">// Create two free sub-nodes.</span></div>
-<div class="line"><a name="l12374"></a><span class="lineno">12374</span>&#160;        Node* leftChild = vma_new(GetAllocationCallbacks(), Node)();</div>
-<div class="line"><a name="l12375"></a><span class="lineno">12375</span>&#160;        Node* rightChild = vma_new(GetAllocationCallbacks(), Node)();</div>
-<div class="line"><a name="l12376"></a><span class="lineno">12376</span>&#160; </div>
-<div class="line"><a name="l12377"></a><span class="lineno">12377</span>&#160;        leftChild-&gt;offset = currNode-&gt;offset;</div>
-<div class="line"><a name="l12378"></a><span class="lineno">12378</span>&#160;        leftChild-&gt;type = Node::TYPE_FREE;</div>
-<div class="line"><a name="l12379"></a><span class="lineno">12379</span>&#160;        leftChild-&gt;parent = currNode;</div>
-<div class="line"><a name="l12380"></a><span class="lineno">12380</span>&#160;        leftChild-&gt;buddy = rightChild;</div>
-<div class="line"><a name="l12381"></a><span class="lineno">12381</span>&#160; </div>
-<div class="line"><a name="l12382"></a><span class="lineno">12382</span>&#160;        rightChild-&gt;offset = currNode-&gt;offset + LevelToNodeSize(childrenLevel);</div>
-<div class="line"><a name="l12383"></a><span class="lineno">12383</span>&#160;        rightChild-&gt;type = Node::TYPE_FREE;</div>
-<div class="line"><a name="l12384"></a><span class="lineno">12384</span>&#160;        rightChild-&gt;parent = currNode;</div>
-<div class="line"><a name="l12385"></a><span class="lineno">12385</span>&#160;        rightChild-&gt;buddy = leftChild;</div>
-<div class="line"><a name="l12386"></a><span class="lineno">12386</span>&#160; </div>
-<div class="line"><a name="l12387"></a><span class="lineno">12387</span>&#160;        <span class="comment">// Convert current currNode to split type.</span></div>
-<div class="line"><a name="l12388"></a><span class="lineno">12388</span>&#160;        currNode-&gt;type = Node::TYPE_SPLIT;</div>
-<div class="line"><a name="l12389"></a><span class="lineno">12389</span>&#160;        currNode-&gt;split.leftChild = leftChild;</div>
-<div class="line"><a name="l12390"></a><span class="lineno">12390</span>&#160; </div>
-<div class="line"><a name="l12391"></a><span class="lineno">12391</span>&#160;        <span class="comment">// Add child nodes to free list. Order is important!</span></div>
-<div class="line"><a name="l12392"></a><span class="lineno">12392</span>&#160;        AddToFreeListFront(childrenLevel, rightChild);</div>
-<div class="line"><a name="l12393"></a><span class="lineno">12393</span>&#160;        AddToFreeListFront(childrenLevel, leftChild);</div>
-<div class="line"><a name="l12394"></a><span class="lineno">12394</span>&#160; </div>
-<div class="line"><a name="l12395"></a><span class="lineno">12395</span>&#160;        ++m_FreeCount;</div>
-<div class="line"><a name="l12396"></a><span class="lineno">12396</span>&#160;        <span class="comment">//m_SumFreeSize -= LevelToNodeSize(currLevel) % 2; // Useful only when level node sizes can be non power of 2.</span></div>
-<div class="line"><a name="l12397"></a><span class="lineno">12397</span>&#160;        ++currLevel;</div>
-<div class="line"><a name="l12398"></a><span class="lineno">12398</span>&#160;        currNode = m_FreeList[currLevel].front;</div>
-<div class="line"><a name="l12399"></a><span class="lineno">12399</span>&#160; </div>
-<div class="line"><a name="l12400"></a><span class="lineno">12400</span>&#160;        <span class="comment">/*</span></div>
-<div class="line"><a name="l12401"></a><span class="lineno">12401</span>&#160;<span class="comment">        We can be sure that currNode, as left child of node previously split,</span></div>
-<div class="line"><a name="l12402"></a><span class="lineno">12402</span>&#160;<span class="comment">        also fullfills the alignment requirement.</span></div>
-<div class="line"><a name="l12403"></a><span class="lineno">12403</span>&#160;<span class="comment">        */</span></div>
-<div class="line"><a name="l12404"></a><span class="lineno">12404</span>&#160;    }</div>
-<div class="line"><a name="l12405"></a><span class="lineno">12405</span>&#160; </div>
-<div class="line"><a name="l12406"></a><span class="lineno">12406</span>&#160;    <span class="comment">// Remove from free list.</span></div>
-<div class="line"><a name="l12407"></a><span class="lineno">12407</span>&#160;    VMA_ASSERT(currLevel == targetLevel &amp;&amp;</div>
-<div class="line"><a name="l12408"></a><span class="lineno">12408</span>&#160;        currNode != VMA_NULL &amp;&amp;</div>
-<div class="line"><a name="l12409"></a><span class="lineno">12409</span>&#160;        currNode-&gt;type == Node::TYPE_FREE);</div>
-<div class="line"><a name="l12410"></a><span class="lineno">12410</span>&#160;    RemoveFromFreeList(currLevel, currNode);</div>
-<div class="line"><a name="l12411"></a><span class="lineno">12411</span>&#160; </div>
-<div class="line"><a name="l12412"></a><span class="lineno">12412</span>&#160;    <span class="comment">// Convert to allocation node.</span></div>
-<div class="line"><a name="l12413"></a><span class="lineno">12413</span>&#160;    currNode-&gt;type = Node::TYPE_ALLOCATION;</div>
-<div class="line"><a name="l12414"></a><span class="lineno">12414</span>&#160;    currNode-&gt;allocation.alloc = hAllocation;</div>
-<div class="line"><a name="l12415"></a><span class="lineno">12415</span>&#160; </div>
-<div class="line"><a name="l12416"></a><span class="lineno">12416</span>&#160;    ++m_AllocationCount;</div>
-<div class="line"><a name="l12417"></a><span class="lineno">12417</span>&#160;    --m_FreeCount;</div>
-<div class="line"><a name="l12418"></a><span class="lineno">12418</span>&#160;    m_SumFreeSize -= allocSize;</div>
-<div class="line"><a name="l12419"></a><span class="lineno">12419</span>&#160;}</div>
-<div class="line"><a name="l12420"></a><span class="lineno">12420</span>&#160; </div>
-<div class="line"><a name="l12421"></a><span class="lineno">12421</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::DeleteNode(Node* node)</div>
-<div class="line"><a name="l12422"></a><span class="lineno">12422</span>&#160;{</div>
-<div class="line"><a name="l12423"></a><span class="lineno">12423</span>&#160;    <span class="keywordflow">if</span>(node-&gt;type == Node::TYPE_SPLIT)</div>
-<div class="line"><a name="l12424"></a><span class="lineno">12424</span>&#160;    {</div>
-<div class="line"><a name="l12425"></a><span class="lineno">12425</span>&#160;        DeleteNode(node-&gt;split.leftChild-&gt;buddy);</div>
-<div class="line"><a name="l12426"></a><span class="lineno">12426</span>&#160;        DeleteNode(node-&gt;split.leftChild);</div>
-<div class="line"><a name="l12427"></a><span class="lineno">12427</span>&#160;    }</div>
-<div class="line"><a name="l12428"></a><span class="lineno">12428</span>&#160; </div>
-<div class="line"><a name="l12429"></a><span class="lineno">12429</span>&#160;    vma_delete(GetAllocationCallbacks(), node);</div>
-<div class="line"><a name="l12430"></a><span class="lineno">12430</span>&#160;}</div>
-<div class="line"><a name="l12431"></a><span class="lineno">12431</span>&#160; </div>
-<div class="line"><a name="l12432"></a><span class="lineno">12432</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Buddy::ValidateNode(ValidationContext&amp; ctx, <span class="keyword">const</span> Node* parent, <span class="keyword">const</span> Node* curr, uint32_t level, VkDeviceSize levelNodeSize)<span class="keyword"> const</span></div>
-<div class="line"><a name="l12433"></a><span class="lineno">12433</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l12434"></a><span class="lineno">12434</span>&#160;    VMA_VALIDATE(level &lt; m_LevelCount);</div>
-<div class="line"><a name="l12435"></a><span class="lineno">12435</span>&#160;    VMA_VALIDATE(curr-&gt;parent == parent);</div>
-<div class="line"><a name="l12436"></a><span class="lineno">12436</span>&#160;    VMA_VALIDATE((curr-&gt;buddy == VMA_NULL) == (parent == VMA_NULL));</div>
-<div class="line"><a name="l12437"></a><span class="lineno">12437</span>&#160;    VMA_VALIDATE(curr-&gt;buddy == VMA_NULL || curr-&gt;buddy-&gt;buddy == curr);</div>
-<div class="line"><a name="l12438"></a><span class="lineno">12438</span>&#160;    <span class="keywordflow">switch</span>(curr-&gt;type)</div>
-<div class="line"><a name="l12439"></a><span class="lineno">12439</span>&#160;    {</div>
-<div class="line"><a name="l12440"></a><span class="lineno">12440</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_FREE:</div>
-<div class="line"><a name="l12441"></a><span class="lineno">12441</span>&#160;        <span class="comment">// curr-&gt;free.prev, next are validated separately.</span></div>
-<div class="line"><a name="l12442"></a><span class="lineno">12442</span>&#160;        ctx.calculatedSumFreeSize += levelNodeSize;</div>
-<div class="line"><a name="l12443"></a><span class="lineno">12443</span>&#160;        ++ctx.calculatedFreeCount;</div>
-<div class="line"><a name="l12444"></a><span class="lineno">12444</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l12445"></a><span class="lineno">12445</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_ALLOCATION:</div>
-<div class="line"><a name="l12446"></a><span class="lineno">12446</span>&#160;        ++ctx.calculatedAllocationCount;</div>
-<div class="line"><a name="l12447"></a><span class="lineno">12447</span>&#160;        ctx.calculatedSumFreeSize += levelNodeSize - curr-&gt;allocation.alloc-&gt;GetSize();</div>
-<div class="line"><a name="l12448"></a><span class="lineno">12448</span>&#160;        VMA_VALIDATE(curr-&gt;allocation.alloc != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l12449"></a><span class="lineno">12449</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l12450"></a><span class="lineno">12450</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_SPLIT:</div>
-<div class="line"><a name="l12451"></a><span class="lineno">12451</span>&#160;        {</div>
-<div class="line"><a name="l12452"></a><span class="lineno">12452</span>&#160;            <span class="keyword">const</span> uint32_t childrenLevel = level + 1;</div>
-<div class="line"><a name="l12453"></a><span class="lineno">12453</span>&#160;            <span class="keyword">const</span> VkDeviceSize childrenLevelNodeSize = levelNodeSize / 2;</div>
-<div class="line"><a name="l12454"></a><span class="lineno">12454</span>&#160;            <span class="keyword">const</span> Node* <span class="keyword">const</span> leftChild = curr-&gt;split.leftChild;</div>
-<div class="line"><a name="l12455"></a><span class="lineno">12455</span>&#160;            VMA_VALIDATE(leftChild != VMA_NULL);</div>
-<div class="line"><a name="l12456"></a><span class="lineno">12456</span>&#160;            VMA_VALIDATE(leftChild-&gt;offset == curr-&gt;offset);</div>
-<div class="line"><a name="l12457"></a><span class="lineno">12457</span>&#160;            <span class="keywordflow">if</span>(!ValidateNode(ctx, curr, leftChild, childrenLevel, childrenLevelNodeSize))</div>
-<div class="line"><a name="l12458"></a><span class="lineno">12458</span>&#160;            {</div>
-<div class="line"><a name="l12459"></a><span class="lineno">12459</span>&#160;                VMA_VALIDATE(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;ValidateNode for left child failed.&quot;</span>);</div>
-<div class="line"><a name="l12460"></a><span class="lineno">12460</span>&#160;            }</div>
-<div class="line"><a name="l12461"></a><span class="lineno">12461</span>&#160;            <span class="keyword">const</span> Node* <span class="keyword">const</span> rightChild = leftChild-&gt;buddy;</div>
-<div class="line"><a name="l12462"></a><span class="lineno">12462</span>&#160;            VMA_VALIDATE(rightChild-&gt;offset == curr-&gt;offset + childrenLevelNodeSize);</div>
-<div class="line"><a name="l12463"></a><span class="lineno">12463</span>&#160;            <span class="keywordflow">if</span>(!ValidateNode(ctx, curr, rightChild, childrenLevel, childrenLevelNodeSize))</div>
-<div class="line"><a name="l12464"></a><span class="lineno">12464</span>&#160;            {</div>
-<div class="line"><a name="l12465"></a><span class="lineno">12465</span>&#160;                VMA_VALIDATE(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;ValidateNode for right child failed.&quot;</span>);</div>
-<div class="line"><a name="l12466"></a><span class="lineno">12466</span>&#160;            }</div>
-<div class="line"><a name="l12467"></a><span class="lineno">12467</span>&#160;        }</div>
-<div class="line"><a name="l12468"></a><span class="lineno">12468</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l12469"></a><span class="lineno">12469</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l12470"></a><span class="lineno">12470</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l12471"></a><span class="lineno">12471</span>&#160;    }</div>
-<div class="line"><a name="l12472"></a><span class="lineno">12472</span>&#160; </div>
-<div class="line"><a name="l12473"></a><span class="lineno">12473</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l12474"></a><span class="lineno">12474</span>&#160;}</div>
-<div class="line"><a name="l12475"></a><span class="lineno">12475</span>&#160; </div>
-<div class="line"><a name="l12476"></a><span class="lineno">12476</span>&#160;uint32_t VmaBlockMetadata_Buddy::AllocSizeToLevel(VkDeviceSize allocSize)<span class="keyword"> const</span></div>
-<div class="line"><a name="l12477"></a><span class="lineno">12477</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l12478"></a><span class="lineno">12478</span>&#160;    <span class="comment">// I know this could be optimized somehow e.g. by using std::log2p1 from C++20.</span></div>
-<div class="line"><a name="l12479"></a><span class="lineno">12479</span>&#160;    uint32_t level = 0;</div>
-<div class="line"><a name="l12480"></a><span class="lineno">12480</span>&#160;    VkDeviceSize currLevelNodeSize = m_UsableSize;</div>
-<div class="line"><a name="l12481"></a><span class="lineno">12481</span>&#160;    VkDeviceSize nextLevelNodeSize = currLevelNodeSize &gt;&gt; 1;</div>
-<div class="line"><a name="l12482"></a><span class="lineno">12482</span>&#160;    <span class="keywordflow">while</span>(allocSize &lt;= nextLevelNodeSize &amp;&amp; level + 1 &lt; m_LevelCount)</div>
-<div class="line"><a name="l12483"></a><span class="lineno">12483</span>&#160;    {</div>
-<div class="line"><a name="l12484"></a><span class="lineno">12484</span>&#160;        ++level;</div>
-<div class="line"><a name="l12485"></a><span class="lineno">12485</span>&#160;        currLevelNodeSize = nextLevelNodeSize;</div>
-<div class="line"><a name="l12486"></a><span class="lineno">12486</span>&#160;        nextLevelNodeSize = currLevelNodeSize &gt;&gt; 1;</div>
-<div class="line"><a name="l12487"></a><span class="lineno">12487</span>&#160;    }</div>
-<div class="line"><a name="l12488"></a><span class="lineno">12488</span>&#160;    <span class="keywordflow">return</span> level;</div>
-<div class="line"><a name="l12489"></a><span class="lineno">12489</span>&#160;}</div>
-<div class="line"><a name="l12490"></a><span class="lineno">12490</span>&#160; </div>
-<div class="line"><a name="l12491"></a><span class="lineno">12491</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::FreeAtOffset(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> alloc, VkDeviceSize offset)</div>
-<div class="line"><a name="l12492"></a><span class="lineno">12492</span>&#160;{</div>
-<div class="line"><a name="l12493"></a><span class="lineno">12493</span>&#160;    <span class="comment">// Find node and level.</span></div>
-<div class="line"><a name="l12494"></a><span class="lineno">12494</span>&#160;    Node* node = m_Root;</div>
-<div class="line"><a name="l12495"></a><span class="lineno">12495</span>&#160;    VkDeviceSize nodeOffset = 0;</div>
-<div class="line"><a name="l12496"></a><span class="lineno">12496</span>&#160;    uint32_t level = 0;</div>
-<div class="line"><a name="l12497"></a><span class="lineno">12497</span>&#160;    VkDeviceSize levelNodeSize = LevelToNodeSize(0);</div>
-<div class="line"><a name="l12498"></a><span class="lineno">12498</span>&#160;    <span class="keywordflow">while</span>(node-&gt;type == Node::TYPE_SPLIT)</div>
-<div class="line"><a name="l12499"></a><span class="lineno">12499</span>&#160;    {</div>
-<div class="line"><a name="l12500"></a><span class="lineno">12500</span>&#160;        <span class="keyword">const</span> VkDeviceSize nextLevelSize = levelNodeSize &gt;&gt; 1;</div>
-<div class="line"><a name="l12501"></a><span class="lineno">12501</span>&#160;        <span class="keywordflow">if</span>(offset &lt; nodeOffset + nextLevelSize)</div>
-<div class="line"><a name="l12502"></a><span class="lineno">12502</span>&#160;        {</div>
-<div class="line"><a name="l12503"></a><span class="lineno">12503</span>&#160;            node = node-&gt;split.leftChild;</div>
-<div class="line"><a name="l12504"></a><span class="lineno">12504</span>&#160;        }</div>
-<div class="line"><a name="l12505"></a><span class="lineno">12505</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l12506"></a><span class="lineno">12506</span>&#160;        {</div>
-<div class="line"><a name="l12507"></a><span class="lineno">12507</span>&#160;            node = node-&gt;split.leftChild-&gt;buddy;</div>
-<div class="line"><a name="l12508"></a><span class="lineno">12508</span>&#160;            nodeOffset += nextLevelSize;</div>
-<div class="line"><a name="l12509"></a><span class="lineno">12509</span>&#160;        }</div>
-<div class="line"><a name="l12510"></a><span class="lineno">12510</span>&#160;        ++level;</div>
-<div class="line"><a name="l12511"></a><span class="lineno">12511</span>&#160;        levelNodeSize = nextLevelSize;</div>
-<div class="line"><a name="l12512"></a><span class="lineno">12512</span>&#160;    }</div>
-<div class="line"><a name="l12513"></a><span class="lineno">12513</span>&#160; </div>
-<div class="line"><a name="l12514"></a><span class="lineno">12514</span>&#160;    VMA_ASSERT(node != VMA_NULL &amp;&amp; node-&gt;type == Node::TYPE_ALLOCATION);</div>
-<div class="line"><a name="l12515"></a><span class="lineno">12515</span>&#160;    VMA_ASSERT(alloc == VK_NULL_HANDLE || node-&gt;allocation.alloc == alloc);</div>
-<div class="line"><a name="l12516"></a><span class="lineno">12516</span>&#160; </div>
-<div class="line"><a name="l12517"></a><span class="lineno">12517</span>&#160;    ++m_FreeCount;</div>
-<div class="line"><a name="l12518"></a><span class="lineno">12518</span>&#160;    --m_AllocationCount;</div>
-<div class="line"><a name="l12519"></a><span class="lineno">12519</span>&#160;    m_SumFreeSize += alloc-&gt;GetSize();</div>
-<div class="line"><a name="l12520"></a><span class="lineno">12520</span>&#160; </div>
-<div class="line"><a name="l12521"></a><span class="lineno">12521</span>&#160;    node-&gt;type = Node::TYPE_FREE;</div>
-<div class="line"><a name="l12522"></a><span class="lineno">12522</span>&#160; </div>
-<div class="line"><a name="l12523"></a><span class="lineno">12523</span>&#160;    <span class="comment">// Join free nodes if possible.</span></div>
-<div class="line"><a name="l12524"></a><span class="lineno">12524</span>&#160;    <span class="keywordflow">while</span>(level &gt; 0 &amp;&amp; node-&gt;buddy-&gt;type == Node::TYPE_FREE)</div>
-<div class="line"><a name="l12525"></a><span class="lineno">12525</span>&#160;    {</div>
-<div class="line"><a name="l12526"></a><span class="lineno">12526</span>&#160;        RemoveFromFreeList(level, node-&gt;buddy);</div>
-<div class="line"><a name="l12527"></a><span class="lineno">12527</span>&#160;        Node* <span class="keyword">const</span> parent = node-&gt;parent;</div>
-<div class="line"><a name="l12528"></a><span class="lineno">12528</span>&#160; </div>
-<div class="line"><a name="l12529"></a><span class="lineno">12529</span>&#160;        vma_delete(GetAllocationCallbacks(), node-&gt;buddy);</div>
-<div class="line"><a name="l12530"></a><span class="lineno">12530</span>&#160;        vma_delete(GetAllocationCallbacks(), node);</div>
-<div class="line"><a name="l12531"></a><span class="lineno">12531</span>&#160;        parent-&gt;type = Node::TYPE_FREE;</div>
-<div class="line"><a name="l12532"></a><span class="lineno">12532</span>&#160; </div>
-<div class="line"><a name="l12533"></a><span class="lineno">12533</span>&#160;        node = parent;</div>
-<div class="line"><a name="l12534"></a><span class="lineno">12534</span>&#160;        --level;</div>
-<div class="line"><a name="l12535"></a><span class="lineno">12535</span>&#160;        <span class="comment">//m_SumFreeSize += LevelToNodeSize(level) % 2; // Useful only when level node sizes can be non power of 2.</span></div>
-<div class="line"><a name="l12536"></a><span class="lineno">12536</span>&#160;        --m_FreeCount;</div>
-<div class="line"><a name="l12537"></a><span class="lineno">12537</span>&#160;    }</div>
-<div class="line"><a name="l12538"></a><span class="lineno">12538</span>&#160; </div>
-<div class="line"><a name="l12539"></a><span class="lineno">12539</span>&#160;    AddToFreeListFront(level, node);</div>
-<div class="line"><a name="l12540"></a><span class="lineno">12540</span>&#160;}</div>
-<div class="line"><a name="l12541"></a><span class="lineno">12541</span>&#160; </div>
-<div class="line"><a name="l12542"></a><span class="lineno">12542</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::CalcAllocationStatInfoNode(<a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a>&amp; outInfo, <span class="keyword">const</span> Node* node, VkDeviceSize levelNodeSize)<span class="keyword"> const</span></div>
-<div class="line"><a name="l12543"></a><span class="lineno">12543</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l12544"></a><span class="lineno">12544</span>&#160;    <span class="keywordflow">switch</span>(node-&gt;type)</div>
-<div class="line"><a name="l12545"></a><span class="lineno">12545</span>&#160;    {</div>
-<div class="line"><a name="l12546"></a><span class="lineno">12546</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_FREE:</div>
-<div class="line"><a name="l12547"></a><span class="lineno">12547</span>&#160;        ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
-<div class="line"><a name="l12548"></a><span class="lineno">12548</span>&#160;        outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += levelNodeSize;</div>
-<div class="line"><a name="l12549"></a><span class="lineno">12549</span>&#160;        outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MAX(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, levelNodeSize);</div>
-<div class="line"><a name="l12550"></a><span class="lineno">12550</span>&#160;        outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MAX(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, levelNodeSize);</div>
-<div class="line"><a name="l12551"></a><span class="lineno">12551</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l12552"></a><span class="lineno">12552</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_ALLOCATION:</div>
-<div class="line"><a name="l12553"></a><span class="lineno">12553</span>&#160;        {</div>
-<div class="line"><a name="l12554"></a><span class="lineno">12554</span>&#160;            <span class="keyword">const</span> VkDeviceSize allocSize = node-&gt;allocation.alloc-&gt;GetSize();</div>
-<div class="line"><a name="l12555"></a><span class="lineno">12555</span>&#160;            ++outInfo.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a>;</div>
-<div class="line"><a name="l12556"></a><span class="lineno">12556</span>&#160;            outInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a> += allocSize;</div>
-<div class="line"><a name="l12557"></a><span class="lineno">12557</span>&#160;            outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a> = VMA_MAX(outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a>, allocSize);</div>
-<div class="line"><a name="l12558"></a><span class="lineno">12558</span>&#160;            outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = VMA_MAX(outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>, allocSize);</div>
-<div class="line"><a name="l12559"></a><span class="lineno">12559</span>&#160; </div>
-<div class="line"><a name="l12560"></a><span class="lineno">12560</span>&#160;            <span class="keyword">const</span> VkDeviceSize unusedRangeSize = levelNodeSize - allocSize;</div>
-<div class="line"><a name="l12561"></a><span class="lineno">12561</span>&#160;            <span class="keywordflow">if</span>(unusedRangeSize &gt; 0)</div>
-<div class="line"><a name="l12562"></a><span class="lineno">12562</span>&#160;            {</div>
-<div class="line"><a name="l12563"></a><span class="lineno">12563</span>&#160;                ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
-<div class="line"><a name="l12564"></a><span class="lineno">12564</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusedRangeSize;</div>
-<div class="line"><a name="l12565"></a><span class="lineno">12565</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MAX(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusedRangeSize);</div>
-<div class="line"><a name="l12566"></a><span class="lineno">12566</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MAX(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSize);</div>
-<div class="line"><a name="l12567"></a><span class="lineno">12567</span>&#160;            }</div>
-<div class="line"><a name="l12568"></a><span class="lineno">12568</span>&#160;        }</div>
-<div class="line"><a name="l12569"></a><span class="lineno">12569</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l12570"></a><span class="lineno">12570</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_SPLIT:</div>
-<div class="line"><a name="l12571"></a><span class="lineno">12571</span>&#160;        {</div>
-<div class="line"><a name="l12572"></a><span class="lineno">12572</span>&#160;            <span class="keyword">const</span> VkDeviceSize childrenNodeSize = levelNodeSize / 2;</div>
-<div class="line"><a name="l12573"></a><span class="lineno">12573</span>&#160;            <span class="keyword">const</span> Node* <span class="keyword">const</span> leftChild = node-&gt;split.leftChild;</div>
-<div class="line"><a name="l12574"></a><span class="lineno">12574</span>&#160;            CalcAllocationStatInfoNode(outInfo, leftChild, childrenNodeSize);</div>
-<div class="line"><a name="l12575"></a><span class="lineno">12575</span>&#160;            <span class="keyword">const</span> Node* <span class="keyword">const</span> rightChild = leftChild-&gt;buddy;</div>
-<div class="line"><a name="l12576"></a><span class="lineno">12576</span>&#160;            CalcAllocationStatInfoNode(outInfo, rightChild, childrenNodeSize);</div>
-<div class="line"><a name="l12577"></a><span class="lineno">12577</span>&#160;        }</div>
-<div class="line"><a name="l12578"></a><span class="lineno">12578</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l12579"></a><span class="lineno">12579</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l12580"></a><span class="lineno">12580</span>&#160;        VMA_ASSERT(0);</div>
-<div class="line"><a name="l12581"></a><span class="lineno">12581</span>&#160;    }</div>
-<div class="line"><a name="l12582"></a><span class="lineno">12582</span>&#160;}</div>
-<div class="line"><a name="l12583"></a><span class="lineno">12583</span>&#160; </div>
-<div class="line"><a name="l12584"></a><span class="lineno">12584</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::AddToFreeListFront(uint32_t level, Node* node)</div>
-<div class="line"><a name="l12585"></a><span class="lineno">12585</span>&#160;{</div>
-<div class="line"><a name="l12586"></a><span class="lineno">12586</span>&#160;    VMA_ASSERT(node-&gt;type == Node::TYPE_FREE);</div>
-<div class="line"><a name="l12587"></a><span class="lineno">12587</span>&#160; </div>
-<div class="line"><a name="l12588"></a><span class="lineno">12588</span>&#160;    <span class="comment">// List is empty.</span></div>
-<div class="line"><a name="l12589"></a><span class="lineno">12589</span>&#160;    Node* <span class="keyword">const</span> frontNode = m_FreeList[level].front;</div>
-<div class="line"><a name="l12590"></a><span class="lineno">12590</span>&#160;    <span class="keywordflow">if</span>(frontNode == VMA_NULL)</div>
-<div class="line"><a name="l12591"></a><span class="lineno">12591</span>&#160;    {</div>
-<div class="line"><a name="l12592"></a><span class="lineno">12592</span>&#160;        VMA_ASSERT(m_FreeList[level].back == VMA_NULL);</div>
-<div class="line"><a name="l12593"></a><span class="lineno">12593</span>&#160;        node-&gt;free.prev = node-&gt;free.next = VMA_NULL;</div>
-<div class="line"><a name="l12594"></a><span class="lineno">12594</span>&#160;        m_FreeList[level].front = m_FreeList[level].back = node;</div>
-<div class="line"><a name="l12595"></a><span class="lineno">12595</span>&#160;    }</div>
-<div class="line"><a name="l12596"></a><span class="lineno">12596</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l12597"></a><span class="lineno">12597</span>&#160;    {</div>
-<div class="line"><a name="l12598"></a><span class="lineno">12598</span>&#160;        VMA_ASSERT(frontNode-&gt;free.prev == VMA_NULL);</div>
-<div class="line"><a name="l12599"></a><span class="lineno">12599</span>&#160;        node-&gt;free.prev = VMA_NULL;</div>
-<div class="line"><a name="l12600"></a><span class="lineno">12600</span>&#160;        node-&gt;free.next = frontNode;</div>
-<div class="line"><a name="l12601"></a><span class="lineno">12601</span>&#160;        frontNode-&gt;free.prev = node;</div>
-<div class="line"><a name="l12602"></a><span class="lineno">12602</span>&#160;        m_FreeList[level].front = node;</div>
-<div class="line"><a name="l12603"></a><span class="lineno">12603</span>&#160;    }</div>
-<div class="line"><a name="l12604"></a><span class="lineno">12604</span>&#160;}</div>
-<div class="line"><a name="l12605"></a><span class="lineno">12605</span>&#160; </div>
-<div class="line"><a name="l12606"></a><span class="lineno">12606</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::RemoveFromFreeList(uint32_t level, Node* node)</div>
-<div class="line"><a name="l12607"></a><span class="lineno">12607</span>&#160;{</div>
-<div class="line"><a name="l12608"></a><span class="lineno">12608</span>&#160;    VMA_ASSERT(m_FreeList[level].front != VMA_NULL);</div>
-<div class="line"><a name="l12609"></a><span class="lineno">12609</span>&#160; </div>
-<div class="line"><a name="l12610"></a><span class="lineno">12610</span>&#160;    <span class="comment">// It is at the front.</span></div>
-<div class="line"><a name="l12611"></a><span class="lineno">12611</span>&#160;    <span class="keywordflow">if</span>(node-&gt;free.prev == VMA_NULL)</div>
-<div class="line"><a name="l12612"></a><span class="lineno">12612</span>&#160;    {</div>
-<div class="line"><a name="l12613"></a><span class="lineno">12613</span>&#160;        VMA_ASSERT(m_FreeList[level].front == node);</div>
-<div class="line"><a name="l12614"></a><span class="lineno">12614</span>&#160;        m_FreeList[level].front = node-&gt;free.next;</div>
-<div class="line"><a name="l12615"></a><span class="lineno">12615</span>&#160;    }</div>
-<div class="line"><a name="l12616"></a><span class="lineno">12616</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l12617"></a><span class="lineno">12617</span>&#160;    {</div>
-<div class="line"><a name="l12618"></a><span class="lineno">12618</span>&#160;        Node* <span class="keyword">const</span> prevFreeNode = node-&gt;free.prev;</div>
-<div class="line"><a name="l12619"></a><span class="lineno">12619</span>&#160;        VMA_ASSERT(prevFreeNode-&gt;free.next == node);</div>
-<div class="line"><a name="l12620"></a><span class="lineno">12620</span>&#160;        prevFreeNode-&gt;free.next = node-&gt;free.next;</div>
-<div class="line"><a name="l12621"></a><span class="lineno">12621</span>&#160;    }</div>
-<div class="line"><a name="l12622"></a><span class="lineno">12622</span>&#160; </div>
-<div class="line"><a name="l12623"></a><span class="lineno">12623</span>&#160;    <span class="comment">// It is at the back.</span></div>
-<div class="line"><a name="l12624"></a><span class="lineno">12624</span>&#160;    <span class="keywordflow">if</span>(node-&gt;free.next == VMA_NULL)</div>
-<div class="line"><a name="l12625"></a><span class="lineno">12625</span>&#160;    {</div>
-<div class="line"><a name="l12626"></a><span class="lineno">12626</span>&#160;        VMA_ASSERT(m_FreeList[level].back == node);</div>
-<div class="line"><a name="l12627"></a><span class="lineno">12627</span>&#160;        m_FreeList[level].back = node-&gt;free.prev;</div>
-<div class="line"><a name="l12628"></a><span class="lineno">12628</span>&#160;    }</div>
-<div class="line"><a name="l12629"></a><span class="lineno">12629</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l12630"></a><span class="lineno">12630</span>&#160;    {</div>
-<div class="line"><a name="l12631"></a><span class="lineno">12631</span>&#160;        Node* <span class="keyword">const</span> nextFreeNode = node-&gt;free.next;</div>
-<div class="line"><a name="l12632"></a><span class="lineno">12632</span>&#160;        VMA_ASSERT(nextFreeNode-&gt;free.prev == node);</div>
-<div class="line"><a name="l12633"></a><span class="lineno">12633</span>&#160;        nextFreeNode-&gt;free.prev = node-&gt;free.prev;</div>
-<div class="line"><a name="l12634"></a><span class="lineno">12634</span>&#160;    }</div>
-<div class="line"><a name="l12635"></a><span class="lineno">12635</span>&#160;}</div>
-<div class="line"><a name="l12636"></a><span class="lineno">12636</span>&#160; </div>
-<div class="line"><a name="l12637"></a><span class="lineno">12637</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l12638"></a><span class="lineno">12638</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::PrintDetailedMapNode(<span class="keyword">class</span> VmaJsonWriter&amp; json, <span class="keyword">const</span> Node* node, VkDeviceSize levelNodeSize)<span class="keyword"> const</span></div>
-<div class="line"><a name="l12639"></a><span class="lineno">12639</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l12640"></a><span class="lineno">12640</span>&#160;    <span class="keywordflow">switch</span>(node-&gt;type)</div>
-<div class="line"><a name="l12641"></a><span class="lineno">12641</span>&#160;    {</div>
-<div class="line"><a name="l12642"></a><span class="lineno">12642</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_FREE:</div>
-<div class="line"><a name="l12643"></a><span class="lineno">12643</span>&#160;        PrintDetailedMap_UnusedRange(json, node-&gt;offset, levelNodeSize);</div>
-<div class="line"><a name="l12644"></a><span class="lineno">12644</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l12645"></a><span class="lineno">12645</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_ALLOCATION:</div>
-<div class="line"><a name="l12646"></a><span class="lineno">12646</span>&#160;        {</div>
-<div class="line"><a name="l12647"></a><span class="lineno">12647</span>&#160;            PrintDetailedMap_Allocation(json, node-&gt;offset, node-&gt;allocation.alloc);</div>
-<div class="line"><a name="l12648"></a><span class="lineno">12648</span>&#160;            <span class="keyword">const</span> VkDeviceSize allocSize = node-&gt;allocation.alloc-&gt;GetSize();</div>
-<div class="line"><a name="l12649"></a><span class="lineno">12649</span>&#160;            <span class="keywordflow">if</span>(allocSize &lt; levelNodeSize)</div>
-<div class="line"><a name="l12650"></a><span class="lineno">12650</span>&#160;            {</div>
-<div class="line"><a name="l12651"></a><span class="lineno">12651</span>&#160;                PrintDetailedMap_UnusedRange(json, node-&gt;offset + allocSize, levelNodeSize - allocSize);</div>
-<div class="line"><a name="l12652"></a><span class="lineno">12652</span>&#160;            }</div>
-<div class="line"><a name="l12653"></a><span class="lineno">12653</span>&#160;        }</div>
-<div class="line"><a name="l12654"></a><span class="lineno">12654</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l12655"></a><span class="lineno">12655</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_SPLIT:</div>
-<div class="line"><a name="l12656"></a><span class="lineno">12656</span>&#160;        {</div>
-<div class="line"><a name="l12657"></a><span class="lineno">12657</span>&#160;            <span class="keyword">const</span> VkDeviceSize childrenNodeSize = levelNodeSize / 2;</div>
-<div class="line"><a name="l12658"></a><span class="lineno">12658</span>&#160;            <span class="keyword">const</span> Node* <span class="keyword">const</span> leftChild = node-&gt;split.leftChild;</div>
-<div class="line"><a name="l12659"></a><span class="lineno">12659</span>&#160;            PrintDetailedMapNode(json, leftChild, childrenNodeSize);</div>
-<div class="line"><a name="l12660"></a><span class="lineno">12660</span>&#160;            <span class="keyword">const</span> Node* <span class="keyword">const</span> rightChild = leftChild-&gt;buddy;</div>
-<div class="line"><a name="l12661"></a><span class="lineno">12661</span>&#160;            PrintDetailedMapNode(json, rightChild, childrenNodeSize);</div>
-<div class="line"><a name="l12662"></a><span class="lineno">12662</span>&#160;        }</div>
-<div class="line"><a name="l12663"></a><span class="lineno">12663</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l12664"></a><span class="lineno">12664</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l12665"></a><span class="lineno">12665</span>&#160;        VMA_ASSERT(0);</div>
-<div class="line"><a name="l12666"></a><span class="lineno">12666</span>&#160;    }</div>
-<div class="line"><a name="l12667"></a><span class="lineno">12667</span>&#160;}</div>
-<div class="line"><a name="l12668"></a><span class="lineno">12668</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l12104"></a><span class="lineno">12104</span>&#160;<span class="comment">// class VmaBlockMetadata_Buddy</span></div>
+<div class="line"><a name="l12105"></a><span class="lineno">12105</span>&#160; </div>
+<div class="line"><a name="l12106"></a><span class="lineno">12106</span>&#160;VmaBlockMetadata_Buddy::VmaBlockMetadata_Buddy(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator) :</div>
+<div class="line"><a name="l12107"></a><span class="lineno">12107</span>&#160;    VmaBlockMetadata(hAllocator),</div>
+<div class="line"><a name="l12108"></a><span class="lineno">12108</span>&#160;    m_Root(VMA_NULL),</div>
+<div class="line"><a name="l12109"></a><span class="lineno">12109</span>&#160;    m_AllocationCount(0),</div>
+<div class="line"><a name="l12110"></a><span class="lineno">12110</span>&#160;    m_FreeCount(1),</div>
+<div class="line"><a name="l12111"></a><span class="lineno">12111</span>&#160;    m_SumFreeSize(0)</div>
+<div class="line"><a name="l12112"></a><span class="lineno">12112</span>&#160;{</div>
+<div class="line"><a name="l12113"></a><span class="lineno">12113</span>&#160;    memset(m_FreeList, 0, <span class="keyword">sizeof</span>(m_FreeList));</div>
+<div class="line"><a name="l12114"></a><span class="lineno">12114</span>&#160;}</div>
+<div class="line"><a name="l12115"></a><span class="lineno">12115</span>&#160; </div>
+<div class="line"><a name="l12116"></a><span class="lineno">12116</span>&#160;VmaBlockMetadata_Buddy::~VmaBlockMetadata_Buddy()</div>
+<div class="line"><a name="l12117"></a><span class="lineno">12117</span>&#160;{</div>
+<div class="line"><a name="l12118"></a><span class="lineno">12118</span>&#160;    DeleteNode(m_Root);</div>
+<div class="line"><a name="l12119"></a><span class="lineno">12119</span>&#160;}</div>
+<div class="line"><a name="l12120"></a><span class="lineno">12120</span>&#160; </div>
+<div class="line"><a name="l12121"></a><span class="lineno">12121</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::Init(VkDeviceSize size)</div>
+<div class="line"><a name="l12122"></a><span class="lineno">12122</span>&#160;{</div>
+<div class="line"><a name="l12123"></a><span class="lineno">12123</span>&#160;    VmaBlockMetadata::Init(size);</div>
+<div class="line"><a name="l12124"></a><span class="lineno">12124</span>&#160; </div>
+<div class="line"><a name="l12125"></a><span class="lineno">12125</span>&#160;    m_UsableSize = VmaPrevPow2(size);</div>
+<div class="line"><a name="l12126"></a><span class="lineno">12126</span>&#160;    m_SumFreeSize = m_UsableSize;</div>
+<div class="line"><a name="l12127"></a><span class="lineno">12127</span>&#160; </div>
+<div class="line"><a name="l12128"></a><span class="lineno">12128</span>&#160;    <span class="comment">// Calculate m_LevelCount.</span></div>
+<div class="line"><a name="l12129"></a><span class="lineno">12129</span>&#160;    m_LevelCount = 1;</div>
+<div class="line"><a name="l12130"></a><span class="lineno">12130</span>&#160;    <span class="keywordflow">while</span>(m_LevelCount &lt; MAX_LEVELS &amp;&amp;</div>
+<div class="line"><a name="l12131"></a><span class="lineno">12131</span>&#160;        LevelToNodeSize(m_LevelCount) &gt;= MIN_NODE_SIZE)</div>
+<div class="line"><a name="l12132"></a><span class="lineno">12132</span>&#160;    {</div>
+<div class="line"><a name="l12133"></a><span class="lineno">12133</span>&#160;        ++m_LevelCount;</div>
+<div class="line"><a name="l12134"></a><span class="lineno">12134</span>&#160;    }</div>
+<div class="line"><a name="l12135"></a><span class="lineno">12135</span>&#160; </div>
+<div class="line"><a name="l12136"></a><span class="lineno">12136</span>&#160;    Node* rootNode = vma_new(GetAllocationCallbacks(), Node)();</div>
+<div class="line"><a name="l12137"></a><span class="lineno">12137</span>&#160;    rootNode-&gt;offset = 0;</div>
+<div class="line"><a name="l12138"></a><span class="lineno">12138</span>&#160;    rootNode-&gt;type = Node::TYPE_FREE;</div>
+<div class="line"><a name="l12139"></a><span class="lineno">12139</span>&#160;    rootNode-&gt;parent = VMA_NULL;</div>
+<div class="line"><a name="l12140"></a><span class="lineno">12140</span>&#160;    rootNode-&gt;buddy = VMA_NULL;</div>
+<div class="line"><a name="l12141"></a><span class="lineno">12141</span>&#160; </div>
+<div class="line"><a name="l12142"></a><span class="lineno">12142</span>&#160;    m_Root = rootNode;</div>
+<div class="line"><a name="l12143"></a><span class="lineno">12143</span>&#160;    AddToFreeListFront(0, rootNode);</div>
+<div class="line"><a name="l12144"></a><span class="lineno">12144</span>&#160;}</div>
+<div class="line"><a name="l12145"></a><span class="lineno">12145</span>&#160; </div>
+<div class="line"><a name="l12146"></a><span class="lineno">12146</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Buddy::Validate()<span class="keyword"> const</span></div>
+<div class="line"><a name="l12147"></a><span class="lineno">12147</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l12148"></a><span class="lineno">12148</span>&#160;    <span class="comment">// Validate tree.</span></div>
+<div class="line"><a name="l12149"></a><span class="lineno">12149</span>&#160;    ValidationContext ctx;</div>
+<div class="line"><a name="l12150"></a><span class="lineno">12150</span>&#160;    <span class="keywordflow">if</span>(!ValidateNode(ctx, VMA_NULL, m_Root, 0, LevelToNodeSize(0)))</div>
+<div class="line"><a name="l12151"></a><span class="lineno">12151</span>&#160;    {</div>
+<div class="line"><a name="l12152"></a><span class="lineno">12152</span>&#160;        VMA_VALIDATE(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;ValidateNode failed.&quot;</span>);</div>
+<div class="line"><a name="l12153"></a><span class="lineno">12153</span>&#160;    }</div>
+<div class="line"><a name="l12154"></a><span class="lineno">12154</span>&#160;    VMA_VALIDATE(m_AllocationCount == ctx.calculatedAllocationCount);</div>
+<div class="line"><a name="l12155"></a><span class="lineno">12155</span>&#160;    VMA_VALIDATE(m_SumFreeSize == ctx.calculatedSumFreeSize);</div>
+<div class="line"><a name="l12156"></a><span class="lineno">12156</span>&#160; </div>
+<div class="line"><a name="l12157"></a><span class="lineno">12157</span>&#160;    <span class="comment">// Validate free node lists.</span></div>
+<div class="line"><a name="l12158"></a><span class="lineno">12158</span>&#160;    <span class="keywordflow">for</span>(uint32_t level = 0; level &lt; m_LevelCount; ++level)</div>
+<div class="line"><a name="l12159"></a><span class="lineno">12159</span>&#160;    {</div>
+<div class="line"><a name="l12160"></a><span class="lineno">12160</span>&#160;        VMA_VALIDATE(m_FreeList[level].front == VMA_NULL ||</div>
+<div class="line"><a name="l12161"></a><span class="lineno">12161</span>&#160;            m_FreeList[level].front-&gt;free.prev == VMA_NULL);</div>
+<div class="line"><a name="l12162"></a><span class="lineno">12162</span>&#160; </div>
+<div class="line"><a name="l12163"></a><span class="lineno">12163</span>&#160;        <span class="keywordflow">for</span>(Node* node = m_FreeList[level].front;</div>
+<div class="line"><a name="l12164"></a><span class="lineno">12164</span>&#160;            node != VMA_NULL;</div>
+<div class="line"><a name="l12165"></a><span class="lineno">12165</span>&#160;            node = node-&gt;free.next)</div>
+<div class="line"><a name="l12166"></a><span class="lineno">12166</span>&#160;        {</div>
+<div class="line"><a name="l12167"></a><span class="lineno">12167</span>&#160;            VMA_VALIDATE(node-&gt;type == Node::TYPE_FREE);</div>
+<div class="line"><a name="l12168"></a><span class="lineno">12168</span>&#160; </div>
+<div class="line"><a name="l12169"></a><span class="lineno">12169</span>&#160;            <span class="keywordflow">if</span>(node-&gt;free.next == VMA_NULL)</div>
+<div class="line"><a name="l12170"></a><span class="lineno">12170</span>&#160;            {</div>
+<div class="line"><a name="l12171"></a><span class="lineno">12171</span>&#160;                VMA_VALIDATE(m_FreeList[level].back == node);</div>
+<div class="line"><a name="l12172"></a><span class="lineno">12172</span>&#160;            }</div>
+<div class="line"><a name="l12173"></a><span class="lineno">12173</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l12174"></a><span class="lineno">12174</span>&#160;            {</div>
+<div class="line"><a name="l12175"></a><span class="lineno">12175</span>&#160;                VMA_VALIDATE(node-&gt;free.next-&gt;free.prev == node);</div>
+<div class="line"><a name="l12176"></a><span class="lineno">12176</span>&#160;            }</div>
+<div class="line"><a name="l12177"></a><span class="lineno">12177</span>&#160;        }</div>
+<div class="line"><a name="l12178"></a><span class="lineno">12178</span>&#160;    }</div>
+<div class="line"><a name="l12179"></a><span class="lineno">12179</span>&#160; </div>
+<div class="line"><a name="l12180"></a><span class="lineno">12180</span>&#160;    <span class="comment">// Validate that free lists ar higher levels are empty.</span></div>
+<div class="line"><a name="l12181"></a><span class="lineno">12181</span>&#160;    <span class="keywordflow">for</span>(uint32_t level = m_LevelCount; level &lt; MAX_LEVELS; ++level)</div>
+<div class="line"><a name="l12182"></a><span class="lineno">12182</span>&#160;    {</div>
+<div class="line"><a name="l12183"></a><span class="lineno">12183</span>&#160;        VMA_VALIDATE(m_FreeList[level].front == VMA_NULL &amp;&amp; m_FreeList[level].back == VMA_NULL);</div>
+<div class="line"><a name="l12184"></a><span class="lineno">12184</span>&#160;    }</div>
+<div class="line"><a name="l12185"></a><span class="lineno">12185</span>&#160; </div>
+<div class="line"><a name="l12186"></a><span class="lineno">12186</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l12187"></a><span class="lineno">12187</span>&#160;}</div>
+<div class="line"><a name="l12188"></a><span class="lineno">12188</span>&#160; </div>
+<div class="line"><a name="l12189"></a><span class="lineno">12189</span>&#160;VkDeviceSize VmaBlockMetadata_Buddy::GetUnusedRangeSizeMax()<span class="keyword"> const</span></div>
+<div class="line"><a name="l12190"></a><span class="lineno">12190</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l12191"></a><span class="lineno">12191</span>&#160;    <span class="keywordflow">for</span>(uint32_t level = 0; level &lt; m_LevelCount; ++level)</div>
+<div class="line"><a name="l12192"></a><span class="lineno">12192</span>&#160;    {</div>
+<div class="line"><a name="l12193"></a><span class="lineno">12193</span>&#160;        <span class="keywordflow">if</span>(m_FreeList[level].front != VMA_NULL)</div>
+<div class="line"><a name="l12194"></a><span class="lineno">12194</span>&#160;        {</div>
+<div class="line"><a name="l12195"></a><span class="lineno">12195</span>&#160;            <span class="keywordflow">return</span> LevelToNodeSize(level);</div>
+<div class="line"><a name="l12196"></a><span class="lineno">12196</span>&#160;        }</div>
+<div class="line"><a name="l12197"></a><span class="lineno">12197</span>&#160;    }</div>
+<div class="line"><a name="l12198"></a><span class="lineno">12198</span>&#160;    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l12199"></a><span class="lineno">12199</span>&#160;}</div>
+<div class="line"><a name="l12200"></a><span class="lineno">12200</span>&#160; </div>
+<div class="line"><a name="l12201"></a><span class="lineno">12201</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::CalcAllocationStatInfo(<a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a>&amp; outInfo)<span class="keyword"> const</span></div>
+<div class="line"><a name="l12202"></a><span class="lineno">12202</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l12203"></a><span class="lineno">12203</span>&#160;    <span class="keyword">const</span> VkDeviceSize unusableSize = GetUnusableSize();</div>
+<div class="line"><a name="l12204"></a><span class="lineno">12204</span>&#160; </div>
+<div class="line"><a name="l12205"></a><span class="lineno">12205</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a> = 1;</div>
+<div class="line"><a name="l12206"></a><span class="lineno">12206</span>&#160; </div>
+<div class="line"><a name="l12207"></a><span class="lineno">12207</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a> = outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a> = 0;</div>
+<div class="line"><a name="l12208"></a><span class="lineno">12208</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a> = outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> = 0;</div>
+<div class="line"><a name="l12209"></a><span class="lineno">12209</span>&#160; </div>
+<div class="line"><a name="l12210"></a><span class="lineno">12210</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a> = outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = 0;</div>
+<div class="line"><a name="l12211"></a><span class="lineno">12211</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = UINT64_MAX;</div>
+<div class="line"><a name="l12212"></a><span class="lineno">12212</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#a1081a039964e566c672e7a2347f9e599">allocationSizeAvg</a> = outInfo.<a class="code" href="struct_vma_stat_info.html#a2f9b3452af90c9768a30b7fb6ae194fc">unusedRangeSizeAvg</a> = 0; <span class="comment">// Unused.</span></div>
+<div class="line"><a name="l12213"></a><span class="lineno">12213</span>&#160; </div>
+<div class="line"><a name="l12214"></a><span class="lineno">12214</span>&#160;    CalcAllocationStatInfoNode(outInfo, m_Root, LevelToNodeSize(0));</div>
+<div class="line"><a name="l12215"></a><span class="lineno">12215</span>&#160; </div>
+<div class="line"><a name="l12216"></a><span class="lineno">12216</span>&#160;    <span class="keywordflow">if</span>(unusableSize &gt; 0)</div>
+<div class="line"><a name="l12217"></a><span class="lineno">12217</span>&#160;    {</div>
+<div class="line"><a name="l12218"></a><span class="lineno">12218</span>&#160;        ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
+<div class="line"><a name="l12219"></a><span class="lineno">12219</span>&#160;        outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusableSize;</div>
+<div class="line"><a name="l12220"></a><span class="lineno">12220</span>&#160;        outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MAX(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusableSize);</div>
+<div class="line"><a name="l12221"></a><span class="lineno">12221</span>&#160;        outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusableSize);</div>
+<div class="line"><a name="l12222"></a><span class="lineno">12222</span>&#160;    }</div>
+<div class="line"><a name="l12223"></a><span class="lineno">12223</span>&#160;}</div>
+<div class="line"><a name="l12224"></a><span class="lineno">12224</span>&#160; </div>
+<div class="line"><a name="l12225"></a><span class="lineno">12225</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::AddPoolStats(<a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>&amp; inoutStats)<span class="keyword"> const</span></div>
+<div class="line"><a name="l12226"></a><span class="lineno">12226</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l12227"></a><span class="lineno">12227</span>&#160;    <span class="keyword">const</span> VkDeviceSize unusableSize = GetUnusableSize();</div>
+<div class="line"><a name="l12228"></a><span class="lineno">12228</span>&#160; </div>
+<div class="line"><a name="l12229"></a><span class="lineno">12229</span>&#160;    inoutStats.<a class="code" href="struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c">size</a> += GetSize();</div>
+<div class="line"><a name="l12230"></a><span class="lineno">12230</span>&#160;    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> += m_SumFreeSize + unusableSize;</div>
+<div class="line"><a name="l12231"></a><span class="lineno">12231</span>&#160;    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">allocationCount</a> += m_AllocationCount;</div>
+<div class="line"><a name="l12232"></a><span class="lineno">12232</span>&#160;    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a> += m_FreeCount;</div>
+<div class="line"><a name="l12233"></a><span class="lineno">12233</span>&#160;    inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = VMA_MAX(inoutStats.<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a>, GetUnusedRangeSizeMax());</div>
+<div class="line"><a name="l12234"></a><span class="lineno">12234</span>&#160; </div>
+<div class="line"><a name="l12235"></a><span class="lineno">12235</span>&#160;    <span class="keywordflow">if</span>(unusableSize &gt; 0)</div>
+<div class="line"><a name="l12236"></a><span class="lineno">12236</span>&#160;    {</div>
+<div class="line"><a name="l12237"></a><span class="lineno">12237</span>&#160;        ++inoutStats.<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a>;</div>
+<div class="line"><a name="l12238"></a><span class="lineno">12238</span>&#160;        <span class="comment">// Not updating inoutStats.unusedRangeSizeMax with unusableSize because this space is not available for allocations.</span></div>
+<div class="line"><a name="l12239"></a><span class="lineno">12239</span>&#160;    }</div>
+<div class="line"><a name="l12240"></a><span class="lineno">12240</span>&#160;}</div>
+<div class="line"><a name="l12241"></a><span class="lineno">12241</span>&#160; </div>
+<div class="line"><a name="l12242"></a><span class="lineno">12242</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l12243"></a><span class="lineno">12243</span>&#160; </div>
+<div class="line"><a name="l12244"></a><span class="lineno">12244</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::PrintDetailedMap(<span class="keyword">class</span> VmaJsonWriter&amp; json)<span class="keyword"> const</span></div>
+<div class="line"><a name="l12245"></a><span class="lineno">12245</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l12246"></a><span class="lineno">12246</span>&#160;    <span class="comment">// TODO optimize</span></div>
+<div class="line"><a name="l12247"></a><span class="lineno">12247</span>&#160;    <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> stat;</div>
+<div class="line"><a name="l12248"></a><span class="lineno">12248</span>&#160;    CalcAllocationStatInfo(stat);</div>
+<div class="line"><a name="l12249"></a><span class="lineno">12249</span>&#160; </div>
+<div class="line"><a name="l12250"></a><span class="lineno">12250</span>&#160;    PrintDetailedMap_Begin(</div>
+<div class="line"><a name="l12251"></a><span class="lineno">12251</span>&#160;        json,</div>
+<div class="line"><a name="l12252"></a><span class="lineno">12252</span>&#160;        stat.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a>,</div>
+<div class="line"><a name="l12253"></a><span class="lineno">12253</span>&#160;        stat.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a>,</div>
+<div class="line"><a name="l12254"></a><span class="lineno">12254</span>&#160;        stat.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>);</div>
+<div class="line"><a name="l12255"></a><span class="lineno">12255</span>&#160; </div>
+<div class="line"><a name="l12256"></a><span class="lineno">12256</span>&#160;    PrintDetailedMapNode(json, m_Root, LevelToNodeSize(0));</div>
+<div class="line"><a name="l12257"></a><span class="lineno">12257</span>&#160; </div>
+<div class="line"><a name="l12258"></a><span class="lineno">12258</span>&#160;    <span class="keyword">const</span> VkDeviceSize unusableSize = GetUnusableSize();</div>
+<div class="line"><a name="l12259"></a><span class="lineno">12259</span>&#160;    <span class="keywordflow">if</span>(unusableSize &gt; 0)</div>
+<div class="line"><a name="l12260"></a><span class="lineno">12260</span>&#160;    {</div>
+<div class="line"><a name="l12261"></a><span class="lineno">12261</span>&#160;        PrintDetailedMap_UnusedRange(json,</div>
+<div class="line"><a name="l12262"></a><span class="lineno">12262</span>&#160;            m_UsableSize, <span class="comment">// offset</span></div>
+<div class="line"><a name="l12263"></a><span class="lineno">12263</span>&#160;            unusableSize); <span class="comment">// size</span></div>
+<div class="line"><a name="l12264"></a><span class="lineno">12264</span>&#160;    }</div>
+<div class="line"><a name="l12265"></a><span class="lineno">12265</span>&#160; </div>
+<div class="line"><a name="l12266"></a><span class="lineno">12266</span>&#160;    PrintDetailedMap_End(json);</div>
+<div class="line"><a name="l12267"></a><span class="lineno">12267</span>&#160;}</div>
+<div class="line"><a name="l12268"></a><span class="lineno">12268</span>&#160; </div>
+<div class="line"><a name="l12269"></a><span class="lineno">12269</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l12270"></a><span class="lineno">12270</span>&#160; </div>
+<div class="line"><a name="l12271"></a><span class="lineno">12271</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Buddy::CreateAllocationRequest(</div>
+<div class="line"><a name="l12272"></a><span class="lineno">12272</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l12273"></a><span class="lineno">12273</span>&#160;    uint32_t frameInUseCount,</div>
+<div class="line"><a name="l12274"></a><span class="lineno">12274</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
+<div class="line"><a name="l12275"></a><span class="lineno">12275</span>&#160;    VkDeviceSize allocSize,</div>
+<div class="line"><a name="l12276"></a><span class="lineno">12276</span>&#160;    VkDeviceSize allocAlignment,</div>
+<div class="line"><a name="l12277"></a><span class="lineno">12277</span>&#160;    <span class="keywordtype">bool</span> upperAddress,</div>
+<div class="line"><a name="l12278"></a><span class="lineno">12278</span>&#160;    VmaSuballocationType allocType,</div>
+<div class="line"><a name="l12279"></a><span class="lineno">12279</span>&#160;    <span class="keywordtype">bool</span> canMakeOtherLost,</div>
+<div class="line"><a name="l12280"></a><span class="lineno">12280</span>&#160;    uint32_t strategy,</div>
+<div class="line"><a name="l12281"></a><span class="lineno">12281</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
+<div class="line"><a name="l12282"></a><span class="lineno">12282</span>&#160;{</div>
+<div class="line"><a name="l12283"></a><span class="lineno">12283</span>&#160;    VMA_ASSERT(!upperAddress &amp;&amp; <span class="stringliteral">&quot;VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT can be used only with linear algorithm.&quot;</span>);</div>
+<div class="line"><a name="l12284"></a><span class="lineno">12284</span>&#160; </div>
+<div class="line"><a name="l12285"></a><span class="lineno">12285</span>&#160;    <span class="comment">// Simple way to respect bufferImageGranularity. May be optimized some day.</span></div>
+<div class="line"><a name="l12286"></a><span class="lineno">12286</span>&#160;    <span class="comment">// Whenever it might be an OPTIMAL image...</span></div>
+<div class="line"><a name="l12287"></a><span class="lineno">12287</span>&#160;    <span class="keywordflow">if</span>(allocType == VMA_SUBALLOCATION_TYPE_UNKNOWN ||</div>
+<div class="line"><a name="l12288"></a><span class="lineno">12288</span>&#160;        allocType == VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN ||</div>
+<div class="line"><a name="l12289"></a><span class="lineno">12289</span>&#160;        allocType == VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL)</div>
+<div class="line"><a name="l12290"></a><span class="lineno">12290</span>&#160;    {</div>
+<div class="line"><a name="l12291"></a><span class="lineno">12291</span>&#160;        allocAlignment = VMA_MAX(allocAlignment, bufferImageGranularity);</div>
+<div class="line"><a name="l12292"></a><span class="lineno">12292</span>&#160;        allocSize = VMA_MAX(allocSize, bufferImageGranularity);</div>
+<div class="line"><a name="l12293"></a><span class="lineno">12293</span>&#160;    }</div>
+<div class="line"><a name="l12294"></a><span class="lineno">12294</span>&#160; </div>
+<div class="line"><a name="l12295"></a><span class="lineno">12295</span>&#160;    <span class="keywordflow">if</span>(allocSize &gt; m_UsableSize)</div>
+<div class="line"><a name="l12296"></a><span class="lineno">12296</span>&#160;    {</div>
+<div class="line"><a name="l12297"></a><span class="lineno">12297</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l12298"></a><span class="lineno">12298</span>&#160;    }</div>
+<div class="line"><a name="l12299"></a><span class="lineno">12299</span>&#160; </div>
+<div class="line"><a name="l12300"></a><span class="lineno">12300</span>&#160;    <span class="keyword">const</span> uint32_t targetLevel = AllocSizeToLevel(allocSize);</div>
+<div class="line"><a name="l12301"></a><span class="lineno">12301</span>&#160;    <span class="keywordflow">for</span>(uint32_t level = targetLevel + 1; level--; )</div>
+<div class="line"><a name="l12302"></a><span class="lineno">12302</span>&#160;    {</div>
+<div class="line"><a name="l12303"></a><span class="lineno">12303</span>&#160;        <span class="keywordflow">for</span>(Node* freeNode = m_FreeList[level].front;</div>
+<div class="line"><a name="l12304"></a><span class="lineno">12304</span>&#160;            freeNode != VMA_NULL;</div>
+<div class="line"><a name="l12305"></a><span class="lineno">12305</span>&#160;            freeNode = freeNode-&gt;free.next)</div>
+<div class="line"><a name="l12306"></a><span class="lineno">12306</span>&#160;        {</div>
+<div class="line"><a name="l12307"></a><span class="lineno">12307</span>&#160;            <span class="keywordflow">if</span>(freeNode-&gt;offset % allocAlignment == 0)</div>
+<div class="line"><a name="l12308"></a><span class="lineno">12308</span>&#160;            {</div>
+<div class="line"><a name="l12309"></a><span class="lineno">12309</span>&#160;                pAllocationRequest-&gt;type = VmaAllocationRequestType::Normal;</div>
+<div class="line"><a name="l12310"></a><span class="lineno">12310</span>&#160;                pAllocationRequest-&gt;offset = freeNode-&gt;offset;</div>
+<div class="line"><a name="l12311"></a><span class="lineno">12311</span>&#160;                pAllocationRequest-&gt;sumFreeSize = LevelToNodeSize(level);</div>
+<div class="line"><a name="l12312"></a><span class="lineno">12312</span>&#160;                pAllocationRequest-&gt;sumItemSize = 0;</div>
+<div class="line"><a name="l12313"></a><span class="lineno">12313</span>&#160;                pAllocationRequest-&gt;itemsToMakeLostCount = 0;</div>
+<div class="line"><a name="l12314"></a><span class="lineno">12314</span>&#160;                pAllocationRequest-&gt;customData = (<span class="keywordtype">void</span>*)(uintptr_t)level;</div>
+<div class="line"><a name="l12315"></a><span class="lineno">12315</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l12316"></a><span class="lineno">12316</span>&#160;            }</div>
+<div class="line"><a name="l12317"></a><span class="lineno">12317</span>&#160;        }</div>
+<div class="line"><a name="l12318"></a><span class="lineno">12318</span>&#160;    }</div>
+<div class="line"><a name="l12319"></a><span class="lineno">12319</span>&#160; </div>
+<div class="line"><a name="l12320"></a><span class="lineno">12320</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l12321"></a><span class="lineno">12321</span>&#160;}</div>
+<div class="line"><a name="l12322"></a><span class="lineno">12322</span>&#160; </div>
+<div class="line"><a name="l12323"></a><span class="lineno">12323</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Buddy::MakeRequestedAllocationsLost(</div>
+<div class="line"><a name="l12324"></a><span class="lineno">12324</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l12325"></a><span class="lineno">12325</span>&#160;    uint32_t frameInUseCount,</div>
+<div class="line"><a name="l12326"></a><span class="lineno">12326</span>&#160;    VmaAllocationRequest* pAllocationRequest)</div>
+<div class="line"><a name="l12327"></a><span class="lineno">12327</span>&#160;{</div>
+<div class="line"><a name="l12328"></a><span class="lineno">12328</span>&#160;    <span class="comment">/*</span></div>
+<div class="line"><a name="l12329"></a><span class="lineno">12329</span>&#160;<span class="comment">    Lost allocations are not supported in buddy allocator at the moment.</span></div>
+<div class="line"><a name="l12330"></a><span class="lineno">12330</span>&#160;<span class="comment">    Support might be added in the future.</span></div>
+<div class="line"><a name="l12331"></a><span class="lineno">12331</span>&#160;<span class="comment">    */</span></div>
+<div class="line"><a name="l12332"></a><span class="lineno">12332</span>&#160;    <span class="keywordflow">return</span> pAllocationRequest-&gt;itemsToMakeLostCount == 0;</div>
+<div class="line"><a name="l12333"></a><span class="lineno">12333</span>&#160;}</div>
+<div class="line"><a name="l12334"></a><span class="lineno">12334</span>&#160; </div>
+<div class="line"><a name="l12335"></a><span class="lineno">12335</span>&#160;uint32_t VmaBlockMetadata_Buddy::MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount)</div>
+<div class="line"><a name="l12336"></a><span class="lineno">12336</span>&#160;{</div>
+<div class="line"><a name="l12337"></a><span class="lineno">12337</span>&#160;    <span class="comment">/*</span></div>
+<div class="line"><a name="l12338"></a><span class="lineno">12338</span>&#160;<span class="comment">    Lost allocations are not supported in buddy allocator at the moment.</span></div>
+<div class="line"><a name="l12339"></a><span class="lineno">12339</span>&#160;<span class="comment">    Support might be added in the future.</span></div>
+<div class="line"><a name="l12340"></a><span class="lineno">12340</span>&#160;<span class="comment">    */</span></div>
+<div class="line"><a name="l12341"></a><span class="lineno">12341</span>&#160;    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l12342"></a><span class="lineno">12342</span>&#160;}</div>
+<div class="line"><a name="l12343"></a><span class="lineno">12343</span>&#160; </div>
+<div class="line"><a name="l12344"></a><span class="lineno">12344</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::Alloc(</div>
+<div class="line"><a name="l12345"></a><span class="lineno">12345</span>&#160;    <span class="keyword">const</span> VmaAllocationRequest&amp; request,</div>
+<div class="line"><a name="l12346"></a><span class="lineno">12346</span>&#160;    VmaSuballocationType type,</div>
+<div class="line"><a name="l12347"></a><span class="lineno">12347</span>&#160;    VkDeviceSize allocSize,</div>
+<div class="line"><a name="l12348"></a><span class="lineno">12348</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</div>
+<div class="line"><a name="l12349"></a><span class="lineno">12349</span>&#160;{</div>
+<div class="line"><a name="l12350"></a><span class="lineno">12350</span>&#160;    VMA_ASSERT(request.type == VmaAllocationRequestType::Normal);</div>
+<div class="line"><a name="l12351"></a><span class="lineno">12351</span>&#160; </div>
+<div class="line"><a name="l12352"></a><span class="lineno">12352</span>&#160;    <span class="keyword">const</span> uint32_t targetLevel = AllocSizeToLevel(allocSize);</div>
+<div class="line"><a name="l12353"></a><span class="lineno">12353</span>&#160;    uint32_t currLevel = (uint32_t)(uintptr_t)request.customData;</div>
+<div class="line"><a name="l12354"></a><span class="lineno">12354</span>&#160; </div>
+<div class="line"><a name="l12355"></a><span class="lineno">12355</span>&#160;    Node* currNode = m_FreeList[currLevel].front;</div>
+<div class="line"><a name="l12356"></a><span class="lineno">12356</span>&#160;    VMA_ASSERT(currNode != VMA_NULL &amp;&amp; currNode-&gt;type == Node::TYPE_FREE);</div>
+<div class="line"><a name="l12357"></a><span class="lineno">12357</span>&#160;    <span class="keywordflow">while</span>(currNode-&gt;offset != request.offset)</div>
+<div class="line"><a name="l12358"></a><span class="lineno">12358</span>&#160;    {</div>
+<div class="line"><a name="l12359"></a><span class="lineno">12359</span>&#160;        currNode = currNode-&gt;free.next;</div>
+<div class="line"><a name="l12360"></a><span class="lineno">12360</span>&#160;        VMA_ASSERT(currNode != VMA_NULL &amp;&amp; currNode-&gt;type == Node::TYPE_FREE);</div>
+<div class="line"><a name="l12361"></a><span class="lineno">12361</span>&#160;    }</div>
+<div class="line"><a name="l12362"></a><span class="lineno">12362</span>&#160; </div>
+<div class="line"><a name="l12363"></a><span class="lineno">12363</span>&#160;    <span class="comment">// Go down, splitting free nodes.</span></div>
+<div class="line"><a name="l12364"></a><span class="lineno">12364</span>&#160;    <span class="keywordflow">while</span>(currLevel &lt; targetLevel)</div>
+<div class="line"><a name="l12365"></a><span class="lineno">12365</span>&#160;    {</div>
+<div class="line"><a name="l12366"></a><span class="lineno">12366</span>&#160;        <span class="comment">// currNode is already first free node at currLevel.</span></div>
+<div class="line"><a name="l12367"></a><span class="lineno">12367</span>&#160;        <span class="comment">// Remove it from list of free nodes at this currLevel.</span></div>
+<div class="line"><a name="l12368"></a><span class="lineno">12368</span>&#160;        RemoveFromFreeList(currLevel, currNode);</div>
+<div class="line"><a name="l12369"></a><span class="lineno">12369</span>&#160; </div>
+<div class="line"><a name="l12370"></a><span class="lineno">12370</span>&#160;        <span class="keyword">const</span> uint32_t childrenLevel = currLevel + 1;</div>
+<div class="line"><a name="l12371"></a><span class="lineno">12371</span>&#160; </div>
+<div class="line"><a name="l12372"></a><span class="lineno">12372</span>&#160;        <span class="comment">// Create two free sub-nodes.</span></div>
+<div class="line"><a name="l12373"></a><span class="lineno">12373</span>&#160;        Node* leftChild = vma_new(GetAllocationCallbacks(), Node)();</div>
+<div class="line"><a name="l12374"></a><span class="lineno">12374</span>&#160;        Node* rightChild = vma_new(GetAllocationCallbacks(), Node)();</div>
+<div class="line"><a name="l12375"></a><span class="lineno">12375</span>&#160; </div>
+<div class="line"><a name="l12376"></a><span class="lineno">12376</span>&#160;        leftChild-&gt;offset = currNode-&gt;offset;</div>
+<div class="line"><a name="l12377"></a><span class="lineno">12377</span>&#160;        leftChild-&gt;type = Node::TYPE_FREE;</div>
+<div class="line"><a name="l12378"></a><span class="lineno">12378</span>&#160;        leftChild-&gt;parent = currNode;</div>
+<div class="line"><a name="l12379"></a><span class="lineno">12379</span>&#160;        leftChild-&gt;buddy = rightChild;</div>
+<div class="line"><a name="l12380"></a><span class="lineno">12380</span>&#160; </div>
+<div class="line"><a name="l12381"></a><span class="lineno">12381</span>&#160;        rightChild-&gt;offset = currNode-&gt;offset + LevelToNodeSize(childrenLevel);</div>
+<div class="line"><a name="l12382"></a><span class="lineno">12382</span>&#160;        rightChild-&gt;type = Node::TYPE_FREE;</div>
+<div class="line"><a name="l12383"></a><span class="lineno">12383</span>&#160;        rightChild-&gt;parent = currNode;</div>
+<div class="line"><a name="l12384"></a><span class="lineno">12384</span>&#160;        rightChild-&gt;buddy = leftChild;</div>
+<div class="line"><a name="l12385"></a><span class="lineno">12385</span>&#160; </div>
+<div class="line"><a name="l12386"></a><span class="lineno">12386</span>&#160;        <span class="comment">// Convert current currNode to split type.</span></div>
+<div class="line"><a name="l12387"></a><span class="lineno">12387</span>&#160;        currNode-&gt;type = Node::TYPE_SPLIT;</div>
+<div class="line"><a name="l12388"></a><span class="lineno">12388</span>&#160;        currNode-&gt;split.leftChild = leftChild;</div>
+<div class="line"><a name="l12389"></a><span class="lineno">12389</span>&#160; </div>
+<div class="line"><a name="l12390"></a><span class="lineno">12390</span>&#160;        <span class="comment">// Add child nodes to free list. Order is important!</span></div>
+<div class="line"><a name="l12391"></a><span class="lineno">12391</span>&#160;        AddToFreeListFront(childrenLevel, rightChild);</div>
+<div class="line"><a name="l12392"></a><span class="lineno">12392</span>&#160;        AddToFreeListFront(childrenLevel, leftChild);</div>
+<div class="line"><a name="l12393"></a><span class="lineno">12393</span>&#160; </div>
+<div class="line"><a name="l12394"></a><span class="lineno">12394</span>&#160;        ++m_FreeCount;</div>
+<div class="line"><a name="l12395"></a><span class="lineno">12395</span>&#160;        <span class="comment">//m_SumFreeSize -= LevelToNodeSize(currLevel) % 2; // Useful only when level node sizes can be non power of 2.</span></div>
+<div class="line"><a name="l12396"></a><span class="lineno">12396</span>&#160;        ++currLevel;</div>
+<div class="line"><a name="l12397"></a><span class="lineno">12397</span>&#160;        currNode = m_FreeList[currLevel].front;</div>
+<div class="line"><a name="l12398"></a><span class="lineno">12398</span>&#160; </div>
+<div class="line"><a name="l12399"></a><span class="lineno">12399</span>&#160;        <span class="comment">/*</span></div>
+<div class="line"><a name="l12400"></a><span class="lineno">12400</span>&#160;<span class="comment">        We can be sure that currNode, as left child of node previously split,</span></div>
+<div class="line"><a name="l12401"></a><span class="lineno">12401</span>&#160;<span class="comment">        also fullfills the alignment requirement.</span></div>
+<div class="line"><a name="l12402"></a><span class="lineno">12402</span>&#160;<span class="comment">        */</span></div>
+<div class="line"><a name="l12403"></a><span class="lineno">12403</span>&#160;    }</div>
+<div class="line"><a name="l12404"></a><span class="lineno">12404</span>&#160; </div>
+<div class="line"><a name="l12405"></a><span class="lineno">12405</span>&#160;    <span class="comment">// Remove from free list.</span></div>
+<div class="line"><a name="l12406"></a><span class="lineno">12406</span>&#160;    VMA_ASSERT(currLevel == targetLevel &amp;&amp;</div>
+<div class="line"><a name="l12407"></a><span class="lineno">12407</span>&#160;        currNode != VMA_NULL &amp;&amp;</div>
+<div class="line"><a name="l12408"></a><span class="lineno">12408</span>&#160;        currNode-&gt;type == Node::TYPE_FREE);</div>
+<div class="line"><a name="l12409"></a><span class="lineno">12409</span>&#160;    RemoveFromFreeList(currLevel, currNode);</div>
+<div class="line"><a name="l12410"></a><span class="lineno">12410</span>&#160; </div>
+<div class="line"><a name="l12411"></a><span class="lineno">12411</span>&#160;    <span class="comment">// Convert to allocation node.</span></div>
+<div class="line"><a name="l12412"></a><span class="lineno">12412</span>&#160;    currNode-&gt;type = Node::TYPE_ALLOCATION;</div>
+<div class="line"><a name="l12413"></a><span class="lineno">12413</span>&#160;    currNode-&gt;allocation.alloc = hAllocation;</div>
+<div class="line"><a name="l12414"></a><span class="lineno">12414</span>&#160; </div>
+<div class="line"><a name="l12415"></a><span class="lineno">12415</span>&#160;    ++m_AllocationCount;</div>
+<div class="line"><a name="l12416"></a><span class="lineno">12416</span>&#160;    --m_FreeCount;</div>
+<div class="line"><a name="l12417"></a><span class="lineno">12417</span>&#160;    m_SumFreeSize -= allocSize;</div>
+<div class="line"><a name="l12418"></a><span class="lineno">12418</span>&#160;}</div>
+<div class="line"><a name="l12419"></a><span class="lineno">12419</span>&#160; </div>
+<div class="line"><a name="l12420"></a><span class="lineno">12420</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::DeleteNode(Node* node)</div>
+<div class="line"><a name="l12421"></a><span class="lineno">12421</span>&#160;{</div>
+<div class="line"><a name="l12422"></a><span class="lineno">12422</span>&#160;    <span class="keywordflow">if</span>(node-&gt;type == Node::TYPE_SPLIT)</div>
+<div class="line"><a name="l12423"></a><span class="lineno">12423</span>&#160;    {</div>
+<div class="line"><a name="l12424"></a><span class="lineno">12424</span>&#160;        DeleteNode(node-&gt;split.leftChild-&gt;buddy);</div>
+<div class="line"><a name="l12425"></a><span class="lineno">12425</span>&#160;        DeleteNode(node-&gt;split.leftChild);</div>
+<div class="line"><a name="l12426"></a><span class="lineno">12426</span>&#160;    }</div>
+<div class="line"><a name="l12427"></a><span class="lineno">12427</span>&#160; </div>
+<div class="line"><a name="l12428"></a><span class="lineno">12428</span>&#160;    vma_delete(GetAllocationCallbacks(), node);</div>
+<div class="line"><a name="l12429"></a><span class="lineno">12429</span>&#160;}</div>
+<div class="line"><a name="l12430"></a><span class="lineno">12430</span>&#160; </div>
+<div class="line"><a name="l12431"></a><span class="lineno">12431</span>&#160;<span class="keywordtype">bool</span> VmaBlockMetadata_Buddy::ValidateNode(ValidationContext&amp; ctx, <span class="keyword">const</span> Node* parent, <span class="keyword">const</span> Node* curr, uint32_t level, VkDeviceSize levelNodeSize)<span class="keyword"> const</span></div>
+<div class="line"><a name="l12432"></a><span class="lineno">12432</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l12433"></a><span class="lineno">12433</span>&#160;    VMA_VALIDATE(level &lt; m_LevelCount);</div>
+<div class="line"><a name="l12434"></a><span class="lineno">12434</span>&#160;    VMA_VALIDATE(curr-&gt;parent == parent);</div>
+<div class="line"><a name="l12435"></a><span class="lineno">12435</span>&#160;    VMA_VALIDATE((curr-&gt;buddy == VMA_NULL) == (parent == VMA_NULL));</div>
+<div class="line"><a name="l12436"></a><span class="lineno">12436</span>&#160;    VMA_VALIDATE(curr-&gt;buddy == VMA_NULL || curr-&gt;buddy-&gt;buddy == curr);</div>
+<div class="line"><a name="l12437"></a><span class="lineno">12437</span>&#160;    <span class="keywordflow">switch</span>(curr-&gt;type)</div>
+<div class="line"><a name="l12438"></a><span class="lineno">12438</span>&#160;    {</div>
+<div class="line"><a name="l12439"></a><span class="lineno">12439</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_FREE:</div>
+<div class="line"><a name="l12440"></a><span class="lineno">12440</span>&#160;        <span class="comment">// curr-&gt;free.prev, next are validated separately.</span></div>
+<div class="line"><a name="l12441"></a><span class="lineno">12441</span>&#160;        ctx.calculatedSumFreeSize += levelNodeSize;</div>
+<div class="line"><a name="l12442"></a><span class="lineno">12442</span>&#160;        ++ctx.calculatedFreeCount;</div>
+<div class="line"><a name="l12443"></a><span class="lineno">12443</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l12444"></a><span class="lineno">12444</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_ALLOCATION:</div>
+<div class="line"><a name="l12445"></a><span class="lineno">12445</span>&#160;        ++ctx.calculatedAllocationCount;</div>
+<div class="line"><a name="l12446"></a><span class="lineno">12446</span>&#160;        ctx.calculatedSumFreeSize += levelNodeSize - curr-&gt;allocation.alloc-&gt;GetSize();</div>
+<div class="line"><a name="l12447"></a><span class="lineno">12447</span>&#160;        VMA_VALIDATE(curr-&gt;allocation.alloc != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l12448"></a><span class="lineno">12448</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l12449"></a><span class="lineno">12449</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_SPLIT:</div>
+<div class="line"><a name="l12450"></a><span class="lineno">12450</span>&#160;        {</div>
+<div class="line"><a name="l12451"></a><span class="lineno">12451</span>&#160;            <span class="keyword">const</span> uint32_t childrenLevel = level + 1;</div>
+<div class="line"><a name="l12452"></a><span class="lineno">12452</span>&#160;            <span class="keyword">const</span> VkDeviceSize childrenLevelNodeSize = levelNodeSize / 2;</div>
+<div class="line"><a name="l12453"></a><span class="lineno">12453</span>&#160;            <span class="keyword">const</span> Node* <span class="keyword">const</span> leftChild = curr-&gt;split.leftChild;</div>
+<div class="line"><a name="l12454"></a><span class="lineno">12454</span>&#160;            VMA_VALIDATE(leftChild != VMA_NULL);</div>
+<div class="line"><a name="l12455"></a><span class="lineno">12455</span>&#160;            VMA_VALIDATE(leftChild-&gt;offset == curr-&gt;offset);</div>
+<div class="line"><a name="l12456"></a><span class="lineno">12456</span>&#160;            <span class="keywordflow">if</span>(!ValidateNode(ctx, curr, leftChild, childrenLevel, childrenLevelNodeSize))</div>
+<div class="line"><a name="l12457"></a><span class="lineno">12457</span>&#160;            {</div>
+<div class="line"><a name="l12458"></a><span class="lineno">12458</span>&#160;                VMA_VALIDATE(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;ValidateNode for left child failed.&quot;</span>);</div>
+<div class="line"><a name="l12459"></a><span class="lineno">12459</span>&#160;            }</div>
+<div class="line"><a name="l12460"></a><span class="lineno">12460</span>&#160;            <span class="keyword">const</span> Node* <span class="keyword">const</span> rightChild = leftChild-&gt;buddy;</div>
+<div class="line"><a name="l12461"></a><span class="lineno">12461</span>&#160;            VMA_VALIDATE(rightChild-&gt;offset == curr-&gt;offset + childrenLevelNodeSize);</div>
+<div class="line"><a name="l12462"></a><span class="lineno">12462</span>&#160;            <span class="keywordflow">if</span>(!ValidateNode(ctx, curr, rightChild, childrenLevel, childrenLevelNodeSize))</div>
+<div class="line"><a name="l12463"></a><span class="lineno">12463</span>&#160;            {</div>
+<div class="line"><a name="l12464"></a><span class="lineno">12464</span>&#160;                VMA_VALIDATE(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;ValidateNode for right child failed.&quot;</span>);</div>
+<div class="line"><a name="l12465"></a><span class="lineno">12465</span>&#160;            }</div>
+<div class="line"><a name="l12466"></a><span class="lineno">12466</span>&#160;        }</div>
+<div class="line"><a name="l12467"></a><span class="lineno">12467</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l12468"></a><span class="lineno">12468</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l12469"></a><span class="lineno">12469</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l12470"></a><span class="lineno">12470</span>&#160;    }</div>
+<div class="line"><a name="l12471"></a><span class="lineno">12471</span>&#160; </div>
+<div class="line"><a name="l12472"></a><span class="lineno">12472</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l12473"></a><span class="lineno">12473</span>&#160;}</div>
+<div class="line"><a name="l12474"></a><span class="lineno">12474</span>&#160; </div>
+<div class="line"><a name="l12475"></a><span class="lineno">12475</span>&#160;uint32_t VmaBlockMetadata_Buddy::AllocSizeToLevel(VkDeviceSize allocSize)<span class="keyword"> const</span></div>
+<div class="line"><a name="l12476"></a><span class="lineno">12476</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l12477"></a><span class="lineno">12477</span>&#160;    <span class="comment">// I know this could be optimized somehow e.g. by using std::log2p1 from C++20.</span></div>
+<div class="line"><a name="l12478"></a><span class="lineno">12478</span>&#160;    uint32_t level = 0;</div>
+<div class="line"><a name="l12479"></a><span class="lineno">12479</span>&#160;    VkDeviceSize currLevelNodeSize = m_UsableSize;</div>
+<div class="line"><a name="l12480"></a><span class="lineno">12480</span>&#160;    VkDeviceSize nextLevelNodeSize = currLevelNodeSize &gt;&gt; 1;</div>
+<div class="line"><a name="l12481"></a><span class="lineno">12481</span>&#160;    <span class="keywordflow">while</span>(allocSize &lt;= nextLevelNodeSize &amp;&amp; level + 1 &lt; m_LevelCount)</div>
+<div class="line"><a name="l12482"></a><span class="lineno">12482</span>&#160;    {</div>
+<div class="line"><a name="l12483"></a><span class="lineno">12483</span>&#160;        ++level;</div>
+<div class="line"><a name="l12484"></a><span class="lineno">12484</span>&#160;        currLevelNodeSize = nextLevelNodeSize;</div>
+<div class="line"><a name="l12485"></a><span class="lineno">12485</span>&#160;        nextLevelNodeSize = currLevelNodeSize &gt;&gt; 1;</div>
+<div class="line"><a name="l12486"></a><span class="lineno">12486</span>&#160;    }</div>
+<div class="line"><a name="l12487"></a><span class="lineno">12487</span>&#160;    <span class="keywordflow">return</span> level;</div>
+<div class="line"><a name="l12488"></a><span class="lineno">12488</span>&#160;}</div>
+<div class="line"><a name="l12489"></a><span class="lineno">12489</span>&#160; </div>
+<div class="line"><a name="l12490"></a><span class="lineno">12490</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::FreeAtOffset(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> alloc, VkDeviceSize offset)</div>
+<div class="line"><a name="l12491"></a><span class="lineno">12491</span>&#160;{</div>
+<div class="line"><a name="l12492"></a><span class="lineno">12492</span>&#160;    <span class="comment">// Find node and level.</span></div>
+<div class="line"><a name="l12493"></a><span class="lineno">12493</span>&#160;    Node* node = m_Root;</div>
+<div class="line"><a name="l12494"></a><span class="lineno">12494</span>&#160;    VkDeviceSize nodeOffset = 0;</div>
+<div class="line"><a name="l12495"></a><span class="lineno">12495</span>&#160;    uint32_t level = 0;</div>
+<div class="line"><a name="l12496"></a><span class="lineno">12496</span>&#160;    VkDeviceSize levelNodeSize = LevelToNodeSize(0);</div>
+<div class="line"><a name="l12497"></a><span class="lineno">12497</span>&#160;    <span class="keywordflow">while</span>(node-&gt;type == Node::TYPE_SPLIT)</div>
+<div class="line"><a name="l12498"></a><span class="lineno">12498</span>&#160;    {</div>
+<div class="line"><a name="l12499"></a><span class="lineno">12499</span>&#160;        <span class="keyword">const</span> VkDeviceSize nextLevelSize = levelNodeSize &gt;&gt; 1;</div>
+<div class="line"><a name="l12500"></a><span class="lineno">12500</span>&#160;        <span class="keywordflow">if</span>(offset &lt; nodeOffset + nextLevelSize)</div>
+<div class="line"><a name="l12501"></a><span class="lineno">12501</span>&#160;        {</div>
+<div class="line"><a name="l12502"></a><span class="lineno">12502</span>&#160;            node = node-&gt;split.leftChild;</div>
+<div class="line"><a name="l12503"></a><span class="lineno">12503</span>&#160;        }</div>
+<div class="line"><a name="l12504"></a><span class="lineno">12504</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l12505"></a><span class="lineno">12505</span>&#160;        {</div>
+<div class="line"><a name="l12506"></a><span class="lineno">12506</span>&#160;            node = node-&gt;split.leftChild-&gt;buddy;</div>
+<div class="line"><a name="l12507"></a><span class="lineno">12507</span>&#160;            nodeOffset += nextLevelSize;</div>
+<div class="line"><a name="l12508"></a><span class="lineno">12508</span>&#160;        }</div>
+<div class="line"><a name="l12509"></a><span class="lineno">12509</span>&#160;        ++level;</div>
+<div class="line"><a name="l12510"></a><span class="lineno">12510</span>&#160;        levelNodeSize = nextLevelSize;</div>
+<div class="line"><a name="l12511"></a><span class="lineno">12511</span>&#160;    }</div>
+<div class="line"><a name="l12512"></a><span class="lineno">12512</span>&#160; </div>
+<div class="line"><a name="l12513"></a><span class="lineno">12513</span>&#160;    VMA_ASSERT(node != VMA_NULL &amp;&amp; node-&gt;type == Node::TYPE_ALLOCATION);</div>
+<div class="line"><a name="l12514"></a><span class="lineno">12514</span>&#160;    VMA_ASSERT(alloc == VK_NULL_HANDLE || node-&gt;allocation.alloc == alloc);</div>
+<div class="line"><a name="l12515"></a><span class="lineno">12515</span>&#160; </div>
+<div class="line"><a name="l12516"></a><span class="lineno">12516</span>&#160;    ++m_FreeCount;</div>
+<div class="line"><a name="l12517"></a><span class="lineno">12517</span>&#160;    --m_AllocationCount;</div>
+<div class="line"><a name="l12518"></a><span class="lineno">12518</span>&#160;    m_SumFreeSize += alloc-&gt;GetSize();</div>
+<div class="line"><a name="l12519"></a><span class="lineno">12519</span>&#160; </div>
+<div class="line"><a name="l12520"></a><span class="lineno">12520</span>&#160;    node-&gt;type = Node::TYPE_FREE;</div>
+<div class="line"><a name="l12521"></a><span class="lineno">12521</span>&#160; </div>
+<div class="line"><a name="l12522"></a><span class="lineno">12522</span>&#160;    <span class="comment">// Join free nodes if possible.</span></div>
+<div class="line"><a name="l12523"></a><span class="lineno">12523</span>&#160;    <span class="keywordflow">while</span>(level &gt; 0 &amp;&amp; node-&gt;buddy-&gt;type == Node::TYPE_FREE)</div>
+<div class="line"><a name="l12524"></a><span class="lineno">12524</span>&#160;    {</div>
+<div class="line"><a name="l12525"></a><span class="lineno">12525</span>&#160;        RemoveFromFreeList(level, node-&gt;buddy);</div>
+<div class="line"><a name="l12526"></a><span class="lineno">12526</span>&#160;        Node* <span class="keyword">const</span> parent = node-&gt;parent;</div>
+<div class="line"><a name="l12527"></a><span class="lineno">12527</span>&#160; </div>
+<div class="line"><a name="l12528"></a><span class="lineno">12528</span>&#160;        vma_delete(GetAllocationCallbacks(), node-&gt;buddy);</div>
+<div class="line"><a name="l12529"></a><span class="lineno">12529</span>&#160;        vma_delete(GetAllocationCallbacks(), node);</div>
+<div class="line"><a name="l12530"></a><span class="lineno">12530</span>&#160;        parent-&gt;type = Node::TYPE_FREE;</div>
+<div class="line"><a name="l12531"></a><span class="lineno">12531</span>&#160; </div>
+<div class="line"><a name="l12532"></a><span class="lineno">12532</span>&#160;        node = parent;</div>
+<div class="line"><a name="l12533"></a><span class="lineno">12533</span>&#160;        --level;</div>
+<div class="line"><a name="l12534"></a><span class="lineno">12534</span>&#160;        <span class="comment">//m_SumFreeSize += LevelToNodeSize(level) % 2; // Useful only when level node sizes can be non power of 2.</span></div>
+<div class="line"><a name="l12535"></a><span class="lineno">12535</span>&#160;        --m_FreeCount;</div>
+<div class="line"><a name="l12536"></a><span class="lineno">12536</span>&#160;    }</div>
+<div class="line"><a name="l12537"></a><span class="lineno">12537</span>&#160; </div>
+<div class="line"><a name="l12538"></a><span class="lineno">12538</span>&#160;    AddToFreeListFront(level, node);</div>
+<div class="line"><a name="l12539"></a><span class="lineno">12539</span>&#160;}</div>
+<div class="line"><a name="l12540"></a><span class="lineno">12540</span>&#160; </div>
+<div class="line"><a name="l12541"></a><span class="lineno">12541</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::CalcAllocationStatInfoNode(<a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a>&amp; outInfo, <span class="keyword">const</span> Node* node, VkDeviceSize levelNodeSize)<span class="keyword"> const</span></div>
+<div class="line"><a name="l12542"></a><span class="lineno">12542</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l12543"></a><span class="lineno">12543</span>&#160;    <span class="keywordflow">switch</span>(node-&gt;type)</div>
+<div class="line"><a name="l12544"></a><span class="lineno">12544</span>&#160;    {</div>
+<div class="line"><a name="l12545"></a><span class="lineno">12545</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_FREE:</div>
+<div class="line"><a name="l12546"></a><span class="lineno">12546</span>&#160;        ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
+<div class="line"><a name="l12547"></a><span class="lineno">12547</span>&#160;        outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += levelNodeSize;</div>
+<div class="line"><a name="l12548"></a><span class="lineno">12548</span>&#160;        outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MAX(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, levelNodeSize);</div>
+<div class="line"><a name="l12549"></a><span class="lineno">12549</span>&#160;        outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MAX(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, levelNodeSize);</div>
+<div class="line"><a name="l12550"></a><span class="lineno">12550</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l12551"></a><span class="lineno">12551</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_ALLOCATION:</div>
+<div class="line"><a name="l12552"></a><span class="lineno">12552</span>&#160;        {</div>
+<div class="line"><a name="l12553"></a><span class="lineno">12553</span>&#160;            <span class="keyword">const</span> VkDeviceSize allocSize = node-&gt;allocation.alloc-&gt;GetSize();</div>
+<div class="line"><a name="l12554"></a><span class="lineno">12554</span>&#160;            ++outInfo.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a>;</div>
+<div class="line"><a name="l12555"></a><span class="lineno">12555</span>&#160;            outInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a> += allocSize;</div>
+<div class="line"><a name="l12556"></a><span class="lineno">12556</span>&#160;            outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a> = VMA_MAX(outInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a>, allocSize);</div>
+<div class="line"><a name="l12557"></a><span class="lineno">12557</span>&#160;            outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = VMA_MAX(outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>, allocSize);</div>
+<div class="line"><a name="l12558"></a><span class="lineno">12558</span>&#160; </div>
+<div class="line"><a name="l12559"></a><span class="lineno">12559</span>&#160;            <span class="keyword">const</span> VkDeviceSize unusedRangeSize = levelNodeSize - allocSize;</div>
+<div class="line"><a name="l12560"></a><span class="lineno">12560</span>&#160;            <span class="keywordflow">if</span>(unusedRangeSize &gt; 0)</div>
+<div class="line"><a name="l12561"></a><span class="lineno">12561</span>&#160;            {</div>
+<div class="line"><a name="l12562"></a><span class="lineno">12562</span>&#160;                ++outInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
+<div class="line"><a name="l12563"></a><span class="lineno">12563</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += unusedRangeSize;</div>
+<div class="line"><a name="l12564"></a><span class="lineno">12564</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MAX(outInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, unusedRangeSize);</div>
+<div class="line"><a name="l12565"></a><span class="lineno">12565</span>&#160;                outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MAX(outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, unusedRangeSize);</div>
+<div class="line"><a name="l12566"></a><span class="lineno">12566</span>&#160;            }</div>
+<div class="line"><a name="l12567"></a><span class="lineno">12567</span>&#160;        }</div>
+<div class="line"><a name="l12568"></a><span class="lineno">12568</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l12569"></a><span class="lineno">12569</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_SPLIT:</div>
+<div class="line"><a name="l12570"></a><span class="lineno">12570</span>&#160;        {</div>
+<div class="line"><a name="l12571"></a><span class="lineno">12571</span>&#160;            <span class="keyword">const</span> VkDeviceSize childrenNodeSize = levelNodeSize / 2;</div>
+<div class="line"><a name="l12572"></a><span class="lineno">12572</span>&#160;            <span class="keyword">const</span> Node* <span class="keyword">const</span> leftChild = node-&gt;split.leftChild;</div>
+<div class="line"><a name="l12573"></a><span class="lineno">12573</span>&#160;            CalcAllocationStatInfoNode(outInfo, leftChild, childrenNodeSize);</div>
+<div class="line"><a name="l12574"></a><span class="lineno">12574</span>&#160;            <span class="keyword">const</span> Node* <span class="keyword">const</span> rightChild = leftChild-&gt;buddy;</div>
+<div class="line"><a name="l12575"></a><span class="lineno">12575</span>&#160;            CalcAllocationStatInfoNode(outInfo, rightChild, childrenNodeSize);</div>
+<div class="line"><a name="l12576"></a><span class="lineno">12576</span>&#160;        }</div>
+<div class="line"><a name="l12577"></a><span class="lineno">12577</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l12578"></a><span class="lineno">12578</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l12579"></a><span class="lineno">12579</span>&#160;        VMA_ASSERT(0);</div>
+<div class="line"><a name="l12580"></a><span class="lineno">12580</span>&#160;    }</div>
+<div class="line"><a name="l12581"></a><span class="lineno">12581</span>&#160;}</div>
+<div class="line"><a name="l12582"></a><span class="lineno">12582</span>&#160; </div>
+<div class="line"><a name="l12583"></a><span class="lineno">12583</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::AddToFreeListFront(uint32_t level, Node* node)</div>
+<div class="line"><a name="l12584"></a><span class="lineno">12584</span>&#160;{</div>
+<div class="line"><a name="l12585"></a><span class="lineno">12585</span>&#160;    VMA_ASSERT(node-&gt;type == Node::TYPE_FREE);</div>
+<div class="line"><a name="l12586"></a><span class="lineno">12586</span>&#160; </div>
+<div class="line"><a name="l12587"></a><span class="lineno">12587</span>&#160;    <span class="comment">// List is empty.</span></div>
+<div class="line"><a name="l12588"></a><span class="lineno">12588</span>&#160;    Node* <span class="keyword">const</span> frontNode = m_FreeList[level].front;</div>
+<div class="line"><a name="l12589"></a><span class="lineno">12589</span>&#160;    <span class="keywordflow">if</span>(frontNode == VMA_NULL)</div>
+<div class="line"><a name="l12590"></a><span class="lineno">12590</span>&#160;    {</div>
+<div class="line"><a name="l12591"></a><span class="lineno">12591</span>&#160;        VMA_ASSERT(m_FreeList[level].back == VMA_NULL);</div>
+<div class="line"><a name="l12592"></a><span class="lineno">12592</span>&#160;        node-&gt;free.prev = node-&gt;free.next = VMA_NULL;</div>
+<div class="line"><a name="l12593"></a><span class="lineno">12593</span>&#160;        m_FreeList[level].front = m_FreeList[level].back = node;</div>
+<div class="line"><a name="l12594"></a><span class="lineno">12594</span>&#160;    }</div>
+<div class="line"><a name="l12595"></a><span class="lineno">12595</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l12596"></a><span class="lineno">12596</span>&#160;    {</div>
+<div class="line"><a name="l12597"></a><span class="lineno">12597</span>&#160;        VMA_ASSERT(frontNode-&gt;free.prev == VMA_NULL);</div>
+<div class="line"><a name="l12598"></a><span class="lineno">12598</span>&#160;        node-&gt;free.prev = VMA_NULL;</div>
+<div class="line"><a name="l12599"></a><span class="lineno">12599</span>&#160;        node-&gt;free.next = frontNode;</div>
+<div class="line"><a name="l12600"></a><span class="lineno">12600</span>&#160;        frontNode-&gt;free.prev = node;</div>
+<div class="line"><a name="l12601"></a><span class="lineno">12601</span>&#160;        m_FreeList[level].front = node;</div>
+<div class="line"><a name="l12602"></a><span class="lineno">12602</span>&#160;    }</div>
+<div class="line"><a name="l12603"></a><span class="lineno">12603</span>&#160;}</div>
+<div class="line"><a name="l12604"></a><span class="lineno">12604</span>&#160; </div>
+<div class="line"><a name="l12605"></a><span class="lineno">12605</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::RemoveFromFreeList(uint32_t level, Node* node)</div>
+<div class="line"><a name="l12606"></a><span class="lineno">12606</span>&#160;{</div>
+<div class="line"><a name="l12607"></a><span class="lineno">12607</span>&#160;    VMA_ASSERT(m_FreeList[level].front != VMA_NULL);</div>
+<div class="line"><a name="l12608"></a><span class="lineno">12608</span>&#160; </div>
+<div class="line"><a name="l12609"></a><span class="lineno">12609</span>&#160;    <span class="comment">// It is at the front.</span></div>
+<div class="line"><a name="l12610"></a><span class="lineno">12610</span>&#160;    <span class="keywordflow">if</span>(node-&gt;free.prev == VMA_NULL)</div>
+<div class="line"><a name="l12611"></a><span class="lineno">12611</span>&#160;    {</div>
+<div class="line"><a name="l12612"></a><span class="lineno">12612</span>&#160;        VMA_ASSERT(m_FreeList[level].front == node);</div>
+<div class="line"><a name="l12613"></a><span class="lineno">12613</span>&#160;        m_FreeList[level].front = node-&gt;free.next;</div>
+<div class="line"><a name="l12614"></a><span class="lineno">12614</span>&#160;    }</div>
+<div class="line"><a name="l12615"></a><span class="lineno">12615</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l12616"></a><span class="lineno">12616</span>&#160;    {</div>
+<div class="line"><a name="l12617"></a><span class="lineno">12617</span>&#160;        Node* <span class="keyword">const</span> prevFreeNode = node-&gt;free.prev;</div>
+<div class="line"><a name="l12618"></a><span class="lineno">12618</span>&#160;        VMA_ASSERT(prevFreeNode-&gt;free.next == node);</div>
+<div class="line"><a name="l12619"></a><span class="lineno">12619</span>&#160;        prevFreeNode-&gt;free.next = node-&gt;free.next;</div>
+<div class="line"><a name="l12620"></a><span class="lineno">12620</span>&#160;    }</div>
+<div class="line"><a name="l12621"></a><span class="lineno">12621</span>&#160; </div>
+<div class="line"><a name="l12622"></a><span class="lineno">12622</span>&#160;    <span class="comment">// It is at the back.</span></div>
+<div class="line"><a name="l12623"></a><span class="lineno">12623</span>&#160;    <span class="keywordflow">if</span>(node-&gt;free.next == VMA_NULL)</div>
+<div class="line"><a name="l12624"></a><span class="lineno">12624</span>&#160;    {</div>
+<div class="line"><a name="l12625"></a><span class="lineno">12625</span>&#160;        VMA_ASSERT(m_FreeList[level].back == node);</div>
+<div class="line"><a name="l12626"></a><span class="lineno">12626</span>&#160;        m_FreeList[level].back = node-&gt;free.prev;</div>
+<div class="line"><a name="l12627"></a><span class="lineno">12627</span>&#160;    }</div>
+<div class="line"><a name="l12628"></a><span class="lineno">12628</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l12629"></a><span class="lineno">12629</span>&#160;    {</div>
+<div class="line"><a name="l12630"></a><span class="lineno">12630</span>&#160;        Node* <span class="keyword">const</span> nextFreeNode = node-&gt;free.next;</div>
+<div class="line"><a name="l12631"></a><span class="lineno">12631</span>&#160;        VMA_ASSERT(nextFreeNode-&gt;free.prev == node);</div>
+<div class="line"><a name="l12632"></a><span class="lineno">12632</span>&#160;        nextFreeNode-&gt;free.prev = node-&gt;free.prev;</div>
+<div class="line"><a name="l12633"></a><span class="lineno">12633</span>&#160;    }</div>
+<div class="line"><a name="l12634"></a><span class="lineno">12634</span>&#160;}</div>
+<div class="line"><a name="l12635"></a><span class="lineno">12635</span>&#160; </div>
+<div class="line"><a name="l12636"></a><span class="lineno">12636</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l12637"></a><span class="lineno">12637</span>&#160;<span class="keywordtype">void</span> VmaBlockMetadata_Buddy::PrintDetailedMapNode(<span class="keyword">class</span> VmaJsonWriter&amp; json, <span class="keyword">const</span> Node* node, VkDeviceSize levelNodeSize)<span class="keyword"> const</span></div>
+<div class="line"><a name="l12638"></a><span class="lineno">12638</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l12639"></a><span class="lineno">12639</span>&#160;    <span class="keywordflow">switch</span>(node-&gt;type)</div>
+<div class="line"><a name="l12640"></a><span class="lineno">12640</span>&#160;    {</div>
+<div class="line"><a name="l12641"></a><span class="lineno">12641</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_FREE:</div>
+<div class="line"><a name="l12642"></a><span class="lineno">12642</span>&#160;        PrintDetailedMap_UnusedRange(json, node-&gt;offset, levelNodeSize);</div>
+<div class="line"><a name="l12643"></a><span class="lineno">12643</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l12644"></a><span class="lineno">12644</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_ALLOCATION:</div>
+<div class="line"><a name="l12645"></a><span class="lineno">12645</span>&#160;        {</div>
+<div class="line"><a name="l12646"></a><span class="lineno">12646</span>&#160;            PrintDetailedMap_Allocation(json, node-&gt;offset, node-&gt;allocation.alloc);</div>
+<div class="line"><a name="l12647"></a><span class="lineno">12647</span>&#160;            <span class="keyword">const</span> VkDeviceSize allocSize = node-&gt;allocation.alloc-&gt;GetSize();</div>
+<div class="line"><a name="l12648"></a><span class="lineno">12648</span>&#160;            <span class="keywordflow">if</span>(allocSize &lt; levelNodeSize)</div>
+<div class="line"><a name="l12649"></a><span class="lineno">12649</span>&#160;            {</div>
+<div class="line"><a name="l12650"></a><span class="lineno">12650</span>&#160;                PrintDetailedMap_UnusedRange(json, node-&gt;offset + allocSize, levelNodeSize - allocSize);</div>
+<div class="line"><a name="l12651"></a><span class="lineno">12651</span>&#160;            }</div>
+<div class="line"><a name="l12652"></a><span class="lineno">12652</span>&#160;        }</div>
+<div class="line"><a name="l12653"></a><span class="lineno">12653</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l12654"></a><span class="lineno">12654</span>&#160;    <span class="keywordflow">case</span> Node::TYPE_SPLIT:</div>
+<div class="line"><a name="l12655"></a><span class="lineno">12655</span>&#160;        {</div>
+<div class="line"><a name="l12656"></a><span class="lineno">12656</span>&#160;            <span class="keyword">const</span> VkDeviceSize childrenNodeSize = levelNodeSize / 2;</div>
+<div class="line"><a name="l12657"></a><span class="lineno">12657</span>&#160;            <span class="keyword">const</span> Node* <span class="keyword">const</span> leftChild = node-&gt;split.leftChild;</div>
+<div class="line"><a name="l12658"></a><span class="lineno">12658</span>&#160;            PrintDetailedMapNode(json, leftChild, childrenNodeSize);</div>
+<div class="line"><a name="l12659"></a><span class="lineno">12659</span>&#160;            <span class="keyword">const</span> Node* <span class="keyword">const</span> rightChild = leftChild-&gt;buddy;</div>
+<div class="line"><a name="l12660"></a><span class="lineno">12660</span>&#160;            PrintDetailedMapNode(json, rightChild, childrenNodeSize);</div>
+<div class="line"><a name="l12661"></a><span class="lineno">12661</span>&#160;        }</div>
+<div class="line"><a name="l12662"></a><span class="lineno">12662</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l12663"></a><span class="lineno">12663</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l12664"></a><span class="lineno">12664</span>&#160;        VMA_ASSERT(0);</div>
+<div class="line"><a name="l12665"></a><span class="lineno">12665</span>&#160;    }</div>
+<div class="line"><a name="l12666"></a><span class="lineno">12666</span>&#160;}</div>
+<div class="line"><a name="l12667"></a><span class="lineno">12667</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l12668"></a><span class="lineno">12668</span>&#160; </div>
 <div class="line"><a name="l12669"></a><span class="lineno">12669</span>&#160; </div>
-<div class="line"><a name="l12670"></a><span class="lineno">12670</span>&#160; </div>
-<div class="line"><a name="l12672"></a><span class="lineno">12672</span>&#160;<span class="comment">// class VmaDeviceMemoryBlock</span></div>
-<div class="line"><a name="l12673"></a><span class="lineno">12673</span>&#160; </div>
-<div class="line"><a name="l12674"></a><span class="lineno">12674</span>&#160;VmaDeviceMemoryBlock::VmaDeviceMemoryBlock(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator) :</div>
-<div class="line"><a name="l12675"></a><span class="lineno">12675</span>&#160;    m_pMetadata(VMA_NULL),</div>
-<div class="line"><a name="l12676"></a><span class="lineno">12676</span>&#160;    m_MemoryTypeIndex(UINT32_MAX),</div>
-<div class="line"><a name="l12677"></a><span class="lineno">12677</span>&#160;    m_Id(0),</div>
-<div class="line"><a name="l12678"></a><span class="lineno">12678</span>&#160;    m_hMemory(VK_NULL_HANDLE),</div>
-<div class="line"><a name="l12679"></a><span class="lineno">12679</span>&#160;    m_MapCount(0),</div>
-<div class="line"><a name="l12680"></a><span class="lineno">12680</span>&#160;    m_pMappedData(VMA_NULL)</div>
-<div class="line"><a name="l12681"></a><span class="lineno">12681</span>&#160;{</div>
-<div class="line"><a name="l12682"></a><span class="lineno">12682</span>&#160;}</div>
-<div class="line"><a name="l12683"></a><span class="lineno">12683</span>&#160; </div>
-<div class="line"><a name="l12684"></a><span class="lineno">12684</span>&#160;<span class="keywordtype">void</span> VmaDeviceMemoryBlock::Init(</div>
-<div class="line"><a name="l12685"></a><span class="lineno">12685</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
-<div class="line"><a name="l12686"></a><span class="lineno">12686</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> hParentPool,</div>
-<div class="line"><a name="l12687"></a><span class="lineno">12687</span>&#160;    uint32_t newMemoryTypeIndex,</div>
-<div class="line"><a name="l12688"></a><span class="lineno">12688</span>&#160;    VkDeviceMemory newMemory,</div>
-<div class="line"><a name="l12689"></a><span class="lineno">12689</span>&#160;    VkDeviceSize newSize,</div>
-<div class="line"><a name="l12690"></a><span class="lineno">12690</span>&#160;    uint32_t <span class="keywordtype">id</span>,</div>
-<div class="line"><a name="l12691"></a><span class="lineno">12691</span>&#160;    uint32_t algorithm)</div>
-<div class="line"><a name="l12692"></a><span class="lineno">12692</span>&#160;{</div>
-<div class="line"><a name="l12693"></a><span class="lineno">12693</span>&#160;    VMA_ASSERT(m_hMemory == VK_NULL_HANDLE);</div>
-<div class="line"><a name="l12694"></a><span class="lineno">12694</span>&#160; </div>
-<div class="line"><a name="l12695"></a><span class="lineno">12695</span>&#160;    m_hParentPool = hParentPool;</div>
-<div class="line"><a name="l12696"></a><span class="lineno">12696</span>&#160;    m_MemoryTypeIndex = newMemoryTypeIndex;</div>
-<div class="line"><a name="l12697"></a><span class="lineno">12697</span>&#160;    m_Id = id;</div>
-<div class="line"><a name="l12698"></a><span class="lineno">12698</span>&#160;    m_hMemory = newMemory;</div>
-<div class="line"><a name="l12699"></a><span class="lineno">12699</span>&#160; </div>
-<div class="line"><a name="l12700"></a><span class="lineno">12700</span>&#160;    <span class="keywordflow">switch</span>(algorithm)</div>
-<div class="line"><a name="l12701"></a><span class="lineno">12701</span>&#160;    {</div>
-<div class="line"><a name="l12702"></a><span class="lineno">12702</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a>:</div>
-<div class="line"><a name="l12703"></a><span class="lineno">12703</span>&#160;        m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Linear)(hAllocator);</div>
-<div class="line"><a name="l12704"></a><span class="lineno">12704</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l12705"></a><span class="lineno">12705</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a>:</div>
-<div class="line"><a name="l12706"></a><span class="lineno">12706</span>&#160;        m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Buddy)(hAllocator);</div>
-<div class="line"><a name="l12707"></a><span class="lineno">12707</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l12708"></a><span class="lineno">12708</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l12709"></a><span class="lineno">12709</span>&#160;        VMA_ASSERT(0);</div>
-<div class="line"><a name="l12710"></a><span class="lineno">12710</span>&#160;        <span class="comment">// Fall-through.</span></div>
-<div class="line"><a name="l12711"></a><span class="lineno">12711</span>&#160;    <span class="keywordflow">case</span> 0:</div>
-<div class="line"><a name="l12712"></a><span class="lineno">12712</span>&#160;        m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Generic)(hAllocator);</div>
-<div class="line"><a name="l12713"></a><span class="lineno">12713</span>&#160;    }</div>
-<div class="line"><a name="l12714"></a><span class="lineno">12714</span>&#160;    m_pMetadata-&gt;Init(newSize);</div>
-<div class="line"><a name="l12715"></a><span class="lineno">12715</span>&#160;}</div>
-<div class="line"><a name="l12716"></a><span class="lineno">12716</span>&#160; </div>
-<div class="line"><a name="l12717"></a><span class="lineno">12717</span>&#160;<span class="keywordtype">void</span> VmaDeviceMemoryBlock::Destroy(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator)</div>
-<div class="line"><a name="l12718"></a><span class="lineno">12718</span>&#160;{</div>
-<div class="line"><a name="l12719"></a><span class="lineno">12719</span>&#160;    <span class="comment">// This is the most important assert in the entire library.</span></div>
-<div class="line"><a name="l12720"></a><span class="lineno">12720</span>&#160;    <span class="comment">// Hitting it means you have some memory leak - unreleased VmaAllocation objects.</span></div>
-<div class="line"><a name="l12721"></a><span class="lineno">12721</span>&#160;    VMA_ASSERT(m_pMetadata-&gt;IsEmpty() &amp;&amp; <span class="stringliteral">&quot;Some allocations were not freed before destruction of this memory block!&quot;</span>);</div>
-<div class="line"><a name="l12722"></a><span class="lineno">12722</span>&#160; </div>
-<div class="line"><a name="l12723"></a><span class="lineno">12723</span>&#160;    VMA_ASSERT(m_hMemory != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l12724"></a><span class="lineno">12724</span>&#160;    allocator-&gt;FreeVulkanMemory(m_MemoryTypeIndex, m_pMetadata-&gt;GetSize(), m_hMemory);</div>
-<div class="line"><a name="l12725"></a><span class="lineno">12725</span>&#160;    m_hMemory = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l12726"></a><span class="lineno">12726</span>&#160; </div>
-<div class="line"><a name="l12727"></a><span class="lineno">12727</span>&#160;    vma_delete(allocator, m_pMetadata);</div>
-<div class="line"><a name="l12728"></a><span class="lineno">12728</span>&#160;    m_pMetadata = VMA_NULL;</div>
-<div class="line"><a name="l12729"></a><span class="lineno">12729</span>&#160;}</div>
-<div class="line"><a name="l12730"></a><span class="lineno">12730</span>&#160; </div>
-<div class="line"><a name="l12731"></a><span class="lineno">12731</span>&#160;<span class="keywordtype">bool</span> VmaDeviceMemoryBlock::Validate()<span class="keyword"> const</span></div>
-<div class="line"><a name="l12732"></a><span class="lineno">12732</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l12733"></a><span class="lineno">12733</span>&#160;    VMA_VALIDATE((m_hMemory != VK_NULL_HANDLE) &amp;&amp;</div>
-<div class="line"><a name="l12734"></a><span class="lineno">12734</span>&#160;        (m_pMetadata-&gt;GetSize() != 0));</div>
-<div class="line"><a name="l12735"></a><span class="lineno">12735</span>&#160; </div>
-<div class="line"><a name="l12736"></a><span class="lineno">12736</span>&#160;    <span class="keywordflow">return</span> m_pMetadata-&gt;Validate();</div>
-<div class="line"><a name="l12737"></a><span class="lineno">12737</span>&#160;}</div>
-<div class="line"><a name="l12738"></a><span class="lineno">12738</span>&#160; </div>
-<div class="line"><a name="l12739"></a><span class="lineno">12739</span>&#160;VkResult VmaDeviceMemoryBlock::CheckCorruption(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator)</div>
-<div class="line"><a name="l12740"></a><span class="lineno">12740</span>&#160;{</div>
-<div class="line"><a name="l12741"></a><span class="lineno">12741</span>&#160;    <span class="keywordtype">void</span>* pData = <span class="keyword">nullptr</span>;</div>
-<div class="line"><a name="l12742"></a><span class="lineno">12742</span>&#160;    VkResult res = Map(hAllocator, 1, &amp;pData);</div>
-<div class="line"><a name="l12743"></a><span class="lineno">12743</span>&#160;    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l12744"></a><span class="lineno">12744</span>&#160;    {</div>
-<div class="line"><a name="l12745"></a><span class="lineno">12745</span>&#160;        <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l12746"></a><span class="lineno">12746</span>&#160;    }</div>
-<div class="line"><a name="l12747"></a><span class="lineno">12747</span>&#160; </div>
-<div class="line"><a name="l12748"></a><span class="lineno">12748</span>&#160;    res = m_pMetadata-&gt;CheckCorruption(pData);</div>
-<div class="line"><a name="l12749"></a><span class="lineno">12749</span>&#160; </div>
-<div class="line"><a name="l12750"></a><span class="lineno">12750</span>&#160;    Unmap(hAllocator, 1);</div>
-<div class="line"><a name="l12751"></a><span class="lineno">12751</span>&#160; </div>
-<div class="line"><a name="l12752"></a><span class="lineno">12752</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l12753"></a><span class="lineno">12753</span>&#160;}</div>
-<div class="line"><a name="l12754"></a><span class="lineno">12754</span>&#160; </div>
-<div class="line"><a name="l12755"></a><span class="lineno">12755</span>&#160;VkResult VmaDeviceMemoryBlock::Map(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator, uint32_t count, <span class="keywordtype">void</span>** ppData)</div>
-<div class="line"><a name="l12756"></a><span class="lineno">12756</span>&#160;{</div>
-<div class="line"><a name="l12757"></a><span class="lineno">12757</span>&#160;    <span class="keywordflow">if</span>(count == 0)</div>
-<div class="line"><a name="l12758"></a><span class="lineno">12758</span>&#160;    {</div>
-<div class="line"><a name="l12759"></a><span class="lineno">12759</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l12760"></a><span class="lineno">12760</span>&#160;    }</div>
-<div class="line"><a name="l12761"></a><span class="lineno">12761</span>&#160; </div>
-<div class="line"><a name="l12762"></a><span class="lineno">12762</span>&#160;    VmaMutexLock lock(m_Mutex, hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l12763"></a><span class="lineno">12763</span>&#160;    <span class="keywordflow">if</span>(m_MapCount != 0)</div>
-<div class="line"><a name="l12764"></a><span class="lineno">12764</span>&#160;    {</div>
-<div class="line"><a name="l12765"></a><span class="lineno">12765</span>&#160;        m_MapCount += count;</div>
-<div class="line"><a name="l12766"></a><span class="lineno">12766</span>&#160;        VMA_ASSERT(m_pMappedData != VMA_NULL);</div>
-<div class="line"><a name="l12767"></a><span class="lineno">12767</span>&#160;        <span class="keywordflow">if</span>(ppData != VMA_NULL)</div>
-<div class="line"><a name="l12768"></a><span class="lineno">12768</span>&#160;        {</div>
-<div class="line"><a name="l12769"></a><span class="lineno">12769</span>&#160;            *ppData = m_pMappedData;</div>
-<div class="line"><a name="l12770"></a><span class="lineno">12770</span>&#160;        }</div>
-<div class="line"><a name="l12771"></a><span class="lineno">12771</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l12772"></a><span class="lineno">12772</span>&#160;    }</div>
-<div class="line"><a name="l12773"></a><span class="lineno">12773</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l12774"></a><span class="lineno">12774</span>&#160;    {</div>
-<div class="line"><a name="l12775"></a><span class="lineno">12775</span>&#160;        VkResult result = (*hAllocator-&gt;GetVulkanFunctions().vkMapMemory)(</div>
-<div class="line"><a name="l12776"></a><span class="lineno">12776</span>&#160;            hAllocator-&gt;m_hDevice,</div>
-<div class="line"><a name="l12777"></a><span class="lineno">12777</span>&#160;            m_hMemory,</div>
-<div class="line"><a name="l12778"></a><span class="lineno">12778</span>&#160;            0, <span class="comment">// offset</span></div>
-<div class="line"><a name="l12779"></a><span class="lineno">12779</span>&#160;            VK_WHOLE_SIZE,</div>
-<div class="line"><a name="l12780"></a><span class="lineno">12780</span>&#160;            0, <span class="comment">// flags</span></div>
-<div class="line"><a name="l12781"></a><span class="lineno">12781</span>&#160;            &amp;m_pMappedData);</div>
-<div class="line"><a name="l12782"></a><span class="lineno">12782</span>&#160;        <span class="keywordflow">if</span>(result == VK_SUCCESS)</div>
-<div class="line"><a name="l12783"></a><span class="lineno">12783</span>&#160;        {</div>
-<div class="line"><a name="l12784"></a><span class="lineno">12784</span>&#160;            <span class="keywordflow">if</span>(ppData != VMA_NULL)</div>
-<div class="line"><a name="l12785"></a><span class="lineno">12785</span>&#160;            {</div>
-<div class="line"><a name="l12786"></a><span class="lineno">12786</span>&#160;                *ppData = m_pMappedData;</div>
-<div class="line"><a name="l12787"></a><span class="lineno">12787</span>&#160;            }</div>
-<div class="line"><a name="l12788"></a><span class="lineno">12788</span>&#160;            m_MapCount = count;</div>
-<div class="line"><a name="l12789"></a><span class="lineno">12789</span>&#160;        }</div>
-<div class="line"><a name="l12790"></a><span class="lineno">12790</span>&#160;        <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l12791"></a><span class="lineno">12791</span>&#160;    }</div>
-<div class="line"><a name="l12792"></a><span class="lineno">12792</span>&#160;}</div>
-<div class="line"><a name="l12793"></a><span class="lineno">12793</span>&#160; </div>
-<div class="line"><a name="l12794"></a><span class="lineno">12794</span>&#160;<span class="keywordtype">void</span> VmaDeviceMemoryBlock::Unmap(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator, uint32_t count)</div>
-<div class="line"><a name="l12795"></a><span class="lineno">12795</span>&#160;{</div>
-<div class="line"><a name="l12796"></a><span class="lineno">12796</span>&#160;    <span class="keywordflow">if</span>(count == 0)</div>
-<div class="line"><a name="l12797"></a><span class="lineno">12797</span>&#160;    {</div>
-<div class="line"><a name="l12798"></a><span class="lineno">12798</span>&#160;        <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l12799"></a><span class="lineno">12799</span>&#160;    }</div>
-<div class="line"><a name="l12800"></a><span class="lineno">12800</span>&#160; </div>
-<div class="line"><a name="l12801"></a><span class="lineno">12801</span>&#160;    VmaMutexLock lock(m_Mutex, hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l12802"></a><span class="lineno">12802</span>&#160;    <span class="keywordflow">if</span>(m_MapCount &gt;= count)</div>
-<div class="line"><a name="l12803"></a><span class="lineno">12803</span>&#160;    {</div>
-<div class="line"><a name="l12804"></a><span class="lineno">12804</span>&#160;        m_MapCount -= count;</div>
-<div class="line"><a name="l12805"></a><span class="lineno">12805</span>&#160;        <span class="keywordflow">if</span>(m_MapCount == 0)</div>
-<div class="line"><a name="l12806"></a><span class="lineno">12806</span>&#160;        {</div>
-<div class="line"><a name="l12807"></a><span class="lineno">12807</span>&#160;            m_pMappedData = VMA_NULL;</div>
-<div class="line"><a name="l12808"></a><span class="lineno">12808</span>&#160;            (*hAllocator-&gt;GetVulkanFunctions().vkUnmapMemory)(hAllocator-&gt;m_hDevice, m_hMemory);</div>
-<div class="line"><a name="l12809"></a><span class="lineno">12809</span>&#160;        }</div>
-<div class="line"><a name="l12810"></a><span class="lineno">12810</span>&#160;    }</div>
-<div class="line"><a name="l12811"></a><span class="lineno">12811</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l12812"></a><span class="lineno">12812</span>&#160;    {</div>
-<div class="line"><a name="l12813"></a><span class="lineno">12813</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VkDeviceMemory block is being unmapped while it was not previously mapped.&quot;</span>);</div>
-<div class="line"><a name="l12814"></a><span class="lineno">12814</span>&#160;    }</div>
-<div class="line"><a name="l12815"></a><span class="lineno">12815</span>&#160;}</div>
-<div class="line"><a name="l12816"></a><span class="lineno">12816</span>&#160; </div>
-<div class="line"><a name="l12817"></a><span class="lineno">12817</span>&#160;VkResult VmaDeviceMemoryBlock::WriteMagicValueAroundAllocation(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize)</div>
-<div class="line"><a name="l12818"></a><span class="lineno">12818</span>&#160;{</div>
-<div class="line"><a name="l12819"></a><span class="lineno">12819</span>&#160;    VMA_ASSERT(VMA_DEBUG_MARGIN &gt; 0 &amp;&amp; VMA_DEBUG_MARGIN % 4 == 0 &amp;&amp; VMA_DEBUG_DETECT_CORRUPTION);</div>
-<div class="line"><a name="l12820"></a><span class="lineno">12820</span>&#160;    VMA_ASSERT(allocOffset &gt;= VMA_DEBUG_MARGIN);</div>
-<div class="line"><a name="l12821"></a><span class="lineno">12821</span>&#160; </div>
-<div class="line"><a name="l12822"></a><span class="lineno">12822</span>&#160;    <span class="keywordtype">void</span>* pData;</div>
-<div class="line"><a name="l12823"></a><span class="lineno">12823</span>&#160;    VkResult res = Map(hAllocator, 1, &amp;pData);</div>
-<div class="line"><a name="l12824"></a><span class="lineno">12824</span>&#160;    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l12825"></a><span class="lineno">12825</span>&#160;    {</div>
-<div class="line"><a name="l12826"></a><span class="lineno">12826</span>&#160;        <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l12827"></a><span class="lineno">12827</span>&#160;    }</div>
-<div class="line"><a name="l12828"></a><span class="lineno">12828</span>&#160; </div>
-<div class="line"><a name="l12829"></a><span class="lineno">12829</span>&#160;    VmaWriteMagicValue(pData, allocOffset - VMA_DEBUG_MARGIN);</div>
-<div class="line"><a name="l12830"></a><span class="lineno">12830</span>&#160;    VmaWriteMagicValue(pData, allocOffset + allocSize);</div>
-<div class="line"><a name="l12831"></a><span class="lineno">12831</span>&#160; </div>
-<div class="line"><a name="l12832"></a><span class="lineno">12832</span>&#160;    Unmap(hAllocator, 1);</div>
-<div class="line"><a name="l12833"></a><span class="lineno">12833</span>&#160; </div>
-<div class="line"><a name="l12834"></a><span class="lineno">12834</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l12835"></a><span class="lineno">12835</span>&#160;}</div>
-<div class="line"><a name="l12836"></a><span class="lineno">12836</span>&#160; </div>
-<div class="line"><a name="l12837"></a><span class="lineno">12837</span>&#160;VkResult VmaDeviceMemoryBlock::ValidateMagicValueAroundAllocation(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize)</div>
-<div class="line"><a name="l12838"></a><span class="lineno">12838</span>&#160;{</div>
-<div class="line"><a name="l12839"></a><span class="lineno">12839</span>&#160;    VMA_ASSERT(VMA_DEBUG_MARGIN &gt; 0 &amp;&amp; VMA_DEBUG_MARGIN % 4 == 0 &amp;&amp; VMA_DEBUG_DETECT_CORRUPTION);</div>
-<div class="line"><a name="l12840"></a><span class="lineno">12840</span>&#160;    VMA_ASSERT(allocOffset &gt;= VMA_DEBUG_MARGIN);</div>
-<div class="line"><a name="l12841"></a><span class="lineno">12841</span>&#160; </div>
-<div class="line"><a name="l12842"></a><span class="lineno">12842</span>&#160;    <span class="keywordtype">void</span>* pData;</div>
-<div class="line"><a name="l12843"></a><span class="lineno">12843</span>&#160;    VkResult res = Map(hAllocator, 1, &amp;pData);</div>
-<div class="line"><a name="l12844"></a><span class="lineno">12844</span>&#160;    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l12845"></a><span class="lineno">12845</span>&#160;    {</div>
-<div class="line"><a name="l12846"></a><span class="lineno">12846</span>&#160;        <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l12847"></a><span class="lineno">12847</span>&#160;    }</div>
-<div class="line"><a name="l12848"></a><span class="lineno">12848</span>&#160; </div>
-<div class="line"><a name="l12849"></a><span class="lineno">12849</span>&#160;    <span class="keywordflow">if</span>(!VmaValidateMagicValue(pData, allocOffset - VMA_DEBUG_MARGIN))</div>
-<div class="line"><a name="l12850"></a><span class="lineno">12850</span>&#160;    {</div>
-<div class="line"><a name="l12851"></a><span class="lineno">12851</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED BEFORE FREED ALLOCATION!&quot;</span>);</div>
-<div class="line"><a name="l12852"></a><span class="lineno">12852</span>&#160;    }</div>
-<div class="line"><a name="l12853"></a><span class="lineno">12853</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!VmaValidateMagicValue(pData, allocOffset + allocSize))</div>
-<div class="line"><a name="l12854"></a><span class="lineno">12854</span>&#160;    {</div>
-<div class="line"><a name="l12855"></a><span class="lineno">12855</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED AFTER FREED ALLOCATION!&quot;</span>);</div>
-<div class="line"><a name="l12856"></a><span class="lineno">12856</span>&#160;    }</div>
-<div class="line"><a name="l12857"></a><span class="lineno">12857</span>&#160; </div>
-<div class="line"><a name="l12858"></a><span class="lineno">12858</span>&#160;    Unmap(hAllocator, 1);</div>
-<div class="line"><a name="l12859"></a><span class="lineno">12859</span>&#160; </div>
-<div class="line"><a name="l12860"></a><span class="lineno">12860</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l12861"></a><span class="lineno">12861</span>&#160;}</div>
-<div class="line"><a name="l12862"></a><span class="lineno">12862</span>&#160; </div>
-<div class="line"><a name="l12863"></a><span class="lineno">12863</span>&#160;VkResult VmaDeviceMemoryBlock::BindBufferMemory(</div>
-<div class="line"><a name="l12864"></a><span class="lineno">12864</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
-<div class="line"><a name="l12865"></a><span class="lineno">12865</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
-<div class="line"><a name="l12866"></a><span class="lineno">12866</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
-<div class="line"><a name="l12867"></a><span class="lineno">12867</span>&#160;    VkBuffer hBuffer,</div>
-<div class="line"><a name="l12868"></a><span class="lineno">12868</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
-<div class="line"><a name="l12869"></a><span class="lineno">12869</span>&#160;{</div>
-<div class="line"><a name="l12870"></a><span class="lineno">12870</span>&#160;    VMA_ASSERT(hAllocation-&gt;GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK &amp;&amp;</div>
-<div class="line"><a name="l12871"></a><span class="lineno">12871</span>&#160;        hAllocation-&gt;GetBlock() == <span class="keyword">this</span>);</div>
-<div class="line"><a name="l12872"></a><span class="lineno">12872</span>&#160;    VMA_ASSERT(allocationLocalOffset &lt; hAllocation-&gt;GetSize() &amp;&amp;</div>
-<div class="line"><a name="l12873"></a><span class="lineno">12873</span>&#160;        <span class="stringliteral">&quot;Invalid allocationLocalOffset. Did you forget that this offset is relative to the beginning of the allocation, not the whole memory block?&quot;</span>);</div>
-<div class="line"><a name="l12874"></a><span class="lineno">12874</span>&#160;    <span class="keyword">const</span> VkDeviceSize memoryOffset = hAllocation-&gt;GetOffset() + allocationLocalOffset;</div>
-<div class="line"><a name="l12875"></a><span class="lineno">12875</span>&#160;    <span class="comment">// This lock is important so that we don&#39;t call vkBind... and/or vkMap... simultaneously on the same VkDeviceMemory from multiple threads.</span></div>
-<div class="line"><a name="l12876"></a><span class="lineno">12876</span>&#160;    VmaMutexLock lock(m_Mutex, hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l12877"></a><span class="lineno">12877</span>&#160;    <span class="keywordflow">return</span> hAllocator-&gt;BindVulkanBuffer(m_hMemory, memoryOffset, hBuffer, pNext);</div>
-<div class="line"><a name="l12878"></a><span class="lineno">12878</span>&#160;}</div>
-<div class="line"><a name="l12879"></a><span class="lineno">12879</span>&#160; </div>
-<div class="line"><a name="l12880"></a><span class="lineno">12880</span>&#160;VkResult VmaDeviceMemoryBlock::BindImageMemory(</div>
-<div class="line"><a name="l12881"></a><span class="lineno">12881</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
-<div class="line"><a name="l12882"></a><span class="lineno">12882</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
-<div class="line"><a name="l12883"></a><span class="lineno">12883</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
-<div class="line"><a name="l12884"></a><span class="lineno">12884</span>&#160;    VkImage hImage,</div>
-<div class="line"><a name="l12885"></a><span class="lineno">12885</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
-<div class="line"><a name="l12886"></a><span class="lineno">12886</span>&#160;{</div>
-<div class="line"><a name="l12887"></a><span class="lineno">12887</span>&#160;    VMA_ASSERT(hAllocation-&gt;GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK &amp;&amp;</div>
-<div class="line"><a name="l12888"></a><span class="lineno">12888</span>&#160;        hAllocation-&gt;GetBlock() == <span class="keyword">this</span>);</div>
-<div class="line"><a name="l12889"></a><span class="lineno">12889</span>&#160;    VMA_ASSERT(allocationLocalOffset &lt; hAllocation-&gt;GetSize() &amp;&amp;</div>
-<div class="line"><a name="l12890"></a><span class="lineno">12890</span>&#160;        <span class="stringliteral">&quot;Invalid allocationLocalOffset. Did you forget that this offset is relative to the beginning of the allocation, not the whole memory block?&quot;</span>);</div>
-<div class="line"><a name="l12891"></a><span class="lineno">12891</span>&#160;    <span class="keyword">const</span> VkDeviceSize memoryOffset = hAllocation-&gt;GetOffset() + allocationLocalOffset;</div>
-<div class="line"><a name="l12892"></a><span class="lineno">12892</span>&#160;    <span class="comment">// This lock is important so that we don&#39;t call vkBind... and/or vkMap... simultaneously on the same VkDeviceMemory from multiple threads.</span></div>
-<div class="line"><a name="l12893"></a><span class="lineno">12893</span>&#160;    VmaMutexLock lock(m_Mutex, hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l12894"></a><span class="lineno">12894</span>&#160;    <span class="keywordflow">return</span> hAllocator-&gt;BindVulkanImage(m_hMemory, memoryOffset, hImage, pNext);</div>
-<div class="line"><a name="l12895"></a><span class="lineno">12895</span>&#160;}</div>
-<div class="line"><a name="l12896"></a><span class="lineno">12896</span>&#160; </div>
-<div class="line"><a name="l12897"></a><span class="lineno">12897</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> InitStatInfo(<a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a>&amp; outInfo)</div>
-<div class="line"><a name="l12898"></a><span class="lineno">12898</span>&#160;{</div>
-<div class="line"><a name="l12899"></a><span class="lineno">12899</span>&#160;    memset(&amp;outInfo, 0, <span class="keyword">sizeof</span>(outInfo));</div>
-<div class="line"><a name="l12900"></a><span class="lineno">12900</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = UINT64_MAX;</div>
-<div class="line"><a name="l12901"></a><span class="lineno">12901</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = UINT64_MAX;</div>
-<div class="line"><a name="l12902"></a><span class="lineno">12902</span>&#160;}</div>
-<div class="line"><a name="l12903"></a><span class="lineno">12903</span>&#160; </div>
-<div class="line"><a name="l12904"></a><span class="lineno">12904</span>&#160;<span class="comment">// Adds statistics srcInfo into inoutInfo, like: inoutInfo += srcInfo.</span></div>
-<div class="line"><a name="l12905"></a><span class="lineno">12905</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> VmaAddStatInfo(<a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a>&amp; inoutInfo, <span class="keyword">const</span> <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a>&amp; srcInfo)</div>
-<div class="line"><a name="l12906"></a><span class="lineno">12906</span>&#160;{</div>
-<div class="line"><a name="l12907"></a><span class="lineno">12907</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a> += srcInfo.<a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a>;</div>
-<div class="line"><a name="l12908"></a><span class="lineno">12908</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a> += srcInfo.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a>;</div>
-<div class="line"><a name="l12909"></a><span class="lineno">12909</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a> += srcInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
-<div class="line"><a name="l12910"></a><span class="lineno">12910</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a> += srcInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a>;</div>
-<div class="line"><a name="l12911"></a><span class="lineno">12911</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += srcInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a>;</div>
-<div class="line"><a name="l12912"></a><span class="lineno">12912</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = VMA_MIN(inoutInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>, srcInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>);</div>
-<div class="line"><a name="l12913"></a><span class="lineno">12913</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a> = VMA_MAX(inoutInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a>, srcInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a>);</div>
-<div class="line"><a name="l12914"></a><span class="lineno">12914</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(inoutInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, srcInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>);</div>
-<div class="line"><a name="l12915"></a><span class="lineno">12915</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MAX(inoutInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, srcInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>);</div>
-<div class="line"><a name="l12916"></a><span class="lineno">12916</span>&#160;}</div>
-<div class="line"><a name="l12917"></a><span class="lineno">12917</span>&#160; </div>
-<div class="line"><a name="l12918"></a><span class="lineno">12918</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> VmaPostprocessCalcStatInfo(<a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a>&amp; inoutInfo)</div>
-<div class="line"><a name="l12919"></a><span class="lineno">12919</span>&#160;{</div>
-<div class="line"><a name="l12920"></a><span class="lineno">12920</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#a1081a039964e566c672e7a2347f9e599">allocationSizeAvg</a> = (inoutInfo.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a> &gt; 0) ?</div>
-<div class="line"><a name="l12921"></a><span class="lineno">12921</span>&#160;        VmaRoundDiv&lt;VkDeviceSize&gt;(inoutInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a>, inoutInfo.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a>) : 0;</div>
-<div class="line"><a name="l12922"></a><span class="lineno">12922</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#a2f9b3452af90c9768a30b7fb6ae194fc">unusedRangeSizeAvg</a> = (inoutInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a> &gt; 0) ?</div>
-<div class="line"><a name="l12923"></a><span class="lineno">12923</span>&#160;        VmaRoundDiv&lt;VkDeviceSize&gt;(inoutInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a>, inoutInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>) : 0;</div>
-<div class="line"><a name="l12924"></a><span class="lineno">12924</span>&#160;}</div>
-<div class="line"><a name="l12925"></a><span class="lineno">12925</span>&#160; </div>
-<div class="line"><a name="l12926"></a><span class="lineno">12926</span>&#160;VmaPool_T::VmaPool_T(</div>
-<div class="line"><a name="l12927"></a><span class="lineno">12927</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
-<div class="line"><a name="l12928"></a><span class="lineno">12928</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a>&amp; createInfo,</div>
-<div class="line"><a name="l12929"></a><span class="lineno">12929</span>&#160;    VkDeviceSize preferredBlockSize) :</div>
-<div class="line"><a name="l12930"></a><span class="lineno">12930</span>&#160;    m_BlockVector(</div>
-<div class="line"><a name="l12931"></a><span class="lineno">12931</span>&#160;        hAllocator,</div>
-<div class="line"><a name="l12932"></a><span class="lineno">12932</span>&#160;        this, <span class="comment">// hParentPool</span></div>
-<div class="line"><a name="l12933"></a><span class="lineno">12933</span>&#160;        createInfo.memoryTypeIndex,</div>
-<div class="line"><a name="l12934"></a><span class="lineno">12934</span>&#160;        createInfo.blockSize != 0 ? createInfo.blockSize : preferredBlockSize,</div>
-<div class="line"><a name="l12935"></a><span class="lineno">12935</span>&#160;        createInfo.minBlockCount,</div>
-<div class="line"><a name="l12936"></a><span class="lineno">12936</span>&#160;        createInfo.maxBlockCount,</div>
-<div class="line"><a name="l12937"></a><span class="lineno">12937</span>&#160;        (createInfo.flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT</a>) != 0 ? 1 : hAllocator-&gt;GetBufferImageGranularity(),</div>
-<div class="line"><a name="l12938"></a><span class="lineno">12938</span>&#160;        createInfo.frameInUseCount,</div>
-<div class="line"><a name="l12939"></a><span class="lineno">12939</span>&#160;        createInfo.blockSize != 0, <span class="comment">// explicitBlockSize</span></div>
-<div class="line"><a name="l12940"></a><span class="lineno">12940</span>&#160;        createInfo.flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c">VMA_POOL_CREATE_ALGORITHM_MASK</a>, <span class="comment">// algorithm</span></div>
-<div class="line"><a name="l12941"></a><span class="lineno">12941</span>&#160;        createInfo.priority,</div>
-<div class="line"><a name="l12942"></a><span class="lineno">12942</span>&#160;        VMA_MAX(hAllocator-&gt;GetMemoryTypeMinAlignment(createInfo.memoryTypeIndex), createInfo.minAllocationAlignment),</div>
-<div class="line"><a name="l12943"></a><span class="lineno">12943</span>&#160;        createInfo.pMemoryAllocateNext),</div>
-<div class="line"><a name="l12944"></a><span class="lineno">12944</span>&#160;    m_Id(0),</div>
-<div class="line"><a name="l12945"></a><span class="lineno">12945</span>&#160;    m_Name(VMA_NULL)</div>
-<div class="line"><a name="l12946"></a><span class="lineno">12946</span>&#160;{</div>
-<div class="line"><a name="l12947"></a><span class="lineno">12947</span>&#160;}</div>
-<div class="line"><a name="l12948"></a><span class="lineno">12948</span>&#160; </div>
-<div class="line"><a name="l12949"></a><span class="lineno">12949</span>&#160;VmaPool_T::~VmaPool_T()</div>
-<div class="line"><a name="l12950"></a><span class="lineno">12950</span>&#160;{</div>
-<div class="line"><a name="l12951"></a><span class="lineno">12951</span>&#160;    VMA_ASSERT(m_PrevPool == VMA_NULL &amp;&amp; m_NextPool == VMA_NULL);</div>
-<div class="line"><a name="l12952"></a><span class="lineno">12952</span>&#160;}</div>
-<div class="line"><a name="l12953"></a><span class="lineno">12953</span>&#160; </div>
-<div class="line"><a name="l12954"></a><span class="lineno">12954</span>&#160;<span class="keywordtype">void</span> VmaPool_T::SetName(<span class="keyword">const</span> <span class="keywordtype">char</span>* pName)</div>
-<div class="line"><a name="l12955"></a><span class="lineno">12955</span>&#160;{</div>
-<div class="line"><a name="l12956"></a><span class="lineno">12956</span>&#160;    <span class="keyword">const</span> VkAllocationCallbacks* allocs = m_BlockVector.GetAllocator()-&gt;GetAllocationCallbacks();</div>
-<div class="line"><a name="l12957"></a><span class="lineno">12957</span>&#160;    VmaFreeString(allocs, m_Name);</div>
-<div class="line"><a name="l12958"></a><span class="lineno">12958</span>&#160; </div>
-<div class="line"><a name="l12959"></a><span class="lineno">12959</span>&#160;    <span class="keywordflow">if</span>(pName != VMA_NULL)</div>
-<div class="line"><a name="l12960"></a><span class="lineno">12960</span>&#160;    {</div>
-<div class="line"><a name="l12961"></a><span class="lineno">12961</span>&#160;        m_Name = VmaCreateStringCopy(allocs, pName);</div>
-<div class="line"><a name="l12962"></a><span class="lineno">12962</span>&#160;    }</div>
-<div class="line"><a name="l12963"></a><span class="lineno">12963</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l12964"></a><span class="lineno">12964</span>&#160;    {</div>
-<div class="line"><a name="l12965"></a><span class="lineno">12965</span>&#160;        m_Name = VMA_NULL;</div>
-<div class="line"><a name="l12966"></a><span class="lineno">12966</span>&#160;    }</div>
-<div class="line"><a name="l12967"></a><span class="lineno">12967</span>&#160;}</div>
-<div class="line"><a name="l12968"></a><span class="lineno">12968</span>&#160; </div>
-<div class="line"><a name="l12969"></a><span class="lineno">12969</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l12970"></a><span class="lineno">12970</span>&#160; </div>
-<div class="line"><a name="l12971"></a><span class="lineno">12971</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l12972"></a><span class="lineno">12972</span>&#160; </div>
-<div class="line"><a name="l12973"></a><span class="lineno">12973</span>&#160;VmaBlockVector::VmaBlockVector(</div>
-<div class="line"><a name="l12974"></a><span class="lineno">12974</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
-<div class="line"><a name="l12975"></a><span class="lineno">12975</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> hParentPool,</div>
-<div class="line"><a name="l12976"></a><span class="lineno">12976</span>&#160;    uint32_t memoryTypeIndex,</div>
-<div class="line"><a name="l12977"></a><span class="lineno">12977</span>&#160;    VkDeviceSize preferredBlockSize,</div>
-<div class="line"><a name="l12978"></a><span class="lineno">12978</span>&#160;    <span class="keywordtype">size_t</span> minBlockCount,</div>
-<div class="line"><a name="l12979"></a><span class="lineno">12979</span>&#160;    <span class="keywordtype">size_t</span> maxBlockCount,</div>
-<div class="line"><a name="l12980"></a><span class="lineno">12980</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
-<div class="line"><a name="l12981"></a><span class="lineno">12981</span>&#160;    uint32_t frameInUseCount,</div>
-<div class="line"><a name="l12982"></a><span class="lineno">12982</span>&#160;    <span class="keywordtype">bool</span> explicitBlockSize,</div>
-<div class="line"><a name="l12983"></a><span class="lineno">12983</span>&#160;    uint32_t algorithm,</div>
-<div class="line"><a name="l12984"></a><span class="lineno">12984</span>&#160;    <span class="keywordtype">float</span> priority,</div>
-<div class="line"><a name="l12985"></a><span class="lineno">12985</span>&#160;    VkDeviceSize minAllocationAlignment,</div>
-<div class="line"><a name="l12986"></a><span class="lineno">12986</span>&#160;    <span class="keywordtype">void</span>* pMemoryAllocateNext) :</div>
-<div class="line"><a name="l12987"></a><span class="lineno">12987</span>&#160;    m_hAllocator(hAllocator),</div>
-<div class="line"><a name="l12988"></a><span class="lineno">12988</span>&#160;    m_hParentPool(hParentPool),</div>
-<div class="line"><a name="l12989"></a><span class="lineno">12989</span>&#160;    m_MemoryTypeIndex(memoryTypeIndex),</div>
-<div class="line"><a name="l12990"></a><span class="lineno">12990</span>&#160;    m_PreferredBlockSize(preferredBlockSize),</div>
-<div class="line"><a name="l12991"></a><span class="lineno">12991</span>&#160;    m_MinBlockCount(minBlockCount),</div>
-<div class="line"><a name="l12992"></a><span class="lineno">12992</span>&#160;    m_MaxBlockCount(maxBlockCount),</div>
-<div class="line"><a name="l12993"></a><span class="lineno">12993</span>&#160;    m_BufferImageGranularity(bufferImageGranularity),</div>
-<div class="line"><a name="l12994"></a><span class="lineno">12994</span>&#160;    m_FrameInUseCount(frameInUseCount),</div>
-<div class="line"><a name="l12995"></a><span class="lineno">12995</span>&#160;    m_ExplicitBlockSize(explicitBlockSize),</div>
-<div class="line"><a name="l12996"></a><span class="lineno">12996</span>&#160;    m_Algorithm(algorithm),</div>
-<div class="line"><a name="l12997"></a><span class="lineno">12997</span>&#160;    m_Priority(priority),</div>
-<div class="line"><a name="l12998"></a><span class="lineno">12998</span>&#160;    m_MinAllocationAlignment(minAllocationAlignment),</div>
-<div class="line"><a name="l12999"></a><span class="lineno">12999</span>&#160;    m_pMemoryAllocateNext(pMemoryAllocateNext),</div>
-<div class="line"><a name="l13000"></a><span class="lineno">13000</span>&#160;    m_HasEmptyBlock(false),</div>
-<div class="line"><a name="l13001"></a><span class="lineno">13001</span>&#160;    m_Blocks(VmaStlAllocator&lt;VmaDeviceMemoryBlock*&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
-<div class="line"><a name="l13002"></a><span class="lineno">13002</span>&#160;    m_NextBlockId(0)</div>
-<div class="line"><a name="l13003"></a><span class="lineno">13003</span>&#160;{</div>
-<div class="line"><a name="l13004"></a><span class="lineno">13004</span>&#160;}</div>
-<div class="line"><a name="l13005"></a><span class="lineno">13005</span>&#160; </div>
-<div class="line"><a name="l13006"></a><span class="lineno">13006</span>&#160;VmaBlockVector::~VmaBlockVector()</div>
-<div class="line"><a name="l13007"></a><span class="lineno">13007</span>&#160;{</div>
-<div class="line"><a name="l13008"></a><span class="lineno">13008</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_Blocks.size(); i--; )</div>
-<div class="line"><a name="l13009"></a><span class="lineno">13009</span>&#160;    {</div>
-<div class="line"><a name="l13010"></a><span class="lineno">13010</span>&#160;        m_Blocks[i]-&gt;Destroy(m_hAllocator);</div>
-<div class="line"><a name="l13011"></a><span class="lineno">13011</span>&#160;        vma_delete(m_hAllocator, m_Blocks[i]);</div>
-<div class="line"><a name="l13012"></a><span class="lineno">13012</span>&#160;    }</div>
-<div class="line"><a name="l13013"></a><span class="lineno">13013</span>&#160;}</div>
-<div class="line"><a name="l13014"></a><span class="lineno">13014</span>&#160; </div>
-<div class="line"><a name="l13015"></a><span class="lineno">13015</span>&#160;VkResult VmaBlockVector::CreateMinBlocks()</div>
-<div class="line"><a name="l13016"></a><span class="lineno">13016</span>&#160;{</div>
-<div class="line"><a name="l13017"></a><span class="lineno">13017</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; m_MinBlockCount; ++i)</div>
-<div class="line"><a name="l13018"></a><span class="lineno">13018</span>&#160;    {</div>
-<div class="line"><a name="l13019"></a><span class="lineno">13019</span>&#160;        VkResult res = CreateBlock(m_PreferredBlockSize, VMA_NULL);</div>
-<div class="line"><a name="l13020"></a><span class="lineno">13020</span>&#160;        <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l13021"></a><span class="lineno">13021</span>&#160;        {</div>
-<div class="line"><a name="l13022"></a><span class="lineno">13022</span>&#160;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l13023"></a><span class="lineno">13023</span>&#160;        }</div>
-<div class="line"><a name="l13024"></a><span class="lineno">13024</span>&#160;    }</div>
-<div class="line"><a name="l13025"></a><span class="lineno">13025</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l13026"></a><span class="lineno">13026</span>&#160;}</div>
-<div class="line"><a name="l13027"></a><span class="lineno">13027</span>&#160; </div>
-<div class="line"><a name="l13028"></a><span class="lineno">13028</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::GetPoolStats(<a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>* pStats)</div>
-<div class="line"><a name="l13029"></a><span class="lineno">13029</span>&#160;{</div>
-<div class="line"><a name="l13030"></a><span class="lineno">13030</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l13031"></a><span class="lineno">13031</span>&#160; </div>
-<div class="line"><a name="l13032"></a><span class="lineno">13032</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_Blocks.size();</div>
-<div class="line"><a name="l13033"></a><span class="lineno">13033</span>&#160; </div>
-<div class="line"><a name="l13034"></a><span class="lineno">13034</span>&#160;    pStats-&gt;<a class="code" href="struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c">size</a> = 0;</div>
-<div class="line"><a name="l13035"></a><span class="lineno">13035</span>&#160;    pStats-&gt;<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> = 0;</div>
-<div class="line"><a name="l13036"></a><span class="lineno">13036</span>&#160;    pStats-&gt;<a class="code" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">allocationCount</a> = 0;</div>
-<div class="line"><a name="l13037"></a><span class="lineno">13037</span>&#160;    pStats-&gt;<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a> = 0;</div>
-<div class="line"><a name="l13038"></a><span class="lineno">13038</span>&#160;    pStats-&gt;<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = 0;</div>
-<div class="line"><a name="l13039"></a><span class="lineno">13039</span>&#160;    pStats-&gt;<a class="code" href="struct_vma_pool_stats.html#aa0b5cb45cef6f18571cefb03b9a230e7">blockCount</a> = blockCount;</div>
-<div class="line"><a name="l13040"></a><span class="lineno">13040</span>&#160; </div>
-<div class="line"><a name="l13041"></a><span class="lineno">13041</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; blockCount; ++blockIndex)</div>
-<div class="line"><a name="l13042"></a><span class="lineno">13042</span>&#160;    {</div>
-<div class="line"><a name="l13043"></a><span class="lineno">13043</span>&#160;        <span class="keyword">const</span> VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l13044"></a><span class="lineno">13044</span>&#160;        VMA_ASSERT(pBlock);</div>
-<div class="line"><a name="l13045"></a><span class="lineno">13045</span>&#160;        VMA_HEAVY_ASSERT(pBlock-&gt;Validate());</div>
-<div class="line"><a name="l13046"></a><span class="lineno">13046</span>&#160;        pBlock-&gt;m_pMetadata-&gt;AddPoolStats(*pStats);</div>
-<div class="line"><a name="l13047"></a><span class="lineno">13047</span>&#160;    }</div>
-<div class="line"><a name="l13048"></a><span class="lineno">13048</span>&#160;}</div>
-<div class="line"><a name="l13049"></a><span class="lineno">13049</span>&#160; </div>
-<div class="line"><a name="l13050"></a><span class="lineno">13050</span>&#160;<span class="keywordtype">bool</span> VmaBlockVector::IsEmpty()</div>
-<div class="line"><a name="l13051"></a><span class="lineno">13051</span>&#160;{</div>
-<div class="line"><a name="l13052"></a><span class="lineno">13052</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l13053"></a><span class="lineno">13053</span>&#160;    <span class="keywordflow">return</span> m_Blocks.empty();</div>
-<div class="line"><a name="l13054"></a><span class="lineno">13054</span>&#160;}</div>
-<div class="line"><a name="l13055"></a><span class="lineno">13055</span>&#160; </div>
-<div class="line"><a name="l13056"></a><span class="lineno">13056</span>&#160;<span class="keywordtype">bool</span> VmaBlockVector::IsCorruptionDetectionEnabled()<span class="keyword"> const</span></div>
-<div class="line"><a name="l13057"></a><span class="lineno">13057</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l13058"></a><span class="lineno">13058</span>&#160;    <span class="keyword">const</span> uint32_t requiredMemFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;</div>
-<div class="line"><a name="l13059"></a><span class="lineno">13059</span>&#160;    <span class="keywordflow">return</span> (VMA_DEBUG_DETECT_CORRUPTION != 0) &amp;&amp;</div>
-<div class="line"><a name="l13060"></a><span class="lineno">13060</span>&#160;        (VMA_DEBUG_MARGIN &gt; 0) &amp;&amp;</div>
-<div class="line"><a name="l13061"></a><span class="lineno">13061</span>&#160;        (m_Algorithm == 0 || m_Algorithm == <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a>) &amp;&amp;</div>
-<div class="line"><a name="l13062"></a><span class="lineno">13062</span>&#160;        (m_hAllocator-&gt;m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags &amp; requiredMemFlags) == requiredMemFlags;</div>
-<div class="line"><a name="l13063"></a><span class="lineno">13063</span>&#160;}</div>
-<div class="line"><a name="l13064"></a><span class="lineno">13064</span>&#160; </div>
-<div class="line"><a name="l13065"></a><span class="lineno">13065</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> uint32_t VMA_ALLOCATION_TRY_COUNT = 32;</div>
-<div class="line"><a name="l13066"></a><span class="lineno">13066</span>&#160; </div>
-<div class="line"><a name="l13067"></a><span class="lineno">13067</span>&#160;VkResult VmaBlockVector::Allocate(</div>
-<div class="line"><a name="l13068"></a><span class="lineno">13068</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l13069"></a><span class="lineno">13069</span>&#160;    VkDeviceSize size,</div>
-<div class="line"><a name="l13070"></a><span class="lineno">13070</span>&#160;    VkDeviceSize alignment,</div>
-<div class="line"><a name="l13071"></a><span class="lineno">13071</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
-<div class="line"><a name="l13072"></a><span class="lineno">13072</span>&#160;    VmaSuballocationType suballocType,</div>
-<div class="line"><a name="l13073"></a><span class="lineno">13073</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l13074"></a><span class="lineno">13074</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
-<div class="line"><a name="l13075"></a><span class="lineno">13075</span>&#160;{</div>
-<div class="line"><a name="l13076"></a><span class="lineno">13076</span>&#160;    <span class="keywordtype">size_t</span> allocIndex;</div>
-<div class="line"><a name="l13077"></a><span class="lineno">13077</span>&#160;    VkResult res = VK_SUCCESS;</div>
-<div class="line"><a name="l13078"></a><span class="lineno">13078</span>&#160; </div>
-<div class="line"><a name="l13079"></a><span class="lineno">13079</span>&#160;    alignment = VMA_MAX(alignment, m_MinAllocationAlignment);</div>
-<div class="line"><a name="l13080"></a><span class="lineno">13080</span>&#160; </div>
-<div class="line"><a name="l13081"></a><span class="lineno">13081</span>&#160;    <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</div>
-<div class="line"><a name="l13082"></a><span class="lineno">13082</span>&#160;    {</div>
-<div class="line"><a name="l13083"></a><span class="lineno">13083</span>&#160;        size = VmaAlignUp&lt;VkDeviceSize&gt;(size, <span class="keyword">sizeof</span>(VMA_CORRUPTION_DETECTION_MAGIC_VALUE));</div>
-<div class="line"><a name="l13084"></a><span class="lineno">13084</span>&#160;        alignment = VmaAlignUp&lt;VkDeviceSize&gt;(alignment, <span class="keyword">sizeof</span>(VMA_CORRUPTION_DETECTION_MAGIC_VALUE));</div>
-<div class="line"><a name="l13085"></a><span class="lineno">13085</span>&#160;    }</div>
-<div class="line"><a name="l13086"></a><span class="lineno">13086</span>&#160; </div>
-<div class="line"><a name="l13087"></a><span class="lineno">13087</span>&#160;    {</div>
-<div class="line"><a name="l13088"></a><span class="lineno">13088</span>&#160;        VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l13089"></a><span class="lineno">13089</span>&#160;        <span class="keywordflow">for</span>(allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</div>
-<div class="line"><a name="l13090"></a><span class="lineno">13090</span>&#160;        {</div>
-<div class="line"><a name="l13091"></a><span class="lineno">13091</span>&#160;            res = AllocatePage(</div>
-<div class="line"><a name="l13092"></a><span class="lineno">13092</span>&#160;                currentFrameIndex,</div>
-<div class="line"><a name="l13093"></a><span class="lineno">13093</span>&#160;                size,</div>
-<div class="line"><a name="l13094"></a><span class="lineno">13094</span>&#160;                alignment,</div>
-<div class="line"><a name="l13095"></a><span class="lineno">13095</span>&#160;                createInfo,</div>
-<div class="line"><a name="l13096"></a><span class="lineno">13096</span>&#160;                suballocType,</div>
-<div class="line"><a name="l13097"></a><span class="lineno">13097</span>&#160;                pAllocations + allocIndex);</div>
-<div class="line"><a name="l13098"></a><span class="lineno">13098</span>&#160;            <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l13099"></a><span class="lineno">13099</span>&#160;            {</div>
-<div class="line"><a name="l13100"></a><span class="lineno">13100</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l13101"></a><span class="lineno">13101</span>&#160;            }</div>
-<div class="line"><a name="l13102"></a><span class="lineno">13102</span>&#160;        }</div>
-<div class="line"><a name="l13103"></a><span class="lineno">13103</span>&#160;    }</div>
-<div class="line"><a name="l13104"></a><span class="lineno">13104</span>&#160; </div>
-<div class="line"><a name="l13105"></a><span class="lineno">13105</span>&#160;    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l13106"></a><span class="lineno">13106</span>&#160;    {</div>
-<div class="line"><a name="l13107"></a><span class="lineno">13107</span>&#160;        <span class="comment">// Free all already created allocations.</span></div>
-<div class="line"><a name="l13108"></a><span class="lineno">13108</span>&#160;        <span class="keyword">const</span> uint32_t heapIndex = m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);</div>
-<div class="line"><a name="l13109"></a><span class="lineno">13109</span>&#160;        <span class="keywordflow">while</span>(allocIndex--)</div>
-<div class="line"><a name="l13110"></a><span class="lineno">13110</span>&#160;        {</div>
-<div class="line"><a name="l13111"></a><span class="lineno">13111</span>&#160;            VmaAllocation_T* <span class="keyword">const</span> alloc = pAllocations[allocIndex];</div>
-<div class="line"><a name="l13112"></a><span class="lineno">13112</span>&#160;            <span class="keyword">const</span> VkDeviceSize allocSize = alloc-&gt;GetSize();</div>
-<div class="line"><a name="l13113"></a><span class="lineno">13113</span>&#160;            Free(alloc);</div>
-<div class="line"><a name="l13114"></a><span class="lineno">13114</span>&#160;            m_hAllocator-&gt;m_Budget.RemoveAllocation(heapIndex, allocSize);</div>
-<div class="line"><a name="l13115"></a><span class="lineno">13115</span>&#160;        }</div>
-<div class="line"><a name="l13116"></a><span class="lineno">13116</span>&#160;        memset(pAllocations, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a>) * allocationCount);</div>
-<div class="line"><a name="l13117"></a><span class="lineno">13117</span>&#160;    }</div>
-<div class="line"><a name="l13118"></a><span class="lineno">13118</span>&#160; </div>
-<div class="line"><a name="l13119"></a><span class="lineno">13119</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l13120"></a><span class="lineno">13120</span>&#160;}</div>
-<div class="line"><a name="l13121"></a><span class="lineno">13121</span>&#160; </div>
-<div class="line"><a name="l13122"></a><span class="lineno">13122</span>&#160;VkResult VmaBlockVector::AllocatePage(</div>
-<div class="line"><a name="l13123"></a><span class="lineno">13123</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l13124"></a><span class="lineno">13124</span>&#160;    VkDeviceSize size,</div>
-<div class="line"><a name="l13125"></a><span class="lineno">13125</span>&#160;    VkDeviceSize alignment,</div>
-<div class="line"><a name="l13126"></a><span class="lineno">13126</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
-<div class="line"><a name="l13127"></a><span class="lineno">13127</span>&#160;    VmaSuballocationType suballocType,</div>
-<div class="line"><a name="l13128"></a><span class="lineno">13128</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
-<div class="line"><a name="l13129"></a><span class="lineno">13129</span>&#160;{</div>
-<div class="line"><a name="l13130"></a><span class="lineno">13130</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> isUpperAddress = (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a>) != 0;</div>
-<div class="line"><a name="l13131"></a><span class="lineno">13131</span>&#160;    <span class="keywordtype">bool</span> canMakeOtherLost = (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a>) != 0;</div>
-<div class="line"><a name="l13132"></a><span class="lineno">13132</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> mapped = (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0;</div>
-<div class="line"><a name="l13133"></a><span class="lineno">13133</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> isUserDataString = (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a>) != 0;</div>
-<div class="line"><a name="l13134"></a><span class="lineno">13134</span>&#160; </div>
-<div class="line"><a name="l13135"></a><span class="lineno">13135</span>&#160;    VkDeviceSize freeMemory;</div>
-<div class="line"><a name="l13136"></a><span class="lineno">13136</span>&#160;    {</div>
-<div class="line"><a name="l13137"></a><span class="lineno">13137</span>&#160;        <span class="keyword">const</span> uint32_t heapIndex = m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);</div>
-<div class="line"><a name="l13138"></a><span class="lineno">13138</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> heapBudget = {};</div>
-<div class="line"><a name="l13139"></a><span class="lineno">13139</span>&#160;        m_hAllocator-&gt;GetBudget(&amp;heapBudget, heapIndex, 1);</div>
-<div class="line"><a name="l13140"></a><span class="lineno">13140</span>&#160;        freeMemory = (heapBudget.<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a> &lt; heapBudget.<a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a>) ? (heapBudget.<a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a> - heapBudget.<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a>) : 0;</div>
-<div class="line"><a name="l13141"></a><span class="lineno">13141</span>&#160;    }</div>
-<div class="line"><a name="l13142"></a><span class="lineno">13142</span>&#160; </div>
-<div class="line"><a name="l13143"></a><span class="lineno">13143</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> canFallbackToDedicated = !IsCustomPool();</div>
-<div class="line"><a name="l13144"></a><span class="lineno">13144</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> canCreateNewBlock =</div>
-<div class="line"><a name="l13145"></a><span class="lineno">13145</span>&#160;        ((createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a>) == 0) &amp;&amp;</div>
-<div class="line"><a name="l13146"></a><span class="lineno">13146</span>&#160;        (m_Blocks.size() &lt; m_MaxBlockCount) &amp;&amp;</div>
-<div class="line"><a name="l13147"></a><span class="lineno">13147</span>&#160;        (freeMemory &gt;= size || !canFallbackToDedicated);</div>
-<div class="line"><a name="l13148"></a><span class="lineno">13148</span>&#160;    uint32_t strategy = createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e">VMA_ALLOCATION_CREATE_STRATEGY_MASK</a>;</div>
-<div class="line"><a name="l13149"></a><span class="lineno">13149</span>&#160; </div>
-<div class="line"><a name="l13150"></a><span class="lineno">13150</span>&#160;    <span class="comment">// If linearAlgorithm is used, canMakeOtherLost is available only when used as ring buffer.</span></div>
-<div class="line"><a name="l13151"></a><span class="lineno">13151</span>&#160;    <span class="comment">// Which in turn is available only when maxBlockCount = 1.</span></div>
-<div class="line"><a name="l13152"></a><span class="lineno">13152</span>&#160;    <span class="keywordflow">if</span>(m_Algorithm == <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> &amp;&amp; m_MaxBlockCount &gt; 1)</div>
-<div class="line"><a name="l13153"></a><span class="lineno">13153</span>&#160;    {</div>
-<div class="line"><a name="l13154"></a><span class="lineno">13154</span>&#160;        canMakeOtherLost = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l13155"></a><span class="lineno">13155</span>&#160;    }</div>
-<div class="line"><a name="l13156"></a><span class="lineno">13156</span>&#160; </div>
-<div class="line"><a name="l13157"></a><span class="lineno">13157</span>&#160;    <span class="comment">// Upper address can only be used with linear allocator and within single memory block.</span></div>
-<div class="line"><a name="l13158"></a><span class="lineno">13158</span>&#160;    <span class="keywordflow">if</span>(isUpperAddress &amp;&amp;</div>
-<div class="line"><a name="l13159"></a><span class="lineno">13159</span>&#160;        (m_Algorithm != <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> || m_MaxBlockCount &gt; 1))</div>
-<div class="line"><a name="l13160"></a><span class="lineno">13160</span>&#160;    {</div>
-<div class="line"><a name="l13161"></a><span class="lineno">13161</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</div>
-<div class="line"><a name="l13162"></a><span class="lineno">13162</span>&#160;    }</div>
-<div class="line"><a name="l13163"></a><span class="lineno">13163</span>&#160; </div>
-<div class="line"><a name="l13164"></a><span class="lineno">13164</span>&#160;    <span class="comment">// Validate strategy.</span></div>
-<div class="line"><a name="l13165"></a><span class="lineno">13165</span>&#160;    <span class="keywordflow">switch</span>(strategy)</div>
-<div class="line"><a name="l13166"></a><span class="lineno">13166</span>&#160;    {</div>
-<div class="line"><a name="l13167"></a><span class="lineno">13167</span>&#160;    <span class="keywordflow">case</span> 0:</div>
-<div class="line"><a name="l13168"></a><span class="lineno">13168</span>&#160;        strategy = <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a>;</div>
-<div class="line"><a name="l13169"></a><span class="lineno">13169</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l13170"></a><span class="lineno">13170</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a>:</div>
-<div class="line"><a name="l13171"></a><span class="lineno">13171</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</a>:</div>
-<div class="line"><a name="l13172"></a><span class="lineno">13172</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a>:</div>
-<div class="line"><a name="l13173"></a><span class="lineno">13173</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l13174"></a><span class="lineno">13174</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l13175"></a><span class="lineno">13175</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</div>
-<div class="line"><a name="l13176"></a><span class="lineno">13176</span>&#160;    }</div>
-<div class="line"><a name="l13177"></a><span class="lineno">13177</span>&#160; </div>
-<div class="line"><a name="l13178"></a><span class="lineno">13178</span>&#160;    <span class="comment">// Early reject: requested allocation size is larger that maximum block size for this block vector.</span></div>
-<div class="line"><a name="l13179"></a><span class="lineno">13179</span>&#160;    <span class="keywordflow">if</span>(size + 2 * VMA_DEBUG_MARGIN &gt; m_PreferredBlockSize)</div>
-<div class="line"><a name="l13180"></a><span class="lineno">13180</span>&#160;    {</div>
-<div class="line"><a name="l13181"></a><span class="lineno">13181</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l13182"></a><span class="lineno">13182</span>&#160;    }</div>
-<div class="line"><a name="l13183"></a><span class="lineno">13183</span>&#160; </div>
-<div class="line"><a name="l13184"></a><span class="lineno">13184</span>&#160;    <span class="comment">/*</span></div>
-<div class="line"><a name="l13185"></a><span class="lineno">13185</span>&#160;<span class="comment">    Under certain condition, this whole section can be skipped for optimization, so</span></div>
-<div class="line"><a name="l13186"></a><span class="lineno">13186</span>&#160;<span class="comment">    we move on directly to trying to allocate with canMakeOtherLost. That&#39;s the case</span></div>
-<div class="line"><a name="l13187"></a><span class="lineno">13187</span>&#160;<span class="comment">    e.g. for custom pools with linear algorithm.</span></div>
-<div class="line"><a name="l13188"></a><span class="lineno">13188</span>&#160;<span class="comment">    */</span></div>
-<div class="line"><a name="l13189"></a><span class="lineno">13189</span>&#160;    <span class="keywordflow">if</span>(!canMakeOtherLost || canCreateNewBlock)</div>
-<div class="line"><a name="l13190"></a><span class="lineno">13190</span>&#160;    {</div>
-<div class="line"><a name="l13191"></a><span class="lineno">13191</span>&#160;        <span class="comment">// 1. Search existing allocations. Try to allocate without making other allocations lost.</span></div>
-<div class="line"><a name="l13192"></a><span class="lineno">13192</span>&#160;        <a class="code" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a> allocFlagsCopy = createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>;</div>
-<div class="line"><a name="l13193"></a><span class="lineno">13193</span>&#160;        allocFlagsCopy &amp;= ~<a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a>;</div>
-<div class="line"><a name="l13194"></a><span class="lineno">13194</span>&#160; </div>
-<div class="line"><a name="l13195"></a><span class="lineno">13195</span>&#160;        <span class="keywordflow">if</span>(m_Algorithm == <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a>)</div>
-<div class="line"><a name="l13196"></a><span class="lineno">13196</span>&#160;        {</div>
-<div class="line"><a name="l13197"></a><span class="lineno">13197</span>&#160;            <span class="comment">// Use only last block.</span></div>
-<div class="line"><a name="l13198"></a><span class="lineno">13198</span>&#160;            <span class="keywordflow">if</span>(!m_Blocks.empty())</div>
-<div class="line"><a name="l13199"></a><span class="lineno">13199</span>&#160;            {</div>
-<div class="line"><a name="l13200"></a><span class="lineno">13200</span>&#160;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks.back();</div>
-<div class="line"><a name="l13201"></a><span class="lineno">13201</span>&#160;                VMA_ASSERT(pCurrBlock);</div>
-<div class="line"><a name="l13202"></a><span class="lineno">13202</span>&#160;                VkResult res = AllocateFromBlock(</div>
-<div class="line"><a name="l13203"></a><span class="lineno">13203</span>&#160;                    pCurrBlock,</div>
-<div class="line"><a name="l13204"></a><span class="lineno">13204</span>&#160;                    currentFrameIndex,</div>
-<div class="line"><a name="l13205"></a><span class="lineno">13205</span>&#160;                    size,</div>
-<div class="line"><a name="l13206"></a><span class="lineno">13206</span>&#160;                    alignment,</div>
-<div class="line"><a name="l13207"></a><span class="lineno">13207</span>&#160;                    allocFlagsCopy,</div>
-<div class="line"><a name="l13208"></a><span class="lineno">13208</span>&#160;                    createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
-<div class="line"><a name="l13209"></a><span class="lineno">13209</span>&#160;                    suballocType,</div>
-<div class="line"><a name="l13210"></a><span class="lineno">13210</span>&#160;                    strategy,</div>
-<div class="line"><a name="l13211"></a><span class="lineno">13211</span>&#160;                    pAllocation);</div>
-<div class="line"><a name="l13212"></a><span class="lineno">13212</span>&#160;                <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l13213"></a><span class="lineno">13213</span>&#160;                {</div>
-<div class="line"><a name="l13214"></a><span class="lineno">13214</span>&#160;                    VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Returned from last block #%u&quot;</span>, pCurrBlock-&gt;GetId());</div>
-<div class="line"><a name="l13215"></a><span class="lineno">13215</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l13216"></a><span class="lineno">13216</span>&#160;                }</div>
-<div class="line"><a name="l13217"></a><span class="lineno">13217</span>&#160;            }</div>
-<div class="line"><a name="l13218"></a><span class="lineno">13218</span>&#160;        }</div>
-<div class="line"><a name="l13219"></a><span class="lineno">13219</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l13220"></a><span class="lineno">13220</span>&#160;        {</div>
-<div class="line"><a name="l13221"></a><span class="lineno">13221</span>&#160;            <span class="keywordflow">if</span>(strategy == <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a>)</div>
-<div class="line"><a name="l13222"></a><span class="lineno">13222</span>&#160;            {</div>
-<div class="line"><a name="l13223"></a><span class="lineno">13223</span>&#160;                <span class="comment">// Forward order in m_Blocks - prefer blocks with smallest amount of free space.</span></div>
-<div class="line"><a name="l13224"></a><span class="lineno">13224</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex )</div>
-<div class="line"><a name="l13225"></a><span class="lineno">13225</span>&#160;                {</div>
-<div class="line"><a name="l13226"></a><span class="lineno">13226</span>&#160;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l13227"></a><span class="lineno">13227</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
-<div class="line"><a name="l13228"></a><span class="lineno">13228</span>&#160;                    VkResult res = AllocateFromBlock(</div>
-<div class="line"><a name="l13229"></a><span class="lineno">13229</span>&#160;                        pCurrBlock,</div>
-<div class="line"><a name="l13230"></a><span class="lineno">13230</span>&#160;                        currentFrameIndex,</div>
-<div class="line"><a name="l13231"></a><span class="lineno">13231</span>&#160;                        size,</div>
-<div class="line"><a name="l13232"></a><span class="lineno">13232</span>&#160;                        alignment,</div>
-<div class="line"><a name="l13233"></a><span class="lineno">13233</span>&#160;                        allocFlagsCopy,</div>
-<div class="line"><a name="l13234"></a><span class="lineno">13234</span>&#160;                        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
-<div class="line"><a name="l13235"></a><span class="lineno">13235</span>&#160;                        suballocType,</div>
-<div class="line"><a name="l13236"></a><span class="lineno">13236</span>&#160;                        strategy,</div>
-<div class="line"><a name="l13237"></a><span class="lineno">13237</span>&#160;                        pAllocation);</div>
-<div class="line"><a name="l13238"></a><span class="lineno">13238</span>&#160;                    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l13239"></a><span class="lineno">13239</span>&#160;                    {</div>
-<div class="line"><a name="l13240"></a><span class="lineno">13240</span>&#160;                        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Returned from existing block #%u&quot;</span>, pCurrBlock-&gt;GetId());</div>
-<div class="line"><a name="l13241"></a><span class="lineno">13241</span>&#160;                        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l13242"></a><span class="lineno">13242</span>&#160;                    }</div>
-<div class="line"><a name="l13243"></a><span class="lineno">13243</span>&#160;                }</div>
-<div class="line"><a name="l13244"></a><span class="lineno">13244</span>&#160;            }</div>
-<div class="line"><a name="l13245"></a><span class="lineno">13245</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// WORST_FIT, FIRST_FIT</span></div>
-<div class="line"><a name="l13246"></a><span class="lineno">13246</span>&#160;            {</div>
-<div class="line"><a name="l13247"></a><span class="lineno">13247</span>&#160;                <span class="comment">// Backward order in m_Blocks - prefer blocks with largest amount of free space.</span></div>
-<div class="line"><a name="l13248"></a><span class="lineno">13248</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = m_Blocks.size(); blockIndex--; )</div>
-<div class="line"><a name="l13249"></a><span class="lineno">13249</span>&#160;                {</div>
-<div class="line"><a name="l13250"></a><span class="lineno">13250</span>&#160;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l13251"></a><span class="lineno">13251</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
-<div class="line"><a name="l13252"></a><span class="lineno">13252</span>&#160;                    VkResult res = AllocateFromBlock(</div>
-<div class="line"><a name="l13253"></a><span class="lineno">13253</span>&#160;                        pCurrBlock,</div>
-<div class="line"><a name="l13254"></a><span class="lineno">13254</span>&#160;                        currentFrameIndex,</div>
-<div class="line"><a name="l13255"></a><span class="lineno">13255</span>&#160;                        size,</div>
-<div class="line"><a name="l13256"></a><span class="lineno">13256</span>&#160;                        alignment,</div>
-<div class="line"><a name="l13257"></a><span class="lineno">13257</span>&#160;                        allocFlagsCopy,</div>
-<div class="line"><a name="l13258"></a><span class="lineno">13258</span>&#160;                        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
-<div class="line"><a name="l13259"></a><span class="lineno">13259</span>&#160;                        suballocType,</div>
-<div class="line"><a name="l13260"></a><span class="lineno">13260</span>&#160;                        strategy,</div>
-<div class="line"><a name="l13261"></a><span class="lineno">13261</span>&#160;                        pAllocation);</div>
-<div class="line"><a name="l13262"></a><span class="lineno">13262</span>&#160;                    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l13263"></a><span class="lineno">13263</span>&#160;                    {</div>
-<div class="line"><a name="l13264"></a><span class="lineno">13264</span>&#160;                        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Returned from existing block #%u&quot;</span>, pCurrBlock-&gt;GetId());</div>
-<div class="line"><a name="l13265"></a><span class="lineno">13265</span>&#160;                        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l13266"></a><span class="lineno">13266</span>&#160;                    }</div>
-<div class="line"><a name="l13267"></a><span class="lineno">13267</span>&#160;                }</div>
-<div class="line"><a name="l13268"></a><span class="lineno">13268</span>&#160;            }</div>
-<div class="line"><a name="l13269"></a><span class="lineno">13269</span>&#160;        }</div>
-<div class="line"><a name="l13270"></a><span class="lineno">13270</span>&#160; </div>
-<div class="line"><a name="l13271"></a><span class="lineno">13271</span>&#160;        <span class="comment">// 2. Try to create new block.</span></div>
-<div class="line"><a name="l13272"></a><span class="lineno">13272</span>&#160;        <span class="keywordflow">if</span>(canCreateNewBlock)</div>
-<div class="line"><a name="l13273"></a><span class="lineno">13273</span>&#160;        {</div>
-<div class="line"><a name="l13274"></a><span class="lineno">13274</span>&#160;            <span class="comment">// Calculate optimal size for new block.</span></div>
-<div class="line"><a name="l13275"></a><span class="lineno">13275</span>&#160;            VkDeviceSize newBlockSize = m_PreferredBlockSize;</div>
-<div class="line"><a name="l13276"></a><span class="lineno">13276</span>&#160;            uint32_t newBlockSizeShift = 0;</div>
-<div class="line"><a name="l13277"></a><span class="lineno">13277</span>&#160;            <span class="keyword">const</span> uint32_t NEW_BLOCK_SIZE_SHIFT_MAX = 3;</div>
-<div class="line"><a name="l13278"></a><span class="lineno">13278</span>&#160; </div>
-<div class="line"><a name="l13279"></a><span class="lineno">13279</span>&#160;            <span class="keywordflow">if</span>(!m_ExplicitBlockSize)</div>
-<div class="line"><a name="l13280"></a><span class="lineno">13280</span>&#160;            {</div>
-<div class="line"><a name="l13281"></a><span class="lineno">13281</span>&#160;                <span class="comment">// Allocate 1/8, 1/4, 1/2 as first blocks.</span></div>
-<div class="line"><a name="l13282"></a><span class="lineno">13282</span>&#160;                <span class="keyword">const</span> VkDeviceSize maxExistingBlockSize = CalcMaxBlockSize();</div>
-<div class="line"><a name="l13283"></a><span class="lineno">13283</span>&#160;                <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; NEW_BLOCK_SIZE_SHIFT_MAX; ++i)</div>
-<div class="line"><a name="l13284"></a><span class="lineno">13284</span>&#160;                {</div>
-<div class="line"><a name="l13285"></a><span class="lineno">13285</span>&#160;                    <span class="keyword">const</span> VkDeviceSize smallerNewBlockSize = newBlockSize / 2;</div>
-<div class="line"><a name="l13286"></a><span class="lineno">13286</span>&#160;                    <span class="keywordflow">if</span>(smallerNewBlockSize &gt; maxExistingBlockSize &amp;&amp; smallerNewBlockSize &gt;= size * 2)</div>
-<div class="line"><a name="l13287"></a><span class="lineno">13287</span>&#160;                    {</div>
-<div class="line"><a name="l13288"></a><span class="lineno">13288</span>&#160;                        newBlockSize = smallerNewBlockSize;</div>
-<div class="line"><a name="l13289"></a><span class="lineno">13289</span>&#160;                        ++newBlockSizeShift;</div>
-<div class="line"><a name="l13290"></a><span class="lineno">13290</span>&#160;                    }</div>
-<div class="line"><a name="l13291"></a><span class="lineno">13291</span>&#160;                    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l13292"></a><span class="lineno">13292</span>&#160;                    {</div>
-<div class="line"><a name="l13293"></a><span class="lineno">13293</span>&#160;                        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l13294"></a><span class="lineno">13294</span>&#160;                    }</div>
-<div class="line"><a name="l13295"></a><span class="lineno">13295</span>&#160;                }</div>
-<div class="line"><a name="l13296"></a><span class="lineno">13296</span>&#160;            }</div>
-<div class="line"><a name="l13297"></a><span class="lineno">13297</span>&#160; </div>
-<div class="line"><a name="l13298"></a><span class="lineno">13298</span>&#160;            <span class="keywordtype">size_t</span> newBlockIndex = 0;</div>
-<div class="line"><a name="l13299"></a><span class="lineno">13299</span>&#160;            VkResult res = (newBlockSize &lt;= freeMemory || !canFallbackToDedicated) ?</div>
-<div class="line"><a name="l13300"></a><span class="lineno">13300</span>&#160;                CreateBlock(newBlockSize, &amp;newBlockIndex) : VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l13301"></a><span class="lineno">13301</span>&#160;            <span class="comment">// Allocation of this size failed? Try 1/2, 1/4, 1/8 of m_PreferredBlockSize.</span></div>
-<div class="line"><a name="l13302"></a><span class="lineno">13302</span>&#160;            <span class="keywordflow">if</span>(!m_ExplicitBlockSize)</div>
-<div class="line"><a name="l13303"></a><span class="lineno">13303</span>&#160;            {</div>
-<div class="line"><a name="l13304"></a><span class="lineno">13304</span>&#160;                <span class="keywordflow">while</span>(res &lt; 0 &amp;&amp; newBlockSizeShift &lt; NEW_BLOCK_SIZE_SHIFT_MAX)</div>
-<div class="line"><a name="l13305"></a><span class="lineno">13305</span>&#160;                {</div>
-<div class="line"><a name="l13306"></a><span class="lineno">13306</span>&#160;                    <span class="keyword">const</span> VkDeviceSize smallerNewBlockSize = newBlockSize / 2;</div>
-<div class="line"><a name="l13307"></a><span class="lineno">13307</span>&#160;                    <span class="keywordflow">if</span>(smallerNewBlockSize &gt;= size)</div>
-<div class="line"><a name="l13308"></a><span class="lineno">13308</span>&#160;                    {</div>
-<div class="line"><a name="l13309"></a><span class="lineno">13309</span>&#160;                        newBlockSize = smallerNewBlockSize;</div>
-<div class="line"><a name="l13310"></a><span class="lineno">13310</span>&#160;                        ++newBlockSizeShift;</div>
-<div class="line"><a name="l13311"></a><span class="lineno">13311</span>&#160;                        res = (newBlockSize &lt;= freeMemory || !canFallbackToDedicated) ?</div>
-<div class="line"><a name="l13312"></a><span class="lineno">13312</span>&#160;                            CreateBlock(newBlockSize, &amp;newBlockIndex) : VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l13313"></a><span class="lineno">13313</span>&#160;                    }</div>
-<div class="line"><a name="l13314"></a><span class="lineno">13314</span>&#160;                    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l13315"></a><span class="lineno">13315</span>&#160;                    {</div>
-<div class="line"><a name="l13316"></a><span class="lineno">13316</span>&#160;                        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l13317"></a><span class="lineno">13317</span>&#160;                    }</div>
-<div class="line"><a name="l13318"></a><span class="lineno">13318</span>&#160;                }</div>
-<div class="line"><a name="l13319"></a><span class="lineno">13319</span>&#160;            }</div>
-<div class="line"><a name="l13320"></a><span class="lineno">13320</span>&#160; </div>
-<div class="line"><a name="l13321"></a><span class="lineno">13321</span>&#160;            <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l13322"></a><span class="lineno">13322</span>&#160;            {</div>
-<div class="line"><a name="l13323"></a><span class="lineno">13323</span>&#160;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[newBlockIndex];</div>
-<div class="line"><a name="l13324"></a><span class="lineno">13324</span>&#160;                VMA_ASSERT(pBlock-&gt;m_pMetadata-&gt;GetSize() &gt;= size);</div>
-<div class="line"><a name="l13325"></a><span class="lineno">13325</span>&#160; </div>
-<div class="line"><a name="l13326"></a><span class="lineno">13326</span>&#160;                res = AllocateFromBlock(</div>
-<div class="line"><a name="l13327"></a><span class="lineno">13327</span>&#160;                    pBlock,</div>
-<div class="line"><a name="l13328"></a><span class="lineno">13328</span>&#160;                    currentFrameIndex,</div>
-<div class="line"><a name="l13329"></a><span class="lineno">13329</span>&#160;                    size,</div>
-<div class="line"><a name="l13330"></a><span class="lineno">13330</span>&#160;                    alignment,</div>
-<div class="line"><a name="l13331"></a><span class="lineno">13331</span>&#160;                    allocFlagsCopy,</div>
-<div class="line"><a name="l13332"></a><span class="lineno">13332</span>&#160;                    createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
-<div class="line"><a name="l13333"></a><span class="lineno">13333</span>&#160;                    suballocType,</div>
-<div class="line"><a name="l13334"></a><span class="lineno">13334</span>&#160;                    strategy,</div>
-<div class="line"><a name="l13335"></a><span class="lineno">13335</span>&#160;                    pAllocation);</div>
-<div class="line"><a name="l13336"></a><span class="lineno">13336</span>&#160;                <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l13337"></a><span class="lineno">13337</span>&#160;                {</div>
-<div class="line"><a name="l13338"></a><span class="lineno">13338</span>&#160;                    VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Created new block #%u Size=%llu&quot;</span>, pBlock-&gt;GetId(), newBlockSize);</div>
-<div class="line"><a name="l13339"></a><span class="lineno">13339</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l13340"></a><span class="lineno">13340</span>&#160;                }</div>
-<div class="line"><a name="l13341"></a><span class="lineno">13341</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l13342"></a><span class="lineno">13342</span>&#160;                {</div>
-<div class="line"><a name="l13343"></a><span class="lineno">13343</span>&#160;                    <span class="comment">// Allocation from new block failed, possibly due to VMA_DEBUG_MARGIN or alignment.</span></div>
-<div class="line"><a name="l13344"></a><span class="lineno">13344</span>&#160;                    <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l13345"></a><span class="lineno">13345</span>&#160;                }</div>
-<div class="line"><a name="l13346"></a><span class="lineno">13346</span>&#160;            }</div>
-<div class="line"><a name="l13347"></a><span class="lineno">13347</span>&#160;        }</div>
-<div class="line"><a name="l13348"></a><span class="lineno">13348</span>&#160;    }</div>
-<div class="line"><a name="l13349"></a><span class="lineno">13349</span>&#160; </div>
-<div class="line"><a name="l13350"></a><span class="lineno">13350</span>&#160;    <span class="comment">// 3. Try to allocate from existing blocks with making other allocations lost.</span></div>
-<div class="line"><a name="l13351"></a><span class="lineno">13351</span>&#160;    <span class="keywordflow">if</span>(canMakeOtherLost)</div>
-<div class="line"><a name="l13352"></a><span class="lineno">13352</span>&#160;    {</div>
-<div class="line"><a name="l13353"></a><span class="lineno">13353</span>&#160;        uint32_t tryIndex = 0;</div>
-<div class="line"><a name="l13354"></a><span class="lineno">13354</span>&#160;        <span class="keywordflow">for</span>(; tryIndex &lt; VMA_ALLOCATION_TRY_COUNT; ++tryIndex)</div>
-<div class="line"><a name="l13355"></a><span class="lineno">13355</span>&#160;        {</div>
-<div class="line"><a name="l13356"></a><span class="lineno">13356</span>&#160;            VmaDeviceMemoryBlock* pBestRequestBlock = VMA_NULL;</div>
-<div class="line"><a name="l13357"></a><span class="lineno">13357</span>&#160;            VmaAllocationRequest bestRequest = {};</div>
-<div class="line"><a name="l13358"></a><span class="lineno">13358</span>&#160;            VkDeviceSize bestRequestCost = VK_WHOLE_SIZE;</div>
-<div class="line"><a name="l13359"></a><span class="lineno">13359</span>&#160; </div>
-<div class="line"><a name="l13360"></a><span class="lineno">13360</span>&#160;            <span class="comment">// 1. Search existing allocations.</span></div>
-<div class="line"><a name="l13361"></a><span class="lineno">13361</span>&#160;            <span class="keywordflow">if</span>(strategy == <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a>)</div>
-<div class="line"><a name="l13362"></a><span class="lineno">13362</span>&#160;            {</div>
-<div class="line"><a name="l13363"></a><span class="lineno">13363</span>&#160;                <span class="comment">// Forward order in m_Blocks - prefer blocks with smallest amount of free space.</span></div>
-<div class="line"><a name="l13364"></a><span class="lineno">13364</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex )</div>
-<div class="line"><a name="l13365"></a><span class="lineno">13365</span>&#160;                {</div>
-<div class="line"><a name="l13366"></a><span class="lineno">13366</span>&#160;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l13367"></a><span class="lineno">13367</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
-<div class="line"><a name="l13368"></a><span class="lineno">13368</span>&#160;                    VmaAllocationRequest currRequest = {};</div>
-<div class="line"><a name="l13369"></a><span class="lineno">13369</span>&#160;                    <span class="keywordflow">if</span>(pCurrBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
-<div class="line"><a name="l13370"></a><span class="lineno">13370</span>&#160;                        currentFrameIndex,</div>
-<div class="line"><a name="l13371"></a><span class="lineno">13371</span>&#160;                        m_FrameInUseCount,</div>
-<div class="line"><a name="l13372"></a><span class="lineno">13372</span>&#160;                        m_BufferImageGranularity,</div>
-<div class="line"><a name="l13373"></a><span class="lineno">13373</span>&#160;                        size,</div>
-<div class="line"><a name="l13374"></a><span class="lineno">13374</span>&#160;                        alignment,</div>
-<div class="line"><a name="l13375"></a><span class="lineno">13375</span>&#160;                        (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a>) != 0,</div>
-<div class="line"><a name="l13376"></a><span class="lineno">13376</span>&#160;                        suballocType,</div>
-<div class="line"><a name="l13377"></a><span class="lineno">13377</span>&#160;                        canMakeOtherLost,</div>
-<div class="line"><a name="l13378"></a><span class="lineno">13378</span>&#160;                        strategy,</div>
-<div class="line"><a name="l13379"></a><span class="lineno">13379</span>&#160;                        &amp;currRequest))</div>
-<div class="line"><a name="l13380"></a><span class="lineno">13380</span>&#160;                    {</div>
-<div class="line"><a name="l13381"></a><span class="lineno">13381</span>&#160;                        <span class="keyword">const</span> VkDeviceSize currRequestCost = currRequest.CalcCost();</div>
-<div class="line"><a name="l13382"></a><span class="lineno">13382</span>&#160;                        <span class="keywordflow">if</span>(pBestRequestBlock == VMA_NULL ||</div>
-<div class="line"><a name="l13383"></a><span class="lineno">13383</span>&#160;                            currRequestCost &lt; bestRequestCost)</div>
-<div class="line"><a name="l13384"></a><span class="lineno">13384</span>&#160;                        {</div>
-<div class="line"><a name="l13385"></a><span class="lineno">13385</span>&#160;                            pBestRequestBlock = pCurrBlock;</div>
-<div class="line"><a name="l13386"></a><span class="lineno">13386</span>&#160;                            bestRequest = currRequest;</div>
-<div class="line"><a name="l13387"></a><span class="lineno">13387</span>&#160;                            bestRequestCost = currRequestCost;</div>
-<div class="line"><a name="l13388"></a><span class="lineno">13388</span>&#160; </div>
-<div class="line"><a name="l13389"></a><span class="lineno">13389</span>&#160;                            <span class="keywordflow">if</span>(bestRequestCost == 0)</div>
-<div class="line"><a name="l13390"></a><span class="lineno">13390</span>&#160;                            {</div>
-<div class="line"><a name="l13391"></a><span class="lineno">13391</span>&#160;                                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l13392"></a><span class="lineno">13392</span>&#160;                            }</div>
-<div class="line"><a name="l13393"></a><span class="lineno">13393</span>&#160;                        }</div>
-<div class="line"><a name="l13394"></a><span class="lineno">13394</span>&#160;                    }</div>
-<div class="line"><a name="l13395"></a><span class="lineno">13395</span>&#160;                }</div>
-<div class="line"><a name="l13396"></a><span class="lineno">13396</span>&#160;            }</div>
-<div class="line"><a name="l13397"></a><span class="lineno">13397</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// WORST_FIT, FIRST_FIT</span></div>
-<div class="line"><a name="l13398"></a><span class="lineno">13398</span>&#160;            {</div>
-<div class="line"><a name="l13399"></a><span class="lineno">13399</span>&#160;                <span class="comment">// Backward order in m_Blocks - prefer blocks with largest amount of free space.</span></div>
-<div class="line"><a name="l13400"></a><span class="lineno">13400</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = m_Blocks.size(); blockIndex--; )</div>
-<div class="line"><a name="l13401"></a><span class="lineno">13401</span>&#160;                {</div>
-<div class="line"><a name="l13402"></a><span class="lineno">13402</span>&#160;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l13403"></a><span class="lineno">13403</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
-<div class="line"><a name="l13404"></a><span class="lineno">13404</span>&#160;                    VmaAllocationRequest currRequest = {};</div>
-<div class="line"><a name="l13405"></a><span class="lineno">13405</span>&#160;                    <span class="keywordflow">if</span>(pCurrBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
-<div class="line"><a name="l13406"></a><span class="lineno">13406</span>&#160;                        currentFrameIndex,</div>
-<div class="line"><a name="l13407"></a><span class="lineno">13407</span>&#160;                        m_FrameInUseCount,</div>
-<div class="line"><a name="l13408"></a><span class="lineno">13408</span>&#160;                        m_BufferImageGranularity,</div>
-<div class="line"><a name="l13409"></a><span class="lineno">13409</span>&#160;                        size,</div>
-<div class="line"><a name="l13410"></a><span class="lineno">13410</span>&#160;                        alignment,</div>
-<div class="line"><a name="l13411"></a><span class="lineno">13411</span>&#160;                        (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a>) != 0,</div>
-<div class="line"><a name="l13412"></a><span class="lineno">13412</span>&#160;                        suballocType,</div>
-<div class="line"><a name="l13413"></a><span class="lineno">13413</span>&#160;                        canMakeOtherLost,</div>
-<div class="line"><a name="l13414"></a><span class="lineno">13414</span>&#160;                        strategy,</div>
-<div class="line"><a name="l13415"></a><span class="lineno">13415</span>&#160;                        &amp;currRequest))</div>
-<div class="line"><a name="l13416"></a><span class="lineno">13416</span>&#160;                    {</div>
-<div class="line"><a name="l13417"></a><span class="lineno">13417</span>&#160;                        <span class="keyword">const</span> VkDeviceSize currRequestCost = currRequest.CalcCost();</div>
-<div class="line"><a name="l13418"></a><span class="lineno">13418</span>&#160;                        <span class="keywordflow">if</span>(pBestRequestBlock == VMA_NULL ||</div>
-<div class="line"><a name="l13419"></a><span class="lineno">13419</span>&#160;                            currRequestCost &lt; bestRequestCost ||</div>
-<div class="line"><a name="l13420"></a><span class="lineno">13420</span>&#160;                            strategy == <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a>)</div>
-<div class="line"><a name="l13421"></a><span class="lineno">13421</span>&#160;                        {</div>
-<div class="line"><a name="l13422"></a><span class="lineno">13422</span>&#160;                            pBestRequestBlock = pCurrBlock;</div>
-<div class="line"><a name="l13423"></a><span class="lineno">13423</span>&#160;                            bestRequest = currRequest;</div>
-<div class="line"><a name="l13424"></a><span class="lineno">13424</span>&#160;                            bestRequestCost = currRequestCost;</div>
-<div class="line"><a name="l13425"></a><span class="lineno">13425</span>&#160; </div>
-<div class="line"><a name="l13426"></a><span class="lineno">13426</span>&#160;                            <span class="keywordflow">if</span>(bestRequestCost == 0 ||</div>
-<div class="line"><a name="l13427"></a><span class="lineno">13427</span>&#160;                                strategy == <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a>)</div>
-<div class="line"><a name="l13428"></a><span class="lineno">13428</span>&#160;                            {</div>
-<div class="line"><a name="l13429"></a><span class="lineno">13429</span>&#160;                                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l13430"></a><span class="lineno">13430</span>&#160;                            }</div>
-<div class="line"><a name="l13431"></a><span class="lineno">13431</span>&#160;                        }</div>
-<div class="line"><a name="l13432"></a><span class="lineno">13432</span>&#160;                    }</div>
-<div class="line"><a name="l13433"></a><span class="lineno">13433</span>&#160;                }</div>
-<div class="line"><a name="l13434"></a><span class="lineno">13434</span>&#160;            }</div>
-<div class="line"><a name="l13435"></a><span class="lineno">13435</span>&#160; </div>
-<div class="line"><a name="l13436"></a><span class="lineno">13436</span>&#160;            <span class="keywordflow">if</span>(pBestRequestBlock != VMA_NULL)</div>
-<div class="line"><a name="l13437"></a><span class="lineno">13437</span>&#160;            {</div>
-<div class="line"><a name="l13438"></a><span class="lineno">13438</span>&#160;                <span class="keywordflow">if</span>(mapped)</div>
-<div class="line"><a name="l13439"></a><span class="lineno">13439</span>&#160;                {</div>
-<div class="line"><a name="l13440"></a><span class="lineno">13440</span>&#160;                    VkResult res = pBestRequestBlock-&gt;Map(m_hAllocator, 1, VMA_NULL);</div>
-<div class="line"><a name="l13441"></a><span class="lineno">13441</span>&#160;                    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l13442"></a><span class="lineno">13442</span>&#160;                    {</div>
-<div class="line"><a name="l13443"></a><span class="lineno">13443</span>&#160;                        <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l13444"></a><span class="lineno">13444</span>&#160;                    }</div>
-<div class="line"><a name="l13445"></a><span class="lineno">13445</span>&#160;                }</div>
-<div class="line"><a name="l13446"></a><span class="lineno">13446</span>&#160; </div>
-<div class="line"><a name="l13447"></a><span class="lineno">13447</span>&#160;                <span class="keywordflow">if</span>(pBestRequestBlock-&gt;m_pMetadata-&gt;MakeRequestedAllocationsLost(</div>
-<div class="line"><a name="l13448"></a><span class="lineno">13448</span>&#160;                    currentFrameIndex,</div>
-<div class="line"><a name="l13449"></a><span class="lineno">13449</span>&#160;                    m_FrameInUseCount,</div>
-<div class="line"><a name="l13450"></a><span class="lineno">13450</span>&#160;                    &amp;bestRequest))</div>
-<div class="line"><a name="l13451"></a><span class="lineno">13451</span>&#160;                {</div>
-<div class="line"><a name="l13452"></a><span class="lineno">13452</span>&#160;                    <span class="comment">// Allocate from this pBlock.</span></div>
-<div class="line"><a name="l13453"></a><span class="lineno">13453</span>&#160;                    *pAllocation = m_hAllocator-&gt;m_AllocationObjectAllocator.Allocate(currentFrameIndex, isUserDataString);</div>
-<div class="line"><a name="l13454"></a><span class="lineno">13454</span>&#160;                    pBestRequestBlock-&gt;m_pMetadata-&gt;Alloc(bestRequest, suballocType, size, *pAllocation);</div>
-<div class="line"><a name="l13455"></a><span class="lineno">13455</span>&#160;                    UpdateHasEmptyBlock();</div>
-<div class="line"><a name="l13456"></a><span class="lineno">13456</span>&#160;                    (*pAllocation)-&gt;InitBlockAllocation(</div>
-<div class="line"><a name="l13457"></a><span class="lineno">13457</span>&#160;                        pBestRequestBlock,</div>
-<div class="line"><a name="l13458"></a><span class="lineno">13458</span>&#160;                        bestRequest.offset,</div>
-<div class="line"><a name="l13459"></a><span class="lineno">13459</span>&#160;                        alignment,</div>
-<div class="line"><a name="l13460"></a><span class="lineno">13460</span>&#160;                        size,</div>
-<div class="line"><a name="l13461"></a><span class="lineno">13461</span>&#160;                        m_MemoryTypeIndex,</div>
-<div class="line"><a name="l13462"></a><span class="lineno">13462</span>&#160;                        suballocType,</div>
-<div class="line"><a name="l13463"></a><span class="lineno">13463</span>&#160;                        mapped,</div>
-<div class="line"><a name="l13464"></a><span class="lineno">13464</span>&#160;                        (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2">VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</a>) != 0);</div>
-<div class="line"><a name="l13465"></a><span class="lineno">13465</span>&#160;                    VMA_HEAVY_ASSERT(pBestRequestBlock-&gt;Validate());</div>
-<div class="line"><a name="l13466"></a><span class="lineno">13466</span>&#160;                    VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Returned from existing block&quot;</span>);</div>
-<div class="line"><a name="l13467"></a><span class="lineno">13467</span>&#160;                    (*pAllocation)-&gt;SetUserData(m_hAllocator, createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>);</div>
-<div class="line"><a name="l13468"></a><span class="lineno">13468</span>&#160;                    m_hAllocator-&gt;m_Budget.AddAllocation(m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), size);</div>
-<div class="line"><a name="l13469"></a><span class="lineno">13469</span>&#160;                    <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</div>
-<div class="line"><a name="l13470"></a><span class="lineno">13470</span>&#160;                    {</div>
-<div class="line"><a name="l13471"></a><span class="lineno">13471</span>&#160;                        m_hAllocator-&gt;FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);</div>
-<div class="line"><a name="l13472"></a><span class="lineno">13472</span>&#160;                    }</div>
-<div class="line"><a name="l13473"></a><span class="lineno">13473</span>&#160;                    <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</div>
-<div class="line"><a name="l13474"></a><span class="lineno">13474</span>&#160;                    {</div>
-<div class="line"><a name="l13475"></a><span class="lineno">13475</span>&#160;                        VkResult res = pBestRequestBlock-&gt;WriteMagicValueAroundAllocation(m_hAllocator, bestRequest.offset, size);</div>
-<div class="line"><a name="l13476"></a><span class="lineno">13476</span>&#160;                        VMA_ASSERT(res == VK_SUCCESS &amp;&amp; <span class="stringliteral">&quot;Couldn&#39;t map block memory to write magic value.&quot;</span>);</div>
-<div class="line"><a name="l13477"></a><span class="lineno">13477</span>&#160;                    }</div>
-<div class="line"><a name="l13478"></a><span class="lineno">13478</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l13479"></a><span class="lineno">13479</span>&#160;                }</div>
-<div class="line"><a name="l13480"></a><span class="lineno">13480</span>&#160;                <span class="comment">// else: Some allocations must have been touched while we are here. Next try.</span></div>
-<div class="line"><a name="l13481"></a><span class="lineno">13481</span>&#160;            }</div>
-<div class="line"><a name="l13482"></a><span class="lineno">13482</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l13483"></a><span class="lineno">13483</span>&#160;            {</div>
-<div class="line"><a name="l13484"></a><span class="lineno">13484</span>&#160;                <span class="comment">// Could not find place in any of the blocks - break outer loop.</span></div>
-<div class="line"><a name="l13485"></a><span class="lineno">13485</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l13486"></a><span class="lineno">13486</span>&#160;            }</div>
-<div class="line"><a name="l13487"></a><span class="lineno">13487</span>&#160;        }</div>
-<div class="line"><a name="l13488"></a><span class="lineno">13488</span>&#160;        <span class="comment">/* Maximum number of tries exceeded - a very unlike event when many other</span></div>
-<div class="line"><a name="l13489"></a><span class="lineno">13489</span>&#160;<span class="comment">        threads are simultaneously touching allocations making it impossible to make</span></div>
-<div class="line"><a name="l13490"></a><span class="lineno">13490</span>&#160;<span class="comment">        lost at the same time as we try to allocate. */</span></div>
-<div class="line"><a name="l13491"></a><span class="lineno">13491</span>&#160;        <span class="keywordflow">if</span>(tryIndex == VMA_ALLOCATION_TRY_COUNT)</div>
-<div class="line"><a name="l13492"></a><span class="lineno">13492</span>&#160;        {</div>
-<div class="line"><a name="l13493"></a><span class="lineno">13493</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_TOO_MANY_OBJECTS;</div>
-<div class="line"><a name="l13494"></a><span class="lineno">13494</span>&#160;        }</div>
-<div class="line"><a name="l13495"></a><span class="lineno">13495</span>&#160;    }</div>
-<div class="line"><a name="l13496"></a><span class="lineno">13496</span>&#160; </div>
-<div class="line"><a name="l13497"></a><span class="lineno">13497</span>&#160;    <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l13498"></a><span class="lineno">13498</span>&#160;}</div>
-<div class="line"><a name="l13499"></a><span class="lineno">13499</span>&#160; </div>
-<div class="line"><a name="l13500"></a><span class="lineno">13500</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::Free(</div>
-<div class="line"><a name="l13501"></a><span class="lineno">13501</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</div>
-<div class="line"><a name="l13502"></a><span class="lineno">13502</span>&#160;{</div>
-<div class="line"><a name="l13503"></a><span class="lineno">13503</span>&#160;    VmaDeviceMemoryBlock* pBlockToDelete = VMA_NULL;</div>
-<div class="line"><a name="l13504"></a><span class="lineno">13504</span>&#160; </div>
-<div class="line"><a name="l13505"></a><span class="lineno">13505</span>&#160;    <span class="keywordtype">bool</span> budgetExceeded = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l13506"></a><span class="lineno">13506</span>&#160;    {</div>
-<div class="line"><a name="l13507"></a><span class="lineno">13507</span>&#160;        <span class="keyword">const</span> uint32_t heapIndex = m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);</div>
-<div class="line"><a name="l13508"></a><span class="lineno">13508</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> heapBudget = {};</div>
-<div class="line"><a name="l13509"></a><span class="lineno">13509</span>&#160;        m_hAllocator-&gt;GetBudget(&amp;heapBudget, heapIndex, 1);</div>
-<div class="line"><a name="l13510"></a><span class="lineno">13510</span>&#160;        budgetExceeded = heapBudget.<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a> &gt;= heapBudget.<a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a>;</div>
-<div class="line"><a name="l13511"></a><span class="lineno">13511</span>&#160;    }</div>
-<div class="line"><a name="l13512"></a><span class="lineno">13512</span>&#160; </div>
-<div class="line"><a name="l13513"></a><span class="lineno">13513</span>&#160;    <span class="comment">// Scope for lock.</span></div>
-<div class="line"><a name="l13514"></a><span class="lineno">13514</span>&#160;    {</div>
-<div class="line"><a name="l13515"></a><span class="lineno">13515</span>&#160;        VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l13516"></a><span class="lineno">13516</span>&#160; </div>
-<div class="line"><a name="l13517"></a><span class="lineno">13517</span>&#160;        VmaDeviceMemoryBlock* pBlock = hAllocation-&gt;GetBlock();</div>
-<div class="line"><a name="l13518"></a><span class="lineno">13518</span>&#160; </div>
-<div class="line"><a name="l13519"></a><span class="lineno">13519</span>&#160;        <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</div>
-<div class="line"><a name="l13520"></a><span class="lineno">13520</span>&#160;        {</div>
-<div class="line"><a name="l13521"></a><span class="lineno">13521</span>&#160;            VkResult res = pBlock-&gt;ValidateMagicValueAroundAllocation(m_hAllocator, hAllocation-&gt;GetOffset(), hAllocation-&gt;GetSize());</div>
-<div class="line"><a name="l13522"></a><span class="lineno">13522</span>&#160;            VMA_ASSERT(res == VK_SUCCESS &amp;&amp; <span class="stringliteral">&quot;Couldn&#39;t map block memory to validate magic value.&quot;</span>);</div>
-<div class="line"><a name="l13523"></a><span class="lineno">13523</span>&#160;        }</div>
-<div class="line"><a name="l13524"></a><span class="lineno">13524</span>&#160; </div>
-<div class="line"><a name="l13525"></a><span class="lineno">13525</span>&#160;        <span class="keywordflow">if</span>(hAllocation-&gt;IsPersistentMap())</div>
-<div class="line"><a name="l13526"></a><span class="lineno">13526</span>&#160;        {</div>
-<div class="line"><a name="l13527"></a><span class="lineno">13527</span>&#160;            pBlock-&gt;Unmap(m_hAllocator, 1);</div>
-<div class="line"><a name="l13528"></a><span class="lineno">13528</span>&#160;        }</div>
-<div class="line"><a name="l13529"></a><span class="lineno">13529</span>&#160; </div>
-<div class="line"><a name="l13530"></a><span class="lineno">13530</span>&#160;        pBlock-&gt;m_pMetadata-&gt;Free(hAllocation);</div>
-<div class="line"><a name="l13531"></a><span class="lineno">13531</span>&#160;        VMA_HEAVY_ASSERT(pBlock-&gt;Validate());</div>
-<div class="line"><a name="l13532"></a><span class="lineno">13532</span>&#160; </div>
-<div class="line"><a name="l13533"></a><span class="lineno">13533</span>&#160;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;  Freed from MemoryTypeIndex=%u&quot;</span>, m_MemoryTypeIndex);</div>
-<div class="line"><a name="l13534"></a><span class="lineno">13534</span>&#160; </div>
-<div class="line"><a name="l13535"></a><span class="lineno">13535</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">bool</span> canDeleteBlock = m_Blocks.size() &gt; m_MinBlockCount;</div>
-<div class="line"><a name="l13536"></a><span class="lineno">13536</span>&#160;        <span class="comment">// pBlock became empty after this deallocation.</span></div>
-<div class="line"><a name="l13537"></a><span class="lineno">13537</span>&#160;        <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;IsEmpty())</div>
-<div class="line"><a name="l13538"></a><span class="lineno">13538</span>&#160;        {</div>
-<div class="line"><a name="l13539"></a><span class="lineno">13539</span>&#160;            <span class="comment">// Already has empty block. We don&#39;t want to have two, so delete this one.</span></div>
-<div class="line"><a name="l13540"></a><span class="lineno">13540</span>&#160;            <span class="keywordflow">if</span>((m_HasEmptyBlock || budgetExceeded) &amp;&amp; canDeleteBlock)</div>
-<div class="line"><a name="l13541"></a><span class="lineno">13541</span>&#160;            {</div>
-<div class="line"><a name="l13542"></a><span class="lineno">13542</span>&#160;                pBlockToDelete = pBlock;</div>
-<div class="line"><a name="l13543"></a><span class="lineno">13543</span>&#160;                Remove(pBlock);</div>
-<div class="line"><a name="l13544"></a><span class="lineno">13544</span>&#160;            }</div>
-<div class="line"><a name="l13545"></a><span class="lineno">13545</span>&#160;            <span class="comment">// else: We now have an empty block - leave it.</span></div>
-<div class="line"><a name="l13546"></a><span class="lineno">13546</span>&#160;        }</div>
-<div class="line"><a name="l13547"></a><span class="lineno">13547</span>&#160;        <span class="comment">// pBlock didn&#39;t become empty, but we have another empty block - find and free that one.</span></div>
-<div class="line"><a name="l13548"></a><span class="lineno">13548</span>&#160;        <span class="comment">// (This is optional, heuristics.)</span></div>
-<div class="line"><a name="l13549"></a><span class="lineno">13549</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_HasEmptyBlock &amp;&amp; canDeleteBlock)</div>
-<div class="line"><a name="l13550"></a><span class="lineno">13550</span>&#160;        {</div>
-<div class="line"><a name="l13551"></a><span class="lineno">13551</span>&#160;            VmaDeviceMemoryBlock* pLastBlock = m_Blocks.back();</div>
-<div class="line"><a name="l13552"></a><span class="lineno">13552</span>&#160;            <span class="keywordflow">if</span>(pLastBlock-&gt;m_pMetadata-&gt;IsEmpty())</div>
-<div class="line"><a name="l13553"></a><span class="lineno">13553</span>&#160;            {</div>
-<div class="line"><a name="l13554"></a><span class="lineno">13554</span>&#160;                pBlockToDelete = pLastBlock;</div>
-<div class="line"><a name="l13555"></a><span class="lineno">13555</span>&#160;                m_Blocks.pop_back();</div>
-<div class="line"><a name="l13556"></a><span class="lineno">13556</span>&#160;            }</div>
-<div class="line"><a name="l13557"></a><span class="lineno">13557</span>&#160;        }</div>
-<div class="line"><a name="l13558"></a><span class="lineno">13558</span>&#160; </div>
-<div class="line"><a name="l13559"></a><span class="lineno">13559</span>&#160;        UpdateHasEmptyBlock();</div>
-<div class="line"><a name="l13560"></a><span class="lineno">13560</span>&#160;        IncrementallySortBlocks();</div>
-<div class="line"><a name="l13561"></a><span class="lineno">13561</span>&#160;    }</div>
-<div class="line"><a name="l13562"></a><span class="lineno">13562</span>&#160; </div>
-<div class="line"><a name="l13563"></a><span class="lineno">13563</span>&#160;    <span class="comment">// Destruction of a free block. Deferred until this point, outside of mutex</span></div>
-<div class="line"><a name="l13564"></a><span class="lineno">13564</span>&#160;    <span class="comment">// lock, for performance reason.</span></div>
-<div class="line"><a name="l13565"></a><span class="lineno">13565</span>&#160;    <span class="keywordflow">if</span>(pBlockToDelete != VMA_NULL)</div>
-<div class="line"><a name="l13566"></a><span class="lineno">13566</span>&#160;    {</div>
-<div class="line"><a name="l13567"></a><span class="lineno">13567</span>&#160;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Deleted empty block&quot;</span>);</div>
-<div class="line"><a name="l13568"></a><span class="lineno">13568</span>&#160;        pBlockToDelete-&gt;Destroy(m_hAllocator);</div>
-<div class="line"><a name="l13569"></a><span class="lineno">13569</span>&#160;        vma_delete(m_hAllocator, pBlockToDelete);</div>
-<div class="line"><a name="l13570"></a><span class="lineno">13570</span>&#160;    }</div>
-<div class="line"><a name="l13571"></a><span class="lineno">13571</span>&#160;}</div>
-<div class="line"><a name="l13572"></a><span class="lineno">13572</span>&#160; </div>
-<div class="line"><a name="l13573"></a><span class="lineno">13573</span>&#160;VkDeviceSize VmaBlockVector::CalcMaxBlockSize()<span class="keyword"> const</span></div>
-<div class="line"><a name="l13574"></a><span class="lineno">13574</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l13575"></a><span class="lineno">13575</span>&#160;    VkDeviceSize result = 0;</div>
-<div class="line"><a name="l13576"></a><span class="lineno">13576</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_Blocks.size(); i--; )</div>
-<div class="line"><a name="l13577"></a><span class="lineno">13577</span>&#160;    {</div>
-<div class="line"><a name="l13578"></a><span class="lineno">13578</span>&#160;        result = VMA_MAX(result, m_Blocks[i]-&gt;m_pMetadata-&gt;GetSize());</div>
-<div class="line"><a name="l13579"></a><span class="lineno">13579</span>&#160;        <span class="keywordflow">if</span>(result &gt;= m_PreferredBlockSize)</div>
-<div class="line"><a name="l13580"></a><span class="lineno">13580</span>&#160;        {</div>
-<div class="line"><a name="l13581"></a><span class="lineno">13581</span>&#160;            <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l13582"></a><span class="lineno">13582</span>&#160;        }</div>
-<div class="line"><a name="l13583"></a><span class="lineno">13583</span>&#160;    }</div>
-<div class="line"><a name="l13584"></a><span class="lineno">13584</span>&#160;    <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l13585"></a><span class="lineno">13585</span>&#160;}</div>
-<div class="line"><a name="l13586"></a><span class="lineno">13586</span>&#160; </div>
-<div class="line"><a name="l13587"></a><span class="lineno">13587</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::Remove(VmaDeviceMemoryBlock* pBlock)</div>
-<div class="line"><a name="l13588"></a><span class="lineno">13588</span>&#160;{</div>
-<div class="line"><a name="l13589"></a><span class="lineno">13589</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</div>
-<div class="line"><a name="l13590"></a><span class="lineno">13590</span>&#160;    {</div>
-<div class="line"><a name="l13591"></a><span class="lineno">13591</span>&#160;        <span class="keywordflow">if</span>(m_Blocks[blockIndex] == pBlock)</div>
-<div class="line"><a name="l13592"></a><span class="lineno">13592</span>&#160;        {</div>
-<div class="line"><a name="l13593"></a><span class="lineno">13593</span>&#160;            VmaVectorRemove(m_Blocks, blockIndex);</div>
-<div class="line"><a name="l13594"></a><span class="lineno">13594</span>&#160;            <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l13595"></a><span class="lineno">13595</span>&#160;        }</div>
-<div class="line"><a name="l13596"></a><span class="lineno">13596</span>&#160;    }</div>
-<div class="line"><a name="l13597"></a><span class="lineno">13597</span>&#160;    VMA_ASSERT(0);</div>
-<div class="line"><a name="l13598"></a><span class="lineno">13598</span>&#160;}</div>
-<div class="line"><a name="l13599"></a><span class="lineno">13599</span>&#160; </div>
-<div class="line"><a name="l13600"></a><span class="lineno">13600</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::IncrementallySortBlocks()</div>
-<div class="line"><a name="l13601"></a><span class="lineno">13601</span>&#160;{</div>
-<div class="line"><a name="l13602"></a><span class="lineno">13602</span>&#160;    <span class="keywordflow">if</span>(m_Algorithm != <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a>)</div>
-<div class="line"><a name="l13603"></a><span class="lineno">13603</span>&#160;    {</div>
-<div class="line"><a name="l13604"></a><span class="lineno">13604</span>&#160;        <span class="comment">// Bubble sort only until first swap.</span></div>
-<div class="line"><a name="l13605"></a><span class="lineno">13605</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 1; i &lt; m_Blocks.size(); ++i)</div>
-<div class="line"><a name="l13606"></a><span class="lineno">13606</span>&#160;        {</div>
-<div class="line"><a name="l13607"></a><span class="lineno">13607</span>&#160;            <span class="keywordflow">if</span>(m_Blocks[i - 1]-&gt;m_pMetadata-&gt;GetSumFreeSize() &gt; m_Blocks[i]-&gt;m_pMetadata-&gt;GetSumFreeSize())</div>
-<div class="line"><a name="l13608"></a><span class="lineno">13608</span>&#160;            {</div>
-<div class="line"><a name="l13609"></a><span class="lineno">13609</span>&#160;                VMA_SWAP(m_Blocks[i - 1], m_Blocks[i]);</div>
-<div class="line"><a name="l13610"></a><span class="lineno">13610</span>&#160;                <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l13611"></a><span class="lineno">13611</span>&#160;            }</div>
-<div class="line"><a name="l13612"></a><span class="lineno">13612</span>&#160;        }</div>
-<div class="line"><a name="l13613"></a><span class="lineno">13613</span>&#160;    }</div>
-<div class="line"><a name="l13614"></a><span class="lineno">13614</span>&#160;}</div>
-<div class="line"><a name="l13615"></a><span class="lineno">13615</span>&#160; </div>
-<div class="line"><a name="l13616"></a><span class="lineno">13616</span>&#160;VkResult VmaBlockVector::AllocateFromBlock(</div>
-<div class="line"><a name="l13617"></a><span class="lineno">13617</span>&#160;    VmaDeviceMemoryBlock* pBlock,</div>
-<div class="line"><a name="l13618"></a><span class="lineno">13618</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l13619"></a><span class="lineno">13619</span>&#160;    VkDeviceSize size,</div>
-<div class="line"><a name="l13620"></a><span class="lineno">13620</span>&#160;    VkDeviceSize alignment,</div>
-<div class="line"><a name="l13621"></a><span class="lineno">13621</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a> allocFlags,</div>
-<div class="line"><a name="l13622"></a><span class="lineno">13622</span>&#160;    <span class="keywordtype">void</span>* pUserData,</div>
-<div class="line"><a name="l13623"></a><span class="lineno">13623</span>&#160;    VmaSuballocationType suballocType,</div>
-<div class="line"><a name="l13624"></a><span class="lineno">13624</span>&#160;    uint32_t strategy,</div>
-<div class="line"><a name="l13625"></a><span class="lineno">13625</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
-<div class="line"><a name="l13626"></a><span class="lineno">13626</span>&#160;{</div>
-<div class="line"><a name="l13627"></a><span class="lineno">13627</span>&#160;    VMA_ASSERT((allocFlags &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a>) == 0);</div>
-<div class="line"><a name="l13628"></a><span class="lineno">13628</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> isUpperAddress = (allocFlags &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a>) != 0;</div>
-<div class="line"><a name="l13629"></a><span class="lineno">13629</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> mapped = (allocFlags &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0;</div>
-<div class="line"><a name="l13630"></a><span class="lineno">13630</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> isUserDataString = (allocFlags &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a>) != 0;</div>
-<div class="line"><a name="l13631"></a><span class="lineno">13631</span>&#160; </div>
-<div class="line"><a name="l13632"></a><span class="lineno">13632</span>&#160;    VmaAllocationRequest currRequest = {};</div>
-<div class="line"><a name="l13633"></a><span class="lineno">13633</span>&#160;    <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
-<div class="line"><a name="l13634"></a><span class="lineno">13634</span>&#160;        currentFrameIndex,</div>
-<div class="line"><a name="l13635"></a><span class="lineno">13635</span>&#160;        m_FrameInUseCount,</div>
-<div class="line"><a name="l13636"></a><span class="lineno">13636</span>&#160;        m_BufferImageGranularity,</div>
-<div class="line"><a name="l13637"></a><span class="lineno">13637</span>&#160;        size,</div>
-<div class="line"><a name="l13638"></a><span class="lineno">13638</span>&#160;        alignment,</div>
-<div class="line"><a name="l13639"></a><span class="lineno">13639</span>&#160;        isUpperAddress,</div>
-<div class="line"><a name="l13640"></a><span class="lineno">13640</span>&#160;        suballocType,</div>
-<div class="line"><a name="l13641"></a><span class="lineno">13641</span>&#160;        <span class="keyword">false</span>, <span class="comment">// canMakeOtherLost</span></div>
-<div class="line"><a name="l13642"></a><span class="lineno">13642</span>&#160;        strategy,</div>
-<div class="line"><a name="l13643"></a><span class="lineno">13643</span>&#160;        &amp;currRequest))</div>
-<div class="line"><a name="l13644"></a><span class="lineno">13644</span>&#160;    {</div>
-<div class="line"><a name="l13645"></a><span class="lineno">13645</span>&#160;        <span class="comment">// Allocate from pCurrBlock.</span></div>
-<div class="line"><a name="l13646"></a><span class="lineno">13646</span>&#160;        VMA_ASSERT(currRequest.itemsToMakeLostCount == 0);</div>
-<div class="line"><a name="l13647"></a><span class="lineno">13647</span>&#160; </div>
-<div class="line"><a name="l13648"></a><span class="lineno">13648</span>&#160;        <span class="keywordflow">if</span>(mapped)</div>
-<div class="line"><a name="l13649"></a><span class="lineno">13649</span>&#160;        {</div>
-<div class="line"><a name="l13650"></a><span class="lineno">13650</span>&#160;            VkResult res = pBlock-&gt;Map(m_hAllocator, 1, VMA_NULL);</div>
-<div class="line"><a name="l13651"></a><span class="lineno">13651</span>&#160;            <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l13652"></a><span class="lineno">13652</span>&#160;            {</div>
-<div class="line"><a name="l13653"></a><span class="lineno">13653</span>&#160;                <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l13654"></a><span class="lineno">13654</span>&#160;            }</div>
-<div class="line"><a name="l13655"></a><span class="lineno">13655</span>&#160;        }</div>
-<div class="line"><a name="l13656"></a><span class="lineno">13656</span>&#160; </div>
-<div class="line"><a name="l13657"></a><span class="lineno">13657</span>&#160;        *pAllocation = m_hAllocator-&gt;m_AllocationObjectAllocator.Allocate(currentFrameIndex, isUserDataString);</div>
-<div class="line"><a name="l13658"></a><span class="lineno">13658</span>&#160;        pBlock-&gt;m_pMetadata-&gt;Alloc(currRequest, suballocType, size, *pAllocation);</div>
-<div class="line"><a name="l13659"></a><span class="lineno">13659</span>&#160;        UpdateHasEmptyBlock();</div>
-<div class="line"><a name="l13660"></a><span class="lineno">13660</span>&#160;        (*pAllocation)-&gt;InitBlockAllocation(</div>
-<div class="line"><a name="l13661"></a><span class="lineno">13661</span>&#160;            pBlock,</div>
-<div class="line"><a name="l13662"></a><span class="lineno">13662</span>&#160;            currRequest.offset,</div>
-<div class="line"><a name="l13663"></a><span class="lineno">13663</span>&#160;            alignment,</div>
-<div class="line"><a name="l13664"></a><span class="lineno">13664</span>&#160;            size,</div>
-<div class="line"><a name="l13665"></a><span class="lineno">13665</span>&#160;            m_MemoryTypeIndex,</div>
-<div class="line"><a name="l13666"></a><span class="lineno">13666</span>&#160;            suballocType,</div>
-<div class="line"><a name="l13667"></a><span class="lineno">13667</span>&#160;            mapped,</div>
-<div class="line"><a name="l13668"></a><span class="lineno">13668</span>&#160;            (allocFlags &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2">VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</a>) != 0);</div>
-<div class="line"><a name="l13669"></a><span class="lineno">13669</span>&#160;        VMA_HEAVY_ASSERT(pBlock-&gt;Validate());</div>
-<div class="line"><a name="l13670"></a><span class="lineno">13670</span>&#160;        (*pAllocation)-&gt;SetUserData(m_hAllocator, pUserData);</div>
-<div class="line"><a name="l13671"></a><span class="lineno">13671</span>&#160;        m_hAllocator-&gt;m_Budget.AddAllocation(m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), size);</div>
-<div class="line"><a name="l13672"></a><span class="lineno">13672</span>&#160;        <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</div>
-<div class="line"><a name="l13673"></a><span class="lineno">13673</span>&#160;        {</div>
-<div class="line"><a name="l13674"></a><span class="lineno">13674</span>&#160;            m_hAllocator-&gt;FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);</div>
-<div class="line"><a name="l13675"></a><span class="lineno">13675</span>&#160;        }</div>
-<div class="line"><a name="l13676"></a><span class="lineno">13676</span>&#160;        <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</div>
-<div class="line"><a name="l13677"></a><span class="lineno">13677</span>&#160;        {</div>
-<div class="line"><a name="l13678"></a><span class="lineno">13678</span>&#160;            VkResult res = pBlock-&gt;WriteMagicValueAroundAllocation(m_hAllocator, currRequest.offset, size);</div>
-<div class="line"><a name="l13679"></a><span class="lineno">13679</span>&#160;            VMA_ASSERT(res == VK_SUCCESS &amp;&amp; <span class="stringliteral">&quot;Couldn&#39;t map block memory to write magic value.&quot;</span>);</div>
-<div class="line"><a name="l13680"></a><span class="lineno">13680</span>&#160;        }</div>
-<div class="line"><a name="l13681"></a><span class="lineno">13681</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l13682"></a><span class="lineno">13682</span>&#160;    }</div>
-<div class="line"><a name="l13683"></a><span class="lineno">13683</span>&#160;    <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l13684"></a><span class="lineno">13684</span>&#160;}</div>
-<div class="line"><a name="l13685"></a><span class="lineno">13685</span>&#160; </div>
-<div class="line"><a name="l13686"></a><span class="lineno">13686</span>&#160;VkResult VmaBlockVector::CreateBlock(VkDeviceSize blockSize, <span class="keywordtype">size_t</span>* pNewBlockIndex)</div>
-<div class="line"><a name="l13687"></a><span class="lineno">13687</span>&#160;{</div>
-<div class="line"><a name="l13688"></a><span class="lineno">13688</span>&#160;    VkMemoryAllocateInfo allocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO };</div>
-<div class="line"><a name="l13689"></a><span class="lineno">13689</span>&#160;    allocInfo.pNext = m_pMemoryAllocateNext;</div>
-<div class="line"><a name="l13690"></a><span class="lineno">13690</span>&#160;    allocInfo.memoryTypeIndex = m_MemoryTypeIndex;</div>
-<div class="line"><a name="l13691"></a><span class="lineno">13691</span>&#160;    allocInfo.allocationSize = blockSize;</div>
-<div class="line"><a name="l13692"></a><span class="lineno">13692</span>&#160; </div>
-<div class="line"><a name="l13693"></a><span class="lineno">13693</span>&#160;<span class="preprocessor">#if VMA_BUFFER_DEVICE_ADDRESS</span></div>
-<div class="line"><a name="l13694"></a><span class="lineno">13694</span>&#160;    <span class="comment">// Every standalone block can potentially contain a buffer with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT - always enable the feature.</span></div>
-<div class="line"><a name="l13695"></a><span class="lineno">13695</span>&#160;    VkMemoryAllocateFlagsInfoKHR allocFlagsInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR };</div>
-<div class="line"><a name="l13696"></a><span class="lineno">13696</span>&#160;    <span class="keywordflow">if</span>(m_hAllocator-&gt;m_UseKhrBufferDeviceAddress)</div>
-<div class="line"><a name="l13697"></a><span class="lineno">13697</span>&#160;    {</div>
-<div class="line"><a name="l13698"></a><span class="lineno">13698</span>&#160;        allocFlagsInfo.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR;</div>
-<div class="line"><a name="l13699"></a><span class="lineno">13699</span>&#160;        VmaPnextChainPushFront(&amp;allocInfo, &amp;allocFlagsInfo);</div>
-<div class="line"><a name="l13700"></a><span class="lineno">13700</span>&#160;    }</div>
-<div class="line"><a name="l13701"></a><span class="lineno">13701</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_BUFFER_DEVICE_ADDRESS</span></div>
-<div class="line"><a name="l13702"></a><span class="lineno">13702</span>&#160; </div>
-<div class="line"><a name="l13703"></a><span class="lineno">13703</span>&#160;<span class="preprocessor">#if VMA_MEMORY_PRIORITY</span></div>
-<div class="line"><a name="l13704"></a><span class="lineno">13704</span>&#160;    VkMemoryPriorityAllocateInfoEXT priorityInfo = { VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT };</div>
-<div class="line"><a name="l13705"></a><span class="lineno">13705</span>&#160;    <span class="keywordflow">if</span>(m_hAllocator-&gt;m_UseExtMemoryPriority)</div>
-<div class="line"><a name="l13706"></a><span class="lineno">13706</span>&#160;    {</div>
-<div class="line"><a name="l13707"></a><span class="lineno">13707</span>&#160;        priorityInfo.priority = m_Priority;</div>
-<div class="line"><a name="l13708"></a><span class="lineno">13708</span>&#160;        VmaPnextChainPushFront(&amp;allocInfo, &amp;priorityInfo);</div>
-<div class="line"><a name="l13709"></a><span class="lineno">13709</span>&#160;    }</div>
-<div class="line"><a name="l13710"></a><span class="lineno">13710</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_MEMORY_PRIORITY</span></div>
-<div class="line"><a name="l13711"></a><span class="lineno">13711</span>&#160; </div>
-<div class="line"><a name="l13712"></a><span class="lineno">13712</span>&#160;<span class="preprocessor">#if VMA_EXTERNAL_MEMORY</span></div>
-<div class="line"><a name="l13713"></a><span class="lineno">13713</span>&#160;    <span class="comment">// Attach VkExportMemoryAllocateInfoKHR if necessary.</span></div>
-<div class="line"><a name="l13714"></a><span class="lineno">13714</span>&#160;    VkExportMemoryAllocateInfoKHR exportMemoryAllocInfo = { VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR };</div>
-<div class="line"><a name="l13715"></a><span class="lineno">13715</span>&#160;    exportMemoryAllocInfo.handleTypes = m_hAllocator-&gt;GetExternalMemoryHandleTypeFlags(m_MemoryTypeIndex);</div>
-<div class="line"><a name="l13716"></a><span class="lineno">13716</span>&#160;    <span class="keywordflow">if</span>(exportMemoryAllocInfo.handleTypes != 0)</div>
-<div class="line"><a name="l13717"></a><span class="lineno">13717</span>&#160;    {</div>
-<div class="line"><a name="l13718"></a><span class="lineno">13718</span>&#160;        VmaPnextChainPushFront(&amp;allocInfo, &amp;exportMemoryAllocInfo);</div>
-<div class="line"><a name="l13719"></a><span class="lineno">13719</span>&#160;    }</div>
-<div class="line"><a name="l13720"></a><span class="lineno">13720</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_EXTERNAL_MEMORY</span></div>
-<div class="line"><a name="l13721"></a><span class="lineno">13721</span>&#160; </div>
-<div class="line"><a name="l13722"></a><span class="lineno">13722</span>&#160;    VkDeviceMemory mem = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l13723"></a><span class="lineno">13723</span>&#160;    VkResult res = m_hAllocator-&gt;AllocateVulkanMemory(&amp;allocInfo, &amp;mem);</div>
-<div class="line"><a name="l13724"></a><span class="lineno">13724</span>&#160;    <span class="keywordflow">if</span>(res &lt; 0)</div>
-<div class="line"><a name="l13725"></a><span class="lineno">13725</span>&#160;    {</div>
-<div class="line"><a name="l13726"></a><span class="lineno">13726</span>&#160;        <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l13727"></a><span class="lineno">13727</span>&#160;    }</div>
-<div class="line"><a name="l13728"></a><span class="lineno">13728</span>&#160; </div>
-<div class="line"><a name="l13729"></a><span class="lineno">13729</span>&#160;    <span class="comment">// New VkDeviceMemory successfully created.</span></div>
-<div class="line"><a name="l13730"></a><span class="lineno">13730</span>&#160; </div>
-<div class="line"><a name="l13731"></a><span class="lineno">13731</span>&#160;    <span class="comment">// Create new Allocation for it.</span></div>
-<div class="line"><a name="l13732"></a><span class="lineno">13732</span>&#160;    VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = vma_new(m_hAllocator, VmaDeviceMemoryBlock)(m_hAllocator);</div>
-<div class="line"><a name="l13733"></a><span class="lineno">13733</span>&#160;    pBlock-&gt;Init(</div>
-<div class="line"><a name="l13734"></a><span class="lineno">13734</span>&#160;        m_hAllocator,</div>
-<div class="line"><a name="l13735"></a><span class="lineno">13735</span>&#160;        m_hParentPool,</div>
-<div class="line"><a name="l13736"></a><span class="lineno">13736</span>&#160;        m_MemoryTypeIndex,</div>
-<div class="line"><a name="l13737"></a><span class="lineno">13737</span>&#160;        mem,</div>
-<div class="line"><a name="l13738"></a><span class="lineno">13738</span>&#160;        allocInfo.allocationSize,</div>
-<div class="line"><a name="l13739"></a><span class="lineno">13739</span>&#160;        m_NextBlockId++,</div>
-<div class="line"><a name="l13740"></a><span class="lineno">13740</span>&#160;        m_Algorithm);</div>
-<div class="line"><a name="l13741"></a><span class="lineno">13741</span>&#160; </div>
-<div class="line"><a name="l13742"></a><span class="lineno">13742</span>&#160;    m_Blocks.push_back(pBlock);</div>
-<div class="line"><a name="l13743"></a><span class="lineno">13743</span>&#160;    <span class="keywordflow">if</span>(pNewBlockIndex != VMA_NULL)</div>
-<div class="line"><a name="l13744"></a><span class="lineno">13744</span>&#160;    {</div>
-<div class="line"><a name="l13745"></a><span class="lineno">13745</span>&#160;        *pNewBlockIndex = m_Blocks.size() - 1;</div>
-<div class="line"><a name="l13746"></a><span class="lineno">13746</span>&#160;    }</div>
-<div class="line"><a name="l13747"></a><span class="lineno">13747</span>&#160; </div>
-<div class="line"><a name="l13748"></a><span class="lineno">13748</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l13749"></a><span class="lineno">13749</span>&#160;}</div>
-<div class="line"><a name="l13750"></a><span class="lineno">13750</span>&#160; </div>
-<div class="line"><a name="l13751"></a><span class="lineno">13751</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::ApplyDefragmentationMovesCpu(</div>
-<div class="line"><a name="l13752"></a><span class="lineno">13752</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pDefragCtx,</div>
-<div class="line"><a name="l13753"></a><span class="lineno">13753</span>&#160;    <span class="keyword">const</span> VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves)</div>
-<div class="line"><a name="l13754"></a><span class="lineno">13754</span>&#160;{</div>
-<div class="line"><a name="l13755"></a><span class="lineno">13755</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_Blocks.size();</div>
-<div class="line"><a name="l13756"></a><span class="lineno">13756</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> isNonCoherent = m_hAllocator-&gt;IsMemoryTypeNonCoherent(m_MemoryTypeIndex);</div>
-<div class="line"><a name="l13757"></a><span class="lineno">13757</span>&#160; </div>
-<div class="line"><a name="l13758"></a><span class="lineno">13758</span>&#160;    <span class="keyword">enum</span> BLOCK_FLAG</div>
-<div class="line"><a name="l13759"></a><span class="lineno">13759</span>&#160;    {</div>
-<div class="line"><a name="l13760"></a><span class="lineno">13760</span>&#160;        BLOCK_FLAG_USED = 0x00000001,</div>
-<div class="line"><a name="l13761"></a><span class="lineno">13761</span>&#160;        BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION = 0x00000002,</div>
-<div class="line"><a name="l13762"></a><span class="lineno">13762</span>&#160;    };</div>
-<div class="line"><a name="l13763"></a><span class="lineno">13763</span>&#160; </div>
-<div class="line"><a name="l13764"></a><span class="lineno">13764</span>&#160;    <span class="keyword">struct </span>BlockInfo</div>
-<div class="line"><a name="l13765"></a><span class="lineno">13765</span>&#160;    {</div>
-<div class="line"><a name="l13766"></a><span class="lineno">13766</span>&#160;        uint32_t flags;</div>
-<div class="line"><a name="l13767"></a><span class="lineno">13767</span>&#160;        <span class="keywordtype">void</span>* pMappedData;</div>
-<div class="line"><a name="l13768"></a><span class="lineno">13768</span>&#160;    };</div>
-<div class="line"><a name="l13769"></a><span class="lineno">13769</span>&#160;    VmaVector&lt; BlockInfo, VmaStlAllocator&lt;BlockInfo&gt; &gt;</div>
-<div class="line"><a name="l13770"></a><span class="lineno">13770</span>&#160;        blockInfo(blockCount, BlockInfo(), VmaStlAllocator&lt;BlockInfo&gt;(m_hAllocator-&gt;GetAllocationCallbacks()));</div>
-<div class="line"><a name="l13771"></a><span class="lineno">13771</span>&#160;    memset(blockInfo.data(), 0, blockCount * <span class="keyword">sizeof</span>(BlockInfo));</div>
-<div class="line"><a name="l13772"></a><span class="lineno">13772</span>&#160; </div>
-<div class="line"><a name="l13773"></a><span class="lineno">13773</span>&#160;    <span class="comment">// Go over all moves. Mark blocks that are used with BLOCK_FLAG_USED.</span></div>
-<div class="line"><a name="l13774"></a><span class="lineno">13774</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> moveCount = moves.size();</div>
-<div class="line"><a name="l13775"></a><span class="lineno">13775</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> moveIndex = 0; moveIndex &lt; moveCount; ++moveIndex)</div>
-<div class="line"><a name="l13776"></a><span class="lineno">13776</span>&#160;    {</div>
-<div class="line"><a name="l13777"></a><span class="lineno">13777</span>&#160;        <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</div>
-<div class="line"><a name="l13778"></a><span class="lineno">13778</span>&#160;        blockInfo[move.srcBlockIndex].flags |= BLOCK_FLAG_USED;</div>
-<div class="line"><a name="l13779"></a><span class="lineno">13779</span>&#160;        blockInfo[move.dstBlockIndex].flags |= BLOCK_FLAG_USED;</div>
-<div class="line"><a name="l13780"></a><span class="lineno">13780</span>&#160;    }</div>
-<div class="line"><a name="l13781"></a><span class="lineno">13781</span>&#160; </div>
-<div class="line"><a name="l13782"></a><span class="lineno">13782</span>&#160;    VMA_ASSERT(pDefragCtx-&gt;res == VK_SUCCESS);</div>
-<div class="line"><a name="l13783"></a><span class="lineno">13783</span>&#160; </div>
-<div class="line"><a name="l13784"></a><span class="lineno">13784</span>&#160;    <span class="comment">// Go over all blocks. Get mapped pointer or map if necessary.</span></div>
-<div class="line"><a name="l13785"></a><span class="lineno">13785</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; pDefragCtx-&gt;res == VK_SUCCESS &amp;&amp; blockIndex &lt; blockCount; ++blockIndex)</div>
-<div class="line"><a name="l13786"></a><span class="lineno">13786</span>&#160;    {</div>
-<div class="line"><a name="l13787"></a><span class="lineno">13787</span>&#160;        BlockInfo&amp; currBlockInfo = blockInfo[blockIndex];</div>
-<div class="line"><a name="l13788"></a><span class="lineno">13788</span>&#160;        VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l13789"></a><span class="lineno">13789</span>&#160;        <span class="keywordflow">if</span>((currBlockInfo.flags &amp; BLOCK_FLAG_USED) != 0)</div>
-<div class="line"><a name="l13790"></a><span class="lineno">13790</span>&#160;        {</div>
-<div class="line"><a name="l13791"></a><span class="lineno">13791</span>&#160;            currBlockInfo.pMappedData = pBlock-&gt;GetMappedData();</div>
-<div class="line"><a name="l13792"></a><span class="lineno">13792</span>&#160;            <span class="comment">// It is not originally mapped - map it.</span></div>
-<div class="line"><a name="l13793"></a><span class="lineno">13793</span>&#160;            <span class="keywordflow">if</span>(currBlockInfo.pMappedData == VMA_NULL)</div>
-<div class="line"><a name="l13794"></a><span class="lineno">13794</span>&#160;            {</div>
-<div class="line"><a name="l13795"></a><span class="lineno">13795</span>&#160;                pDefragCtx-&gt;res = pBlock-&gt;Map(m_hAllocator, 1, &amp;currBlockInfo.pMappedData);</div>
-<div class="line"><a name="l13796"></a><span class="lineno">13796</span>&#160;                <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</div>
-<div class="line"><a name="l13797"></a><span class="lineno">13797</span>&#160;                {</div>
-<div class="line"><a name="l13798"></a><span class="lineno">13798</span>&#160;                    currBlockInfo.flags |= BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION;</div>
-<div class="line"><a name="l13799"></a><span class="lineno">13799</span>&#160;                }</div>
-<div class="line"><a name="l13800"></a><span class="lineno">13800</span>&#160;            }</div>
-<div class="line"><a name="l13801"></a><span class="lineno">13801</span>&#160;        }</div>
-<div class="line"><a name="l13802"></a><span class="lineno">13802</span>&#160;    }</div>
-<div class="line"><a name="l13803"></a><span class="lineno">13803</span>&#160; </div>
-<div class="line"><a name="l13804"></a><span class="lineno">13804</span>&#160;    <span class="comment">// Go over all moves. Do actual data transfer.</span></div>
-<div class="line"><a name="l13805"></a><span class="lineno">13805</span>&#160;    <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</div>
-<div class="line"><a name="l13806"></a><span class="lineno">13806</span>&#160;    {</div>
-<div class="line"><a name="l13807"></a><span class="lineno">13807</span>&#160;        <span class="keyword">const</span> VkDeviceSize nonCoherentAtomSize = m_hAllocator-&gt;m_PhysicalDeviceProperties.limits.nonCoherentAtomSize;</div>
-<div class="line"><a name="l13808"></a><span class="lineno">13808</span>&#160;        VkMappedMemoryRange memRange = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE };</div>
-<div class="line"><a name="l13809"></a><span class="lineno">13809</span>&#160; </div>
-<div class="line"><a name="l13810"></a><span class="lineno">13810</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> moveIndex = 0; moveIndex &lt; moveCount; ++moveIndex)</div>
-<div class="line"><a name="l13811"></a><span class="lineno">13811</span>&#160;        {</div>
-<div class="line"><a name="l13812"></a><span class="lineno">13812</span>&#160;            <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</div>
-<div class="line"><a name="l13813"></a><span class="lineno">13813</span>&#160; </div>
-<div class="line"><a name="l13814"></a><span class="lineno">13814</span>&#160;            <span class="keyword">const</span> BlockInfo&amp; srcBlockInfo = blockInfo[move.srcBlockIndex];</div>
-<div class="line"><a name="l13815"></a><span class="lineno">13815</span>&#160;            <span class="keyword">const</span> BlockInfo&amp; dstBlockInfo = blockInfo[move.dstBlockIndex];</div>
-<div class="line"><a name="l13816"></a><span class="lineno">13816</span>&#160; </div>
-<div class="line"><a name="l13817"></a><span class="lineno">13817</span>&#160;            VMA_ASSERT(srcBlockInfo.pMappedData &amp;&amp; dstBlockInfo.pMappedData);</div>
-<div class="line"><a name="l13818"></a><span class="lineno">13818</span>&#160; </div>
-<div class="line"><a name="l13819"></a><span class="lineno">13819</span>&#160;            <span class="comment">// Invalidate source.</span></div>
-<div class="line"><a name="l13820"></a><span class="lineno">13820</span>&#160;            <span class="keywordflow">if</span>(isNonCoherent)</div>
-<div class="line"><a name="l13821"></a><span class="lineno">13821</span>&#160;            {</div>
-<div class="line"><a name="l13822"></a><span class="lineno">13822</span>&#160;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pSrcBlock = m_Blocks[move.srcBlockIndex];</div>
-<div class="line"><a name="l13823"></a><span class="lineno">13823</span>&#160;                memRange.memory = pSrcBlock-&gt;GetDeviceMemory();</div>
-<div class="line"><a name="l13824"></a><span class="lineno">13824</span>&#160;                memRange.offset = VmaAlignDown(move.srcOffset, nonCoherentAtomSize);</div>
-<div class="line"><a name="l13825"></a><span class="lineno">13825</span>&#160;                memRange.size = VMA_MIN(</div>
-<div class="line"><a name="l13826"></a><span class="lineno">13826</span>&#160;                    VmaAlignUp(move.size + (move.srcOffset - memRange.offset), nonCoherentAtomSize),</div>
-<div class="line"><a name="l13827"></a><span class="lineno">13827</span>&#160;                    pSrcBlock-&gt;m_pMetadata-&gt;GetSize() - memRange.offset);</div>
-<div class="line"><a name="l13828"></a><span class="lineno">13828</span>&#160;                (*m_hAllocator-&gt;GetVulkanFunctions().vkInvalidateMappedMemoryRanges)(m_hAllocator-&gt;m_hDevice, 1, &amp;memRange);</div>
-<div class="line"><a name="l13829"></a><span class="lineno">13829</span>&#160;            }</div>
-<div class="line"><a name="l13830"></a><span class="lineno">13830</span>&#160; </div>
-<div class="line"><a name="l13831"></a><span class="lineno">13831</span>&#160;            <span class="comment">// THE PLACE WHERE ACTUAL DATA COPY HAPPENS.</span></div>
-<div class="line"><a name="l13832"></a><span class="lineno">13832</span>&#160;            memmove(</div>
-<div class="line"><a name="l13833"></a><span class="lineno">13833</span>&#160;                <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(dstBlockInfo.pMappedData) + move.dstOffset,</div>
-<div class="line"><a name="l13834"></a><span class="lineno">13834</span>&#160;                <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(srcBlockInfo.pMappedData) + move.srcOffset,</div>
-<div class="line"><a name="l13835"></a><span class="lineno">13835</span>&#160;                <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(move.size));</div>
-<div class="line"><a name="l13836"></a><span class="lineno">13836</span>&#160; </div>
-<div class="line"><a name="l13837"></a><span class="lineno">13837</span>&#160;            <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</div>
-<div class="line"><a name="l13838"></a><span class="lineno">13838</span>&#160;            {</div>
-<div class="line"><a name="l13839"></a><span class="lineno">13839</span>&#160;                VmaWriteMagicValue(dstBlockInfo.pMappedData, move.dstOffset - VMA_DEBUG_MARGIN);</div>
-<div class="line"><a name="l13840"></a><span class="lineno">13840</span>&#160;                VmaWriteMagicValue(dstBlockInfo.pMappedData, move.dstOffset + move.size);</div>
-<div class="line"><a name="l13841"></a><span class="lineno">13841</span>&#160;            }</div>
-<div class="line"><a name="l13842"></a><span class="lineno">13842</span>&#160; </div>
-<div class="line"><a name="l13843"></a><span class="lineno">13843</span>&#160;            <span class="comment">// Flush destination.</span></div>
-<div class="line"><a name="l13844"></a><span class="lineno">13844</span>&#160;            <span class="keywordflow">if</span>(isNonCoherent)</div>
-<div class="line"><a name="l13845"></a><span class="lineno">13845</span>&#160;            {</div>
-<div class="line"><a name="l13846"></a><span class="lineno">13846</span>&#160;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pDstBlock = m_Blocks[move.dstBlockIndex];</div>
-<div class="line"><a name="l13847"></a><span class="lineno">13847</span>&#160;                memRange.memory = pDstBlock-&gt;GetDeviceMemory();</div>
-<div class="line"><a name="l13848"></a><span class="lineno">13848</span>&#160;                memRange.offset = VmaAlignDown(move.dstOffset, nonCoherentAtomSize);</div>
-<div class="line"><a name="l13849"></a><span class="lineno">13849</span>&#160;                memRange.size = VMA_MIN(</div>
-<div class="line"><a name="l13850"></a><span class="lineno">13850</span>&#160;                    VmaAlignUp(move.size + (move.dstOffset - memRange.offset), nonCoherentAtomSize),</div>
-<div class="line"><a name="l13851"></a><span class="lineno">13851</span>&#160;                    pDstBlock-&gt;m_pMetadata-&gt;GetSize() - memRange.offset);</div>
-<div class="line"><a name="l13852"></a><span class="lineno">13852</span>&#160;                (*m_hAllocator-&gt;GetVulkanFunctions().vkFlushMappedMemoryRanges)(m_hAllocator-&gt;m_hDevice, 1, &amp;memRange);</div>
-<div class="line"><a name="l13853"></a><span class="lineno">13853</span>&#160;            }</div>
-<div class="line"><a name="l13854"></a><span class="lineno">13854</span>&#160;        }</div>
-<div class="line"><a name="l13855"></a><span class="lineno">13855</span>&#160;    }</div>
-<div class="line"><a name="l13856"></a><span class="lineno">13856</span>&#160; </div>
-<div class="line"><a name="l13857"></a><span class="lineno">13857</span>&#160;    <span class="comment">// Go over all blocks in reverse order. Unmap those that were mapped just for defragmentation.</span></div>
-<div class="line"><a name="l13858"></a><span class="lineno">13858</span>&#160;    <span class="comment">// Regardless of pCtx-&gt;res == VK_SUCCESS.</span></div>
-<div class="line"><a name="l13859"></a><span class="lineno">13859</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = blockCount; blockIndex--; )</div>
-<div class="line"><a name="l13860"></a><span class="lineno">13860</span>&#160;    {</div>
-<div class="line"><a name="l13861"></a><span class="lineno">13861</span>&#160;        <span class="keyword">const</span> BlockInfo&amp; currBlockInfo = blockInfo[blockIndex];</div>
-<div class="line"><a name="l13862"></a><span class="lineno">13862</span>&#160;        <span class="keywordflow">if</span>((currBlockInfo.flags &amp; BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION) != 0)</div>
-<div class="line"><a name="l13863"></a><span class="lineno">13863</span>&#160;        {</div>
-<div class="line"><a name="l13864"></a><span class="lineno">13864</span>&#160;            VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l13865"></a><span class="lineno">13865</span>&#160;            pBlock-&gt;Unmap(m_hAllocator, 1);</div>
-<div class="line"><a name="l13866"></a><span class="lineno">13866</span>&#160;        }</div>
-<div class="line"><a name="l13867"></a><span class="lineno">13867</span>&#160;    }</div>
-<div class="line"><a name="l13868"></a><span class="lineno">13868</span>&#160;}</div>
-<div class="line"><a name="l13869"></a><span class="lineno">13869</span>&#160; </div>
-<div class="line"><a name="l13870"></a><span class="lineno">13870</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::ApplyDefragmentationMovesGpu(</div>
-<div class="line"><a name="l13871"></a><span class="lineno">13871</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pDefragCtx,</div>
-<div class="line"><a name="l13872"></a><span class="lineno">13872</span>&#160;    VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
-<div class="line"><a name="l13873"></a><span class="lineno">13873</span>&#160;    VkCommandBuffer commandBuffer)</div>
-<div class="line"><a name="l13874"></a><span class="lineno">13874</span>&#160;{</div>
-<div class="line"><a name="l13875"></a><span class="lineno">13875</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_Blocks.size();</div>
-<div class="line"><a name="l13876"></a><span class="lineno">13876</span>&#160; </div>
-<div class="line"><a name="l13877"></a><span class="lineno">13877</span>&#160;    pDefragCtx-&gt;blockContexts.resize(blockCount);</div>
-<div class="line"><a name="l13878"></a><span class="lineno">13878</span>&#160;    memset(pDefragCtx-&gt;blockContexts.data(), 0, blockCount * <span class="keyword">sizeof</span>(VmaBlockDefragmentationContext));</div>
-<div class="line"><a name="l13879"></a><span class="lineno">13879</span>&#160; </div>
-<div class="line"><a name="l13880"></a><span class="lineno">13880</span>&#160;    <span class="comment">// Go over all moves. Mark blocks that are used with BLOCK_FLAG_USED.</span></div>
-<div class="line"><a name="l13881"></a><span class="lineno">13881</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> moveCount = moves.size();</div>
-<div class="line"><a name="l13882"></a><span class="lineno">13882</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> moveIndex = 0; moveIndex &lt; moveCount; ++moveIndex)</div>
-<div class="line"><a name="l13883"></a><span class="lineno">13883</span>&#160;    {</div>
-<div class="line"><a name="l13884"></a><span class="lineno">13884</span>&#160;        <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</div>
-<div class="line"><a name="l13885"></a><span class="lineno">13885</span>&#160; </div>
-<div class="line"><a name="l13886"></a><span class="lineno">13886</span>&#160;        <span class="comment">//if(move.type == VMA_ALLOCATION_TYPE_UNKNOWN)</span></div>
-<div class="line"><a name="l13887"></a><span class="lineno">13887</span>&#160;        {</div>
-<div class="line"><a name="l13888"></a><span class="lineno">13888</span>&#160;            <span class="comment">// Old school move still require us to map the whole block</span></div>
-<div class="line"><a name="l13889"></a><span class="lineno">13889</span>&#160;            pDefragCtx-&gt;blockContexts[move.srcBlockIndex].flags |= VmaBlockDefragmentationContext::BLOCK_FLAG_USED;</div>
-<div class="line"><a name="l13890"></a><span class="lineno">13890</span>&#160;            pDefragCtx-&gt;blockContexts[move.dstBlockIndex].flags |= VmaBlockDefragmentationContext::BLOCK_FLAG_USED;</div>
-<div class="line"><a name="l13891"></a><span class="lineno">13891</span>&#160;        }</div>
-<div class="line"><a name="l13892"></a><span class="lineno">13892</span>&#160;    }</div>
-<div class="line"><a name="l13893"></a><span class="lineno">13893</span>&#160; </div>
-<div class="line"><a name="l13894"></a><span class="lineno">13894</span>&#160;    VMA_ASSERT(pDefragCtx-&gt;res == VK_SUCCESS);</div>
-<div class="line"><a name="l13895"></a><span class="lineno">13895</span>&#160; </div>
-<div class="line"><a name="l13896"></a><span class="lineno">13896</span>&#160;    <span class="comment">// Go over all blocks. Create and bind buffer for whole block if necessary.</span></div>
-<div class="line"><a name="l13897"></a><span class="lineno">13897</span>&#160;    {</div>
-<div class="line"><a name="l13898"></a><span class="lineno">13898</span>&#160;        VkBufferCreateInfo bufCreateInfo;</div>
-<div class="line"><a name="l13899"></a><span class="lineno">13899</span>&#160;        VmaFillGpuDefragmentationBufferCreateInfo(bufCreateInfo);</div>
-<div class="line"><a name="l13900"></a><span class="lineno">13900</span>&#160; </div>
-<div class="line"><a name="l13901"></a><span class="lineno">13901</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; pDefragCtx-&gt;res == VK_SUCCESS &amp;&amp; blockIndex &lt; blockCount; ++blockIndex)</div>
-<div class="line"><a name="l13902"></a><span class="lineno">13902</span>&#160;        {</div>
-<div class="line"><a name="l13903"></a><span class="lineno">13903</span>&#160;            VmaBlockDefragmentationContext&amp; currBlockCtx = pDefragCtx-&gt;blockContexts[blockIndex];</div>
-<div class="line"><a name="l13904"></a><span class="lineno">13904</span>&#160;            VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l13905"></a><span class="lineno">13905</span>&#160;            <span class="keywordflow">if</span>((currBlockCtx.flags &amp; VmaBlockDefragmentationContext::BLOCK_FLAG_USED) != 0)</div>
-<div class="line"><a name="l13906"></a><span class="lineno">13906</span>&#160;            {</div>
-<div class="line"><a name="l13907"></a><span class="lineno">13907</span>&#160;                bufCreateInfo.size = pBlock-&gt;m_pMetadata-&gt;GetSize();</div>
-<div class="line"><a name="l13908"></a><span class="lineno">13908</span>&#160;                pDefragCtx-&gt;res = (*m_hAllocator-&gt;GetVulkanFunctions().vkCreateBuffer)(</div>
-<div class="line"><a name="l13909"></a><span class="lineno">13909</span>&#160;                    m_hAllocator-&gt;m_hDevice, &amp;bufCreateInfo, m_hAllocator-&gt;GetAllocationCallbacks(), &amp;currBlockCtx.hBuffer);</div>
-<div class="line"><a name="l13910"></a><span class="lineno">13910</span>&#160;                <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</div>
-<div class="line"><a name="l13911"></a><span class="lineno">13911</span>&#160;                {</div>
-<div class="line"><a name="l13912"></a><span class="lineno">13912</span>&#160;                    pDefragCtx-&gt;res = (*m_hAllocator-&gt;GetVulkanFunctions().vkBindBufferMemory)(</div>
-<div class="line"><a name="l13913"></a><span class="lineno">13913</span>&#160;                        m_hAllocator-&gt;m_hDevice, currBlockCtx.hBuffer, pBlock-&gt;GetDeviceMemory(), 0);</div>
-<div class="line"><a name="l13914"></a><span class="lineno">13914</span>&#160;                }</div>
-<div class="line"><a name="l13915"></a><span class="lineno">13915</span>&#160;            }</div>
-<div class="line"><a name="l13916"></a><span class="lineno">13916</span>&#160;        }</div>
-<div class="line"><a name="l13917"></a><span class="lineno">13917</span>&#160;    }</div>
-<div class="line"><a name="l13918"></a><span class="lineno">13918</span>&#160; </div>
-<div class="line"><a name="l13919"></a><span class="lineno">13919</span>&#160;    <span class="comment">// Go over all moves. Post data transfer commands to command buffer.</span></div>
-<div class="line"><a name="l13920"></a><span class="lineno">13920</span>&#160;    <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</div>
-<div class="line"><a name="l13921"></a><span class="lineno">13921</span>&#160;    {</div>
-<div class="line"><a name="l13922"></a><span class="lineno">13922</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> moveIndex = 0; moveIndex &lt; moveCount; ++moveIndex)</div>
-<div class="line"><a name="l13923"></a><span class="lineno">13923</span>&#160;        {</div>
-<div class="line"><a name="l13924"></a><span class="lineno">13924</span>&#160;            <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</div>
-<div class="line"><a name="l13925"></a><span class="lineno">13925</span>&#160; </div>
-<div class="line"><a name="l13926"></a><span class="lineno">13926</span>&#160;            <span class="keyword">const</span> VmaBlockDefragmentationContext&amp; srcBlockCtx = pDefragCtx-&gt;blockContexts[move.srcBlockIndex];</div>
-<div class="line"><a name="l13927"></a><span class="lineno">13927</span>&#160;            <span class="keyword">const</span> VmaBlockDefragmentationContext&amp; dstBlockCtx = pDefragCtx-&gt;blockContexts[move.dstBlockIndex];</div>
-<div class="line"><a name="l13928"></a><span class="lineno">13928</span>&#160; </div>
-<div class="line"><a name="l13929"></a><span class="lineno">13929</span>&#160;            VMA_ASSERT(srcBlockCtx.hBuffer &amp;&amp; dstBlockCtx.hBuffer);</div>
-<div class="line"><a name="l13930"></a><span class="lineno">13930</span>&#160; </div>
-<div class="line"><a name="l13931"></a><span class="lineno">13931</span>&#160;            VkBufferCopy region = {</div>
-<div class="line"><a name="l13932"></a><span class="lineno">13932</span>&#160;                move.srcOffset,</div>
-<div class="line"><a name="l13933"></a><span class="lineno">13933</span>&#160;                move.dstOffset,</div>
-<div class="line"><a name="l13934"></a><span class="lineno">13934</span>&#160;                move.size };</div>
-<div class="line"><a name="l13935"></a><span class="lineno">13935</span>&#160;            (*m_hAllocator-&gt;GetVulkanFunctions().vkCmdCopyBuffer)(</div>
-<div class="line"><a name="l13936"></a><span class="lineno">13936</span>&#160;                commandBuffer, srcBlockCtx.hBuffer, dstBlockCtx.hBuffer, 1, &amp;region);</div>
-<div class="line"><a name="l13937"></a><span class="lineno">13937</span>&#160;        }</div>
-<div class="line"><a name="l13938"></a><span class="lineno">13938</span>&#160;    }</div>
-<div class="line"><a name="l13939"></a><span class="lineno">13939</span>&#160; </div>
-<div class="line"><a name="l13940"></a><span class="lineno">13940</span>&#160;    <span class="comment">// Save buffers to defrag context for later destruction.</span></div>
-<div class="line"><a name="l13941"></a><span class="lineno">13941</span>&#160;    <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS &amp;&amp; moveCount &gt; 0)</div>
-<div class="line"><a name="l13942"></a><span class="lineno">13942</span>&#160;    {</div>
-<div class="line"><a name="l13943"></a><span class="lineno">13943</span>&#160;        pDefragCtx-&gt;res = VK_NOT_READY;</div>
-<div class="line"><a name="l13944"></a><span class="lineno">13944</span>&#160;    }</div>
-<div class="line"><a name="l13945"></a><span class="lineno">13945</span>&#160;}</div>
-<div class="line"><a name="l13946"></a><span class="lineno">13946</span>&#160; </div>
-<div class="line"><a name="l13947"></a><span class="lineno">13947</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::FreeEmptyBlocks(<a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pDefragmentationStats)</div>
-<div class="line"><a name="l13948"></a><span class="lineno">13948</span>&#160;{</div>
-<div class="line"><a name="l13949"></a><span class="lineno">13949</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = m_Blocks.size(); blockIndex--; )</div>
-<div class="line"><a name="l13950"></a><span class="lineno">13950</span>&#160;    {</div>
-<div class="line"><a name="l13951"></a><span class="lineno">13951</span>&#160;        VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l13952"></a><span class="lineno">13952</span>&#160;        <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;IsEmpty())</div>
-<div class="line"><a name="l13953"></a><span class="lineno">13953</span>&#160;        {</div>
-<div class="line"><a name="l13954"></a><span class="lineno">13954</span>&#160;            <span class="keywordflow">if</span>(m_Blocks.size() &gt; m_MinBlockCount)</div>
-<div class="line"><a name="l13955"></a><span class="lineno">13955</span>&#160;            {</div>
-<div class="line"><a name="l13956"></a><span class="lineno">13956</span>&#160;                <span class="keywordflow">if</span>(pDefragmentationStats != VMA_NULL)</div>
-<div class="line"><a name="l13957"></a><span class="lineno">13957</span>&#160;                {</div>
-<div class="line"><a name="l13958"></a><span class="lineno">13958</span>&#160;                    ++pDefragmentationStats-&gt;<a class="code" href="struct_vma_defragmentation_stats.html#a0113f1877904a5d1ee8f409216ff276b">deviceMemoryBlocksFreed</a>;</div>
-<div class="line"><a name="l13959"></a><span class="lineno">13959</span>&#160;                    pDefragmentationStats-&gt;<a class="code" href="struct_vma_defragmentation_stats.html#ab0cb9ac0dbc106c77e384ea676422f28">bytesFreed</a> += pBlock-&gt;m_pMetadata-&gt;GetSize();</div>
-<div class="line"><a name="l13960"></a><span class="lineno">13960</span>&#160;                }</div>
-<div class="line"><a name="l13961"></a><span class="lineno">13961</span>&#160; </div>
-<div class="line"><a name="l13962"></a><span class="lineno">13962</span>&#160;                VmaVectorRemove(m_Blocks, blockIndex);</div>
-<div class="line"><a name="l13963"></a><span class="lineno">13963</span>&#160;                pBlock-&gt;Destroy(m_hAllocator);</div>
-<div class="line"><a name="l13964"></a><span class="lineno">13964</span>&#160;                vma_delete(m_hAllocator, pBlock);</div>
-<div class="line"><a name="l13965"></a><span class="lineno">13965</span>&#160;            }</div>
-<div class="line"><a name="l13966"></a><span class="lineno">13966</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l13967"></a><span class="lineno">13967</span>&#160;            {</div>
-<div class="line"><a name="l13968"></a><span class="lineno">13968</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l13969"></a><span class="lineno">13969</span>&#160;            }</div>
-<div class="line"><a name="l13970"></a><span class="lineno">13970</span>&#160;        }</div>
-<div class="line"><a name="l13971"></a><span class="lineno">13971</span>&#160;    }</div>
-<div class="line"><a name="l13972"></a><span class="lineno">13972</span>&#160;    UpdateHasEmptyBlock();</div>
-<div class="line"><a name="l13973"></a><span class="lineno">13973</span>&#160;}</div>
-<div class="line"><a name="l13974"></a><span class="lineno">13974</span>&#160; </div>
-<div class="line"><a name="l13975"></a><span class="lineno">13975</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::UpdateHasEmptyBlock()</div>
-<div class="line"><a name="l13976"></a><span class="lineno">13976</span>&#160;{</div>
-<div class="line"><a name="l13977"></a><span class="lineno">13977</span>&#160;    m_HasEmptyBlock = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l13978"></a><span class="lineno">13978</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> index = 0, count = m_Blocks.size(); index &lt; count; ++index)</div>
-<div class="line"><a name="l13979"></a><span class="lineno">13979</span>&#160;    {</div>
-<div class="line"><a name="l13980"></a><span class="lineno">13980</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[index];</div>
-<div class="line"><a name="l13981"></a><span class="lineno">13981</span>&#160;        <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;IsEmpty())</div>
-<div class="line"><a name="l13982"></a><span class="lineno">13982</span>&#160;        {</div>
-<div class="line"><a name="l13983"></a><span class="lineno">13983</span>&#160;            m_HasEmptyBlock = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l13984"></a><span class="lineno">13984</span>&#160;            <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l13985"></a><span class="lineno">13985</span>&#160;        }</div>
-<div class="line"><a name="l13986"></a><span class="lineno">13986</span>&#160;    }</div>
-<div class="line"><a name="l13987"></a><span class="lineno">13987</span>&#160;}</div>
-<div class="line"><a name="l13988"></a><span class="lineno">13988</span>&#160; </div>
-<div class="line"><a name="l13989"></a><span class="lineno">13989</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l13990"></a><span class="lineno">13990</span>&#160; </div>
-<div class="line"><a name="l13991"></a><span class="lineno">13991</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::PrintDetailedMap(<span class="keyword">class</span> VmaJsonWriter&amp; json)</div>
-<div class="line"><a name="l13992"></a><span class="lineno">13992</span>&#160;{</div>
-<div class="line"><a name="l13993"></a><span class="lineno">13993</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l13994"></a><span class="lineno">13994</span>&#160; </div>
-<div class="line"><a name="l13995"></a><span class="lineno">13995</span>&#160;    json.BeginObject();</div>
-<div class="line"><a name="l13996"></a><span class="lineno">13996</span>&#160; </div>
-<div class="line"><a name="l13997"></a><span class="lineno">13997</span>&#160;    <span class="keywordflow">if</span>(IsCustomPool())</div>
-<div class="line"><a name="l13998"></a><span class="lineno">13998</span>&#160;    {</div>
-<div class="line"><a name="l13999"></a><span class="lineno">13999</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span>* poolName = m_hParentPool-&gt;GetName();</div>
-<div class="line"><a name="l14000"></a><span class="lineno">14000</span>&#160;        <span class="keywordflow">if</span>(poolName != VMA_NULL &amp;&amp; poolName[0] != <span class="charliteral">&#39;\0&#39;</span>)</div>
-<div class="line"><a name="l14001"></a><span class="lineno">14001</span>&#160;        {</div>
-<div class="line"><a name="l14002"></a><span class="lineno">14002</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Name&quot;</span>);</div>
-<div class="line"><a name="l14003"></a><span class="lineno">14003</span>&#160;            json.WriteString(poolName);</div>
-<div class="line"><a name="l14004"></a><span class="lineno">14004</span>&#160;        }</div>
-<div class="line"><a name="l14005"></a><span class="lineno">14005</span>&#160; </div>
-<div class="line"><a name="l14006"></a><span class="lineno">14006</span>&#160;        json.WriteString(<span class="stringliteral">&quot;MemoryTypeIndex&quot;</span>);</div>
-<div class="line"><a name="l14007"></a><span class="lineno">14007</span>&#160;        json.WriteNumber(m_MemoryTypeIndex);</div>
-<div class="line"><a name="l14008"></a><span class="lineno">14008</span>&#160; </div>
-<div class="line"><a name="l14009"></a><span class="lineno">14009</span>&#160;        json.WriteString(<span class="stringliteral">&quot;BlockSize&quot;</span>);</div>
-<div class="line"><a name="l14010"></a><span class="lineno">14010</span>&#160;        json.WriteNumber(m_PreferredBlockSize);</div>
-<div class="line"><a name="l14011"></a><span class="lineno">14011</span>&#160; </div>
-<div class="line"><a name="l14012"></a><span class="lineno">14012</span>&#160;        json.WriteString(<span class="stringliteral">&quot;BlockCount&quot;</span>);</div>
-<div class="line"><a name="l14013"></a><span class="lineno">14013</span>&#160;        json.BeginObject(<span class="keyword">true</span>);</div>
-<div class="line"><a name="l14014"></a><span class="lineno">14014</span>&#160;        <span class="keywordflow">if</span>(m_MinBlockCount &gt; 0)</div>
-<div class="line"><a name="l14015"></a><span class="lineno">14015</span>&#160;        {</div>
-<div class="line"><a name="l14016"></a><span class="lineno">14016</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Min&quot;</span>);</div>
-<div class="line"><a name="l14017"></a><span class="lineno">14017</span>&#160;            json.WriteNumber((uint64_t)m_MinBlockCount);</div>
-<div class="line"><a name="l14018"></a><span class="lineno">14018</span>&#160;        }</div>
-<div class="line"><a name="l14019"></a><span class="lineno">14019</span>&#160;        <span class="keywordflow">if</span>(m_MaxBlockCount &lt; SIZE_MAX)</div>
-<div class="line"><a name="l14020"></a><span class="lineno">14020</span>&#160;        {</div>
-<div class="line"><a name="l14021"></a><span class="lineno">14021</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Max&quot;</span>);</div>
-<div class="line"><a name="l14022"></a><span class="lineno">14022</span>&#160;            json.WriteNumber((uint64_t)m_MaxBlockCount);</div>
-<div class="line"><a name="l14023"></a><span class="lineno">14023</span>&#160;        }</div>
-<div class="line"><a name="l14024"></a><span class="lineno">14024</span>&#160;        json.WriteString(<span class="stringliteral">&quot;Cur&quot;</span>);</div>
-<div class="line"><a name="l14025"></a><span class="lineno">14025</span>&#160;        json.WriteNumber((uint64_t)m_Blocks.size());</div>
-<div class="line"><a name="l14026"></a><span class="lineno">14026</span>&#160;        json.EndObject();</div>
-<div class="line"><a name="l14027"></a><span class="lineno">14027</span>&#160; </div>
-<div class="line"><a name="l14028"></a><span class="lineno">14028</span>&#160;        <span class="keywordflow">if</span>(m_FrameInUseCount &gt; 0)</div>
-<div class="line"><a name="l14029"></a><span class="lineno">14029</span>&#160;        {</div>
-<div class="line"><a name="l14030"></a><span class="lineno">14030</span>&#160;            json.WriteString(<span class="stringliteral">&quot;FrameInUseCount&quot;</span>);</div>
-<div class="line"><a name="l14031"></a><span class="lineno">14031</span>&#160;            json.WriteNumber(m_FrameInUseCount);</div>
-<div class="line"><a name="l14032"></a><span class="lineno">14032</span>&#160;        }</div>
-<div class="line"><a name="l14033"></a><span class="lineno">14033</span>&#160; </div>
-<div class="line"><a name="l14034"></a><span class="lineno">14034</span>&#160;        <span class="keywordflow">if</span>(m_Algorithm != 0)</div>
-<div class="line"><a name="l14035"></a><span class="lineno">14035</span>&#160;        {</div>
-<div class="line"><a name="l14036"></a><span class="lineno">14036</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Algorithm&quot;</span>);</div>
-<div class="line"><a name="l14037"></a><span class="lineno">14037</span>&#160;            json.WriteString(VmaAlgorithmToStr(m_Algorithm));</div>
-<div class="line"><a name="l14038"></a><span class="lineno">14038</span>&#160;        }</div>
-<div class="line"><a name="l14039"></a><span class="lineno">14039</span>&#160;    }</div>
-<div class="line"><a name="l14040"></a><span class="lineno">14040</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14041"></a><span class="lineno">14041</span>&#160;    {</div>
-<div class="line"><a name="l14042"></a><span class="lineno">14042</span>&#160;        json.WriteString(<span class="stringliteral">&quot;PreferredBlockSize&quot;</span>);</div>
-<div class="line"><a name="l14043"></a><span class="lineno">14043</span>&#160;        json.WriteNumber(m_PreferredBlockSize);</div>
-<div class="line"><a name="l14044"></a><span class="lineno">14044</span>&#160;    }</div>
-<div class="line"><a name="l14045"></a><span class="lineno">14045</span>&#160; </div>
-<div class="line"><a name="l14046"></a><span class="lineno">14046</span>&#160;    json.WriteString(<span class="stringliteral">&quot;Blocks&quot;</span>);</div>
-<div class="line"><a name="l14047"></a><span class="lineno">14047</span>&#160;    json.BeginObject();</div>
-<div class="line"><a name="l14048"></a><span class="lineno">14048</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; m_Blocks.size(); ++i)</div>
-<div class="line"><a name="l14049"></a><span class="lineno">14049</span>&#160;    {</div>
-<div class="line"><a name="l14050"></a><span class="lineno">14050</span>&#160;        json.BeginString();</div>
-<div class="line"><a name="l14051"></a><span class="lineno">14051</span>&#160;        json.ContinueString(m_Blocks[i]-&gt;GetId());</div>
-<div class="line"><a name="l14052"></a><span class="lineno">14052</span>&#160;        json.EndString();</div>
-<div class="line"><a name="l14053"></a><span class="lineno">14053</span>&#160; </div>
-<div class="line"><a name="l14054"></a><span class="lineno">14054</span>&#160;        m_Blocks[i]-&gt;m_pMetadata-&gt;PrintDetailedMap(json);</div>
-<div class="line"><a name="l14055"></a><span class="lineno">14055</span>&#160;    }</div>
-<div class="line"><a name="l14056"></a><span class="lineno">14056</span>&#160;    json.EndObject();</div>
-<div class="line"><a name="l14057"></a><span class="lineno">14057</span>&#160; </div>
-<div class="line"><a name="l14058"></a><span class="lineno">14058</span>&#160;    json.EndObject();</div>
-<div class="line"><a name="l14059"></a><span class="lineno">14059</span>&#160;}</div>
-<div class="line"><a name="l14060"></a><span class="lineno">14060</span>&#160; </div>
-<div class="line"><a name="l14061"></a><span class="lineno">14061</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l14062"></a><span class="lineno">14062</span>&#160; </div>
-<div class="line"><a name="l14063"></a><span class="lineno">14063</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::Defragment(</div>
-<div class="line"><a name="l14064"></a><span class="lineno">14064</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pCtx,</div>
-<div class="line"><a name="l14065"></a><span class="lineno">14065</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats, <a class="code" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> flags,</div>
-<div class="line"><a name="l14066"></a><span class="lineno">14066</span>&#160;    VkDeviceSize&amp; maxCpuBytesToMove, uint32_t&amp; maxCpuAllocationsToMove,</div>
-<div class="line"><a name="l14067"></a><span class="lineno">14067</span>&#160;    VkDeviceSize&amp; maxGpuBytesToMove, uint32_t&amp; maxGpuAllocationsToMove,</div>
-<div class="line"><a name="l14068"></a><span class="lineno">14068</span>&#160;    VkCommandBuffer commandBuffer)</div>
-<div class="line"><a name="l14069"></a><span class="lineno">14069</span>&#160;{</div>
-<div class="line"><a name="l14070"></a><span class="lineno">14070</span>&#160;    pCtx-&gt;res = VK_SUCCESS;</div>
-<div class="line"><a name="l14071"></a><span class="lineno">14071</span>&#160; </div>
-<div class="line"><a name="l14072"></a><span class="lineno">14072</span>&#160;    <span class="keyword">const</span> VkMemoryPropertyFlags memPropFlags =</div>
-<div class="line"><a name="l14073"></a><span class="lineno">14073</span>&#160;        m_hAllocator-&gt;m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags;</div>
-<div class="line"><a name="l14074"></a><span class="lineno">14074</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> isHostVisible = (memPropFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0;</div>
-<div class="line"><a name="l14075"></a><span class="lineno">14075</span>&#160; </div>
-<div class="line"><a name="l14076"></a><span class="lineno">14076</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> canDefragmentOnCpu = maxCpuBytesToMove &gt; 0 &amp;&amp; maxCpuAllocationsToMove &gt; 0 &amp;&amp;</div>
-<div class="line"><a name="l14077"></a><span class="lineno">14077</span>&#160;        isHostVisible;</div>
-<div class="line"><a name="l14078"></a><span class="lineno">14078</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> canDefragmentOnGpu = maxGpuBytesToMove &gt; 0 &amp;&amp; maxGpuAllocationsToMove &gt; 0 &amp;&amp;</div>
-<div class="line"><a name="l14079"></a><span class="lineno">14079</span>&#160;        !IsCorruptionDetectionEnabled() &amp;&amp;</div>
-<div class="line"><a name="l14080"></a><span class="lineno">14080</span>&#160;        ((1u &lt;&lt; m_MemoryTypeIndex) &amp; m_hAllocator-&gt;GetGpuDefragmentationMemoryTypeBits()) != 0;</div>
-<div class="line"><a name="l14081"></a><span class="lineno">14081</span>&#160; </div>
-<div class="line"><a name="l14082"></a><span class="lineno">14082</span>&#160;    <span class="comment">// There are options to defragment this memory type.</span></div>
-<div class="line"><a name="l14083"></a><span class="lineno">14083</span>&#160;    <span class="keywordflow">if</span>(canDefragmentOnCpu || canDefragmentOnGpu)</div>
-<div class="line"><a name="l14084"></a><span class="lineno">14084</span>&#160;    {</div>
-<div class="line"><a name="l14085"></a><span class="lineno">14085</span>&#160;        <span class="keywordtype">bool</span> defragmentOnGpu;</div>
-<div class="line"><a name="l14086"></a><span class="lineno">14086</span>&#160;        <span class="comment">// There is only one option to defragment this memory type.</span></div>
-<div class="line"><a name="l14087"></a><span class="lineno">14087</span>&#160;        <span class="keywordflow">if</span>(canDefragmentOnGpu != canDefragmentOnCpu)</div>
-<div class="line"><a name="l14088"></a><span class="lineno">14088</span>&#160;        {</div>
-<div class="line"><a name="l14089"></a><span class="lineno">14089</span>&#160;            defragmentOnGpu = canDefragmentOnGpu;</div>
-<div class="line"><a name="l14090"></a><span class="lineno">14090</span>&#160;        }</div>
-<div class="line"><a name="l14091"></a><span class="lineno">14091</span>&#160;        <span class="comment">// Both options are available: Heuristics to choose the best one.</span></div>
-<div class="line"><a name="l14092"></a><span class="lineno">14092</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14093"></a><span class="lineno">14093</span>&#160;        {</div>
-<div class="line"><a name="l14094"></a><span class="lineno">14094</span>&#160;            defragmentOnGpu = (memPropFlags &amp; VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) != 0 ||</div>
-<div class="line"><a name="l14095"></a><span class="lineno">14095</span>&#160;                m_hAllocator-&gt;IsIntegratedGpu();</div>
-<div class="line"><a name="l14096"></a><span class="lineno">14096</span>&#160;        }</div>
-<div class="line"><a name="l14097"></a><span class="lineno">14097</span>&#160; </div>
-<div class="line"><a name="l14098"></a><span class="lineno">14098</span>&#160;        <span class="keywordtype">bool</span> overlappingMoveSupported = !defragmentOnGpu;</div>
-<div class="line"><a name="l14099"></a><span class="lineno">14099</span>&#160; </div>
-<div class="line"><a name="l14100"></a><span class="lineno">14100</span>&#160;        <span class="keywordflow">if</span>(m_hAllocator-&gt;m_UseMutex)</div>
-<div class="line"><a name="l14101"></a><span class="lineno">14101</span>&#160;        {</div>
-<div class="line"><a name="l14102"></a><span class="lineno">14102</span>&#160;            <span class="keywordflow">if</span>(flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a>)</div>
-<div class="line"><a name="l14103"></a><span class="lineno">14103</span>&#160;            {</div>
-<div class="line"><a name="l14104"></a><span class="lineno">14104</span>&#160;                <span class="keywordflow">if</span>(!m_Mutex.TryLockWrite())</div>
-<div class="line"><a name="l14105"></a><span class="lineno">14105</span>&#160;                {</div>
-<div class="line"><a name="l14106"></a><span class="lineno">14106</span>&#160;                    pCtx-&gt;res = VK_ERROR_INITIALIZATION_FAILED;</div>
-<div class="line"><a name="l14107"></a><span class="lineno">14107</span>&#160;                    <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l14108"></a><span class="lineno">14108</span>&#160;                }</div>
-<div class="line"><a name="l14109"></a><span class="lineno">14109</span>&#160;            }</div>
-<div class="line"><a name="l14110"></a><span class="lineno">14110</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14111"></a><span class="lineno">14111</span>&#160;            {</div>
-<div class="line"><a name="l14112"></a><span class="lineno">14112</span>&#160;                m_Mutex.LockWrite();</div>
-<div class="line"><a name="l14113"></a><span class="lineno">14113</span>&#160;                pCtx-&gt;mutexLocked = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l14114"></a><span class="lineno">14114</span>&#160;            }</div>
-<div class="line"><a name="l14115"></a><span class="lineno">14115</span>&#160;        }</div>
-<div class="line"><a name="l14116"></a><span class="lineno">14116</span>&#160; </div>
-<div class="line"><a name="l14117"></a><span class="lineno">14117</span>&#160;        pCtx-&gt;Begin(overlappingMoveSupported, flags);</div>
-<div class="line"><a name="l14118"></a><span class="lineno">14118</span>&#160; </div>
-<div class="line"><a name="l14119"></a><span class="lineno">14119</span>&#160;        <span class="comment">// Defragment.</span></div>
-<div class="line"><a name="l14120"></a><span class="lineno">14120</span>&#160; </div>
-<div class="line"><a name="l14121"></a><span class="lineno">14121</span>&#160;        <span class="keyword">const</span> VkDeviceSize maxBytesToMove = defragmentOnGpu ? maxGpuBytesToMove : maxCpuBytesToMove;</div>
-<div class="line"><a name="l14122"></a><span class="lineno">14122</span>&#160;        <span class="keyword">const</span> uint32_t maxAllocationsToMove = defragmentOnGpu ? maxGpuAllocationsToMove : maxCpuAllocationsToMove;</div>
-<div class="line"><a name="l14123"></a><span class="lineno">14123</span>&#160;        pCtx-&gt;res = pCtx-&gt;GetAlgorithm()-&gt;Defragment(pCtx-&gt;defragmentationMoves, maxBytesToMove, maxAllocationsToMove, flags);</div>
-<div class="line"><a name="l14124"></a><span class="lineno">14124</span>&#160; </div>
-<div class="line"><a name="l14125"></a><span class="lineno">14125</span>&#160;        <span class="comment">// Accumulate statistics.</span></div>
-<div class="line"><a name="l14126"></a><span class="lineno">14126</span>&#160;        <span class="keywordflow">if</span>(pStats != VMA_NULL)</div>
-<div class="line"><a name="l14127"></a><span class="lineno">14127</span>&#160;        {</div>
-<div class="line"><a name="l14128"></a><span class="lineno">14128</span>&#160;            <span class="keyword">const</span> VkDeviceSize bytesMoved = pCtx-&gt;GetAlgorithm()-&gt;GetBytesMoved();</div>
-<div class="line"><a name="l14129"></a><span class="lineno">14129</span>&#160;            <span class="keyword">const</span> uint32_t allocationsMoved = pCtx-&gt;GetAlgorithm()-&gt;GetAllocationsMoved();</div>
-<div class="line"><a name="l14130"></a><span class="lineno">14130</span>&#160;            pStats-&gt;<a class="code" href="struct_vma_defragmentation_stats.html#a36f9d5df2a10ba2a36b16e126d60572d">bytesMoved</a> += bytesMoved;</div>
-<div class="line"><a name="l14131"></a><span class="lineno">14131</span>&#160;            pStats-&gt;<a class="code" href="struct_vma_defragmentation_stats.html#aefeabf130022008eadd75999478af3f9">allocationsMoved</a> += allocationsMoved;</div>
-<div class="line"><a name="l14132"></a><span class="lineno">14132</span>&#160;            VMA_ASSERT(bytesMoved &lt;= maxBytesToMove);</div>
-<div class="line"><a name="l14133"></a><span class="lineno">14133</span>&#160;            VMA_ASSERT(allocationsMoved &lt;= maxAllocationsToMove);</div>
-<div class="line"><a name="l14134"></a><span class="lineno">14134</span>&#160;            <span class="keywordflow">if</span>(defragmentOnGpu)</div>
-<div class="line"><a name="l14135"></a><span class="lineno">14135</span>&#160;            {</div>
-<div class="line"><a name="l14136"></a><span class="lineno">14136</span>&#160;                maxGpuBytesToMove -= bytesMoved;</div>
-<div class="line"><a name="l14137"></a><span class="lineno">14137</span>&#160;                maxGpuAllocationsToMove -= allocationsMoved;</div>
-<div class="line"><a name="l14138"></a><span class="lineno">14138</span>&#160;            }</div>
-<div class="line"><a name="l14139"></a><span class="lineno">14139</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14140"></a><span class="lineno">14140</span>&#160;            {</div>
-<div class="line"><a name="l14141"></a><span class="lineno">14141</span>&#160;                maxCpuBytesToMove -= bytesMoved;</div>
-<div class="line"><a name="l14142"></a><span class="lineno">14142</span>&#160;                maxCpuAllocationsToMove -= allocationsMoved;</div>
-<div class="line"><a name="l14143"></a><span class="lineno">14143</span>&#160;            }</div>
-<div class="line"><a name="l14144"></a><span class="lineno">14144</span>&#160;        }</div>
-<div class="line"><a name="l14145"></a><span class="lineno">14145</span>&#160; </div>
-<div class="line"><a name="l14146"></a><span class="lineno">14146</span>&#160;        <span class="keywordflow">if</span>(flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a>)</div>
-<div class="line"><a name="l14147"></a><span class="lineno">14147</span>&#160;        {</div>
-<div class="line"><a name="l14148"></a><span class="lineno">14148</span>&#160;            <span class="keywordflow">if</span>(m_hAllocator-&gt;m_UseMutex)</div>
-<div class="line"><a name="l14149"></a><span class="lineno">14149</span>&#160;                m_Mutex.UnlockWrite();</div>
-<div class="line"><a name="l14150"></a><span class="lineno">14150</span>&#160; </div>
-<div class="line"><a name="l14151"></a><span class="lineno">14151</span>&#160;            <span class="keywordflow">if</span>(pCtx-&gt;res &gt;= VK_SUCCESS &amp;&amp; !pCtx-&gt;defragmentationMoves.empty())</div>
-<div class="line"><a name="l14152"></a><span class="lineno">14152</span>&#160;                pCtx-&gt;res = VK_NOT_READY;</div>
-<div class="line"><a name="l14153"></a><span class="lineno">14153</span>&#160; </div>
-<div class="line"><a name="l14154"></a><span class="lineno">14154</span>&#160;            <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l14155"></a><span class="lineno">14155</span>&#160;        }</div>
-<div class="line"><a name="l14156"></a><span class="lineno">14156</span>&#160; </div>
-<div class="line"><a name="l14157"></a><span class="lineno">14157</span>&#160;        <span class="keywordflow">if</span>(pCtx-&gt;res &gt;= VK_SUCCESS)</div>
-<div class="line"><a name="l14158"></a><span class="lineno">14158</span>&#160;        {</div>
-<div class="line"><a name="l14159"></a><span class="lineno">14159</span>&#160;            <span class="keywordflow">if</span>(defragmentOnGpu)</div>
-<div class="line"><a name="l14160"></a><span class="lineno">14160</span>&#160;            {</div>
-<div class="line"><a name="l14161"></a><span class="lineno">14161</span>&#160;                ApplyDefragmentationMovesGpu(pCtx, pCtx-&gt;defragmentationMoves, commandBuffer);</div>
-<div class="line"><a name="l14162"></a><span class="lineno">14162</span>&#160;            }</div>
-<div class="line"><a name="l14163"></a><span class="lineno">14163</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14164"></a><span class="lineno">14164</span>&#160;            {</div>
-<div class="line"><a name="l14165"></a><span class="lineno">14165</span>&#160;                ApplyDefragmentationMovesCpu(pCtx, pCtx-&gt;defragmentationMoves);</div>
-<div class="line"><a name="l14166"></a><span class="lineno">14166</span>&#160;            }</div>
-<div class="line"><a name="l14167"></a><span class="lineno">14167</span>&#160;        }</div>
-<div class="line"><a name="l14168"></a><span class="lineno">14168</span>&#160;    }</div>
-<div class="line"><a name="l14169"></a><span class="lineno">14169</span>&#160;}</div>
-<div class="line"><a name="l14170"></a><span class="lineno">14170</span>&#160; </div>
-<div class="line"><a name="l14171"></a><span class="lineno">14171</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::DefragmentationEnd(</div>
-<div class="line"><a name="l14172"></a><span class="lineno">14172</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pCtx,</div>
-<div class="line"><a name="l14173"></a><span class="lineno">14173</span>&#160;    uint32_t flags,</div>
-<div class="line"><a name="l14174"></a><span class="lineno">14174</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats)</div>
-<div class="line"><a name="l14175"></a><span class="lineno">14175</span>&#160;{</div>
-<div class="line"><a name="l14176"></a><span class="lineno">14176</span>&#160;    <span class="keywordflow">if</span>(flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a> &amp;&amp; m_hAllocator-&gt;m_UseMutex)</div>
-<div class="line"><a name="l14177"></a><span class="lineno">14177</span>&#160;    {</div>
-<div class="line"><a name="l14178"></a><span class="lineno">14178</span>&#160;        VMA_ASSERT(pCtx-&gt;mutexLocked == <span class="keyword">false</span>);</div>
-<div class="line"><a name="l14179"></a><span class="lineno">14179</span>&#160; </div>
-<div class="line"><a name="l14180"></a><span class="lineno">14180</span>&#160;        <span class="comment">// Incremental defragmentation doesn&#39;t hold the lock, so when we enter here we don&#39;t actually have any</span></div>
-<div class="line"><a name="l14181"></a><span class="lineno">14181</span>&#160;        <span class="comment">// lock protecting us. Since we mutate state here, we have to take the lock out now</span></div>
-<div class="line"><a name="l14182"></a><span class="lineno">14182</span>&#160;        m_Mutex.LockWrite();</div>
-<div class="line"><a name="l14183"></a><span class="lineno">14183</span>&#160;        pCtx-&gt;mutexLocked = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l14184"></a><span class="lineno">14184</span>&#160;    }</div>
-<div class="line"><a name="l14185"></a><span class="lineno">14185</span>&#160; </div>
-<div class="line"><a name="l14186"></a><span class="lineno">14186</span>&#160;    <span class="comment">// If the mutex isn&#39;t locked we didn&#39;t do any work and there is nothing to delete.</span></div>
-<div class="line"><a name="l14187"></a><span class="lineno">14187</span>&#160;    <span class="keywordflow">if</span>(pCtx-&gt;mutexLocked || !m_hAllocator-&gt;m_UseMutex)</div>
-<div class="line"><a name="l14188"></a><span class="lineno">14188</span>&#160;    {</div>
-<div class="line"><a name="l14189"></a><span class="lineno">14189</span>&#160;        <span class="comment">// Destroy buffers.</span></div>
-<div class="line"><a name="l14190"></a><span class="lineno">14190</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = pCtx-&gt;blockContexts.size(); blockIndex--;)</div>
-<div class="line"><a name="l14191"></a><span class="lineno">14191</span>&#160;        {</div>
-<div class="line"><a name="l14192"></a><span class="lineno">14192</span>&#160;            VmaBlockDefragmentationContext &amp;blockCtx = pCtx-&gt;blockContexts[blockIndex];</div>
-<div class="line"><a name="l14193"></a><span class="lineno">14193</span>&#160;            <span class="keywordflow">if</span>(blockCtx.hBuffer)</div>
-<div class="line"><a name="l14194"></a><span class="lineno">14194</span>&#160;            {</div>
-<div class="line"><a name="l14195"></a><span class="lineno">14195</span>&#160;                (*m_hAllocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(m_hAllocator-&gt;m_hDevice, blockCtx.hBuffer, m_hAllocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l14196"></a><span class="lineno">14196</span>&#160;            }</div>
-<div class="line"><a name="l14197"></a><span class="lineno">14197</span>&#160;        }</div>
-<div class="line"><a name="l14198"></a><span class="lineno">14198</span>&#160; </div>
-<div class="line"><a name="l14199"></a><span class="lineno">14199</span>&#160;        <span class="keywordflow">if</span>(pCtx-&gt;res &gt;= VK_SUCCESS)</div>
-<div class="line"><a name="l14200"></a><span class="lineno">14200</span>&#160;        {</div>
-<div class="line"><a name="l14201"></a><span class="lineno">14201</span>&#160;            FreeEmptyBlocks(pStats);</div>
-<div class="line"><a name="l14202"></a><span class="lineno">14202</span>&#160;        }</div>
-<div class="line"><a name="l14203"></a><span class="lineno">14203</span>&#160;    }</div>
-<div class="line"><a name="l14204"></a><span class="lineno">14204</span>&#160; </div>
-<div class="line"><a name="l14205"></a><span class="lineno">14205</span>&#160;    <span class="keywordflow">if</span>(pCtx-&gt;mutexLocked)</div>
-<div class="line"><a name="l14206"></a><span class="lineno">14206</span>&#160;    {</div>
-<div class="line"><a name="l14207"></a><span class="lineno">14207</span>&#160;        VMA_ASSERT(m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l14208"></a><span class="lineno">14208</span>&#160;        m_Mutex.UnlockWrite();</div>
-<div class="line"><a name="l14209"></a><span class="lineno">14209</span>&#160;    }</div>
-<div class="line"><a name="l14210"></a><span class="lineno">14210</span>&#160;}</div>
-<div class="line"><a name="l14211"></a><span class="lineno">14211</span>&#160; </div>
-<div class="line"><a name="l14212"></a><span class="lineno">14212</span>&#160;uint32_t VmaBlockVector::ProcessDefragmentations(</div>
-<div class="line"><a name="l14213"></a><span class="lineno">14213</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext *pCtx,</div>
-<div class="line"><a name="l14214"></a><span class="lineno">14214</span>&#160;    <a class="code" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a>* pMove, uint32_t maxMoves)</div>
-<div class="line"><a name="l14215"></a><span class="lineno">14215</span>&#160;{</div>
-<div class="line"><a name="l14216"></a><span class="lineno">14216</span>&#160;    VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l14217"></a><span class="lineno">14217</span>&#160; </div>
-<div class="line"><a name="l14218"></a><span class="lineno">14218</span>&#160;    <span class="keyword">const</span> uint32_t moveCount = VMA_MIN(uint32_t(pCtx-&gt;defragmentationMoves.size()) - pCtx-&gt;defragmentationMovesProcessed, maxMoves);</div>
-<div class="line"><a name="l14219"></a><span class="lineno">14219</span>&#160; </div>
-<div class="line"><a name="l14220"></a><span class="lineno">14220</span>&#160;    <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; moveCount; ++ i)</div>
-<div class="line"><a name="l14221"></a><span class="lineno">14221</span>&#160;    {</div>
-<div class="line"><a name="l14222"></a><span class="lineno">14222</span>&#160;        VmaDefragmentationMove&amp; move = pCtx-&gt;defragmentationMoves[pCtx-&gt;defragmentationMovesProcessed + i];</div>
-<div class="line"><a name="l14223"></a><span class="lineno">14223</span>&#160; </div>
-<div class="line"><a name="l14224"></a><span class="lineno">14224</span>&#160;        pMove-&gt;<a class="code" href="struct_vma_defragmentation_pass_move_info.html#ae885c861c2dd8d622e6c19e281d035cc">allocation</a> = move.hAllocation;</div>
-<div class="line"><a name="l14225"></a><span class="lineno">14225</span>&#160;        pMove-&gt;<a class="code" href="struct_vma_defragmentation_pass_move_info.html#a06eb0c8690aa0d3478a036753492e769">memory</a> = move.pDstBlock-&gt;GetDeviceMemory();</div>
-<div class="line"><a name="l14226"></a><span class="lineno">14226</span>&#160;        pMove-&gt;<a class="code" href="struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6">offset</a> = move.dstOffset;</div>
-<div class="line"><a name="l14227"></a><span class="lineno">14227</span>&#160; </div>
-<div class="line"><a name="l14228"></a><span class="lineno">14228</span>&#160;        ++ pMove;</div>
-<div class="line"><a name="l14229"></a><span class="lineno">14229</span>&#160;    }</div>
-<div class="line"><a name="l14230"></a><span class="lineno">14230</span>&#160; </div>
-<div class="line"><a name="l14231"></a><span class="lineno">14231</span>&#160;    pCtx-&gt;defragmentationMovesProcessed += moveCount;</div>
-<div class="line"><a name="l14232"></a><span class="lineno">14232</span>&#160; </div>
-<div class="line"><a name="l14233"></a><span class="lineno">14233</span>&#160;    <span class="keywordflow">return</span> moveCount;</div>
-<div class="line"><a name="l14234"></a><span class="lineno">14234</span>&#160;}</div>
-<div class="line"><a name="l14235"></a><span class="lineno">14235</span>&#160; </div>
-<div class="line"><a name="l14236"></a><span class="lineno">14236</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::CommitDefragmentations(</div>
-<div class="line"><a name="l14237"></a><span class="lineno">14237</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext *pCtx,</div>
-<div class="line"><a name="l14238"></a><span class="lineno">14238</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats)</div>
-<div class="line"><a name="l14239"></a><span class="lineno">14239</span>&#160;{</div>
-<div class="line"><a name="l14240"></a><span class="lineno">14240</span>&#160;    VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l14241"></a><span class="lineno">14241</span>&#160; </div>
-<div class="line"><a name="l14242"></a><span class="lineno">14242</span>&#160;    <span class="keywordflow">for</span>(uint32_t i = pCtx-&gt;defragmentationMovesCommitted; i &lt; pCtx-&gt;defragmentationMovesProcessed; ++ i)</div>
-<div class="line"><a name="l14243"></a><span class="lineno">14243</span>&#160;    {</div>
-<div class="line"><a name="l14244"></a><span class="lineno">14244</span>&#160;        <span class="keyword">const</span> VmaDefragmentationMove &amp;move = pCtx-&gt;defragmentationMoves[i];</div>
-<div class="line"><a name="l14245"></a><span class="lineno">14245</span>&#160; </div>
-<div class="line"><a name="l14246"></a><span class="lineno">14246</span>&#160;        move.pSrcBlock-&gt;m_pMetadata-&gt;FreeAtOffset(move.srcOffset);</div>
-<div class="line"><a name="l14247"></a><span class="lineno">14247</span>&#160;        move.hAllocation-&gt;ChangeBlockAllocation(m_hAllocator, move.pDstBlock, move.dstOffset);</div>
-<div class="line"><a name="l14248"></a><span class="lineno">14248</span>&#160;    }</div>
-<div class="line"><a name="l14249"></a><span class="lineno">14249</span>&#160; </div>
-<div class="line"><a name="l14250"></a><span class="lineno">14250</span>&#160;    pCtx-&gt;defragmentationMovesCommitted = pCtx-&gt;defragmentationMovesProcessed;</div>
-<div class="line"><a name="l14251"></a><span class="lineno">14251</span>&#160;    FreeEmptyBlocks(pStats);</div>
-<div class="line"><a name="l14252"></a><span class="lineno">14252</span>&#160;}</div>
-<div class="line"><a name="l14253"></a><span class="lineno">14253</span>&#160; </div>
-<div class="line"><a name="l14254"></a><span class="lineno">14254</span>&#160;<span class="keywordtype">size_t</span> VmaBlockVector::CalcAllocationCount()<span class="keyword"> const</span></div>
-<div class="line"><a name="l14255"></a><span class="lineno">14255</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l14256"></a><span class="lineno">14256</span>&#160;    <span class="keywordtype">size_t</span> result = 0;</div>
-<div class="line"><a name="l14257"></a><span class="lineno">14257</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; m_Blocks.size(); ++i)</div>
-<div class="line"><a name="l14258"></a><span class="lineno">14258</span>&#160;    {</div>
-<div class="line"><a name="l14259"></a><span class="lineno">14259</span>&#160;        result += m_Blocks[i]-&gt;m_pMetadata-&gt;GetAllocationCount();</div>
-<div class="line"><a name="l14260"></a><span class="lineno">14260</span>&#160;    }</div>
-<div class="line"><a name="l14261"></a><span class="lineno">14261</span>&#160;    <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l14262"></a><span class="lineno">14262</span>&#160;}</div>
-<div class="line"><a name="l14263"></a><span class="lineno">14263</span>&#160; </div>
-<div class="line"><a name="l14264"></a><span class="lineno">14264</span>&#160;<span class="keywordtype">bool</span> VmaBlockVector::IsBufferImageGranularityConflictPossible()<span class="keyword"> const</span></div>
-<div class="line"><a name="l14265"></a><span class="lineno">14265</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l14266"></a><span class="lineno">14266</span>&#160;    <span class="keywordflow">if</span>(m_BufferImageGranularity == 1)</div>
-<div class="line"><a name="l14267"></a><span class="lineno">14267</span>&#160;    {</div>
-<div class="line"><a name="l14268"></a><span class="lineno">14268</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l14269"></a><span class="lineno">14269</span>&#160;    }</div>
-<div class="line"><a name="l14270"></a><span class="lineno">14270</span>&#160;    VmaSuballocationType lastSuballocType = VMA_SUBALLOCATION_TYPE_FREE;</div>
-<div class="line"><a name="l14271"></a><span class="lineno">14271</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0, count = m_Blocks.size(); i &lt; count; ++i)</div>
-<div class="line"><a name="l14272"></a><span class="lineno">14272</span>&#160;    {</div>
-<div class="line"><a name="l14273"></a><span class="lineno">14273</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[i];</div>
-<div class="line"><a name="l14274"></a><span class="lineno">14274</span>&#160;        VMA_ASSERT(m_Algorithm == 0);</div>
-<div class="line"><a name="l14275"></a><span class="lineno">14275</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pMetadata = (VmaBlockMetadata_Generic*)pBlock-&gt;m_pMetadata;</div>
-<div class="line"><a name="l14276"></a><span class="lineno">14276</span>&#160;        <span class="keywordflow">if</span>(pMetadata-&gt;IsBufferImageGranularityConflictPossible(m_BufferImageGranularity, lastSuballocType))</div>
-<div class="line"><a name="l14277"></a><span class="lineno">14277</span>&#160;        {</div>
-<div class="line"><a name="l14278"></a><span class="lineno">14278</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l14279"></a><span class="lineno">14279</span>&#160;        }</div>
-<div class="line"><a name="l14280"></a><span class="lineno">14280</span>&#160;    }</div>
-<div class="line"><a name="l14281"></a><span class="lineno">14281</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l14282"></a><span class="lineno">14282</span>&#160;}</div>
-<div class="line"><a name="l14283"></a><span class="lineno">14283</span>&#160; </div>
-<div class="line"><a name="l14284"></a><span class="lineno">14284</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::MakePoolAllocationsLost(</div>
-<div class="line"><a name="l14285"></a><span class="lineno">14285</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l14286"></a><span class="lineno">14286</span>&#160;    <span class="keywordtype">size_t</span>* pLostAllocationCount)</div>
-<div class="line"><a name="l14287"></a><span class="lineno">14287</span>&#160;{</div>
-<div class="line"><a name="l14288"></a><span class="lineno">14288</span>&#160;    VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l14289"></a><span class="lineno">14289</span>&#160;    <span class="keywordtype">size_t</span> lostAllocationCount = 0;</div>
-<div class="line"><a name="l14290"></a><span class="lineno">14290</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</div>
-<div class="line"><a name="l14291"></a><span class="lineno">14291</span>&#160;    {</div>
-<div class="line"><a name="l14292"></a><span class="lineno">14292</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l14293"></a><span class="lineno">14293</span>&#160;        VMA_ASSERT(pBlock);</div>
-<div class="line"><a name="l14294"></a><span class="lineno">14294</span>&#160;        lostAllocationCount += pBlock-&gt;m_pMetadata-&gt;MakeAllocationsLost(currentFrameIndex, m_FrameInUseCount);</div>
-<div class="line"><a name="l14295"></a><span class="lineno">14295</span>&#160;    }</div>
-<div class="line"><a name="l14296"></a><span class="lineno">14296</span>&#160;    <span class="keywordflow">if</span>(pLostAllocationCount != VMA_NULL)</div>
-<div class="line"><a name="l14297"></a><span class="lineno">14297</span>&#160;    {</div>
-<div class="line"><a name="l14298"></a><span class="lineno">14298</span>&#160;        *pLostAllocationCount = lostAllocationCount;</div>
-<div class="line"><a name="l14299"></a><span class="lineno">14299</span>&#160;    }</div>
-<div class="line"><a name="l14300"></a><span class="lineno">14300</span>&#160;}</div>
-<div class="line"><a name="l14301"></a><span class="lineno">14301</span>&#160; </div>
-<div class="line"><a name="l14302"></a><span class="lineno">14302</span>&#160;VkResult VmaBlockVector::CheckCorruption()</div>
-<div class="line"><a name="l14303"></a><span class="lineno">14303</span>&#160;{</div>
-<div class="line"><a name="l14304"></a><span class="lineno">14304</span>&#160;    <span class="keywordflow">if</span>(!IsCorruptionDetectionEnabled())</div>
-<div class="line"><a name="l14305"></a><span class="lineno">14305</span>&#160;    {</div>
-<div class="line"><a name="l14306"></a><span class="lineno">14306</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</div>
-<div class="line"><a name="l14307"></a><span class="lineno">14307</span>&#160;    }</div>
-<div class="line"><a name="l14308"></a><span class="lineno">14308</span>&#160; </div>
-<div class="line"><a name="l14309"></a><span class="lineno">14309</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l14310"></a><span class="lineno">14310</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</div>
-<div class="line"><a name="l14311"></a><span class="lineno">14311</span>&#160;    {</div>
-<div class="line"><a name="l14312"></a><span class="lineno">14312</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l14313"></a><span class="lineno">14313</span>&#160;        VMA_ASSERT(pBlock);</div>
-<div class="line"><a name="l14314"></a><span class="lineno">14314</span>&#160;        VkResult res = pBlock-&gt;CheckCorruption(m_hAllocator);</div>
-<div class="line"><a name="l14315"></a><span class="lineno">14315</span>&#160;        <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l14316"></a><span class="lineno">14316</span>&#160;        {</div>
-<div class="line"><a name="l14317"></a><span class="lineno">14317</span>&#160;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l14318"></a><span class="lineno">14318</span>&#160;        }</div>
-<div class="line"><a name="l14319"></a><span class="lineno">14319</span>&#160;    }</div>
-<div class="line"><a name="l14320"></a><span class="lineno">14320</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l14321"></a><span class="lineno">14321</span>&#160;}</div>
-<div class="line"><a name="l14322"></a><span class="lineno">14322</span>&#160; </div>
-<div class="line"><a name="l14323"></a><span class="lineno">14323</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::AddStats(<a class="code" href="struct_vma_stats.html">VmaStats</a>* pStats)</div>
-<div class="line"><a name="l14324"></a><span class="lineno">14324</span>&#160;{</div>
-<div class="line"><a name="l14325"></a><span class="lineno">14325</span>&#160;    <span class="keyword">const</span> uint32_t memTypeIndex = m_MemoryTypeIndex;</div>
-<div class="line"><a name="l14326"></a><span class="lineno">14326</span>&#160;    <span class="keyword">const</span> uint32_t memHeapIndex = m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
-<div class="line"><a name="l14327"></a><span class="lineno">14327</span>&#160; </div>
-<div class="line"><a name="l14328"></a><span class="lineno">14328</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l14329"></a><span class="lineno">14329</span>&#160; </div>
-<div class="line"><a name="l14330"></a><span class="lineno">14330</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</div>
-<div class="line"><a name="l14331"></a><span class="lineno">14331</span>&#160;    {</div>
-<div class="line"><a name="l14332"></a><span class="lineno">14332</span>&#160;        <span class="keyword">const</span> VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l14333"></a><span class="lineno">14333</span>&#160;        VMA_ASSERT(pBlock);</div>
-<div class="line"><a name="l14334"></a><span class="lineno">14334</span>&#160;        VMA_HEAVY_ASSERT(pBlock-&gt;Validate());</div>
-<div class="line"><a name="l14335"></a><span class="lineno">14335</span>&#160;        <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> allocationStatInfo;</div>
-<div class="line"><a name="l14336"></a><span class="lineno">14336</span>&#160;        pBlock-&gt;m_pMetadata-&gt;CalcAllocationStatInfo(allocationStatInfo);</div>
-<div class="line"><a name="l14337"></a><span class="lineno">14337</span>&#160;        VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>, allocationStatInfo);</div>
-<div class="line"><a name="l14338"></a><span class="lineno">14338</span>&#160;        VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[memTypeIndex], allocationStatInfo);</div>
-<div class="line"><a name="l14339"></a><span class="lineno">14339</span>&#160;        VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[memHeapIndex], allocationStatInfo);</div>
-<div class="line"><a name="l14340"></a><span class="lineno">14340</span>&#160;    }</div>
-<div class="line"><a name="l14341"></a><span class="lineno">14341</span>&#160;}</div>
-<div class="line"><a name="l14342"></a><span class="lineno">14342</span>&#160; </div>
-<div class="line"><a name="l14344"></a><span class="lineno">14344</span>&#160;<span class="comment">// VmaDefragmentationAlgorithm_Generic members definition</span></div>
-<div class="line"><a name="l14345"></a><span class="lineno">14345</span>&#160; </div>
-<div class="line"><a name="l14346"></a><span class="lineno">14346</span>&#160;VmaDefragmentationAlgorithm_Generic::VmaDefragmentationAlgorithm_Generic(</div>
-<div class="line"><a name="l14347"></a><span class="lineno">14347</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
-<div class="line"><a name="l14348"></a><span class="lineno">14348</span>&#160;    VmaBlockVector* pBlockVector,</div>
-<div class="line"><a name="l14349"></a><span class="lineno">14349</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l14350"></a><span class="lineno">14350</span>&#160;    <span class="keywordtype">bool</span> overlappingMoveSupported) :</div>
-<div class="line"><a name="l14351"></a><span class="lineno">14351</span>&#160;    VmaDefragmentationAlgorithm(hAllocator, pBlockVector, currentFrameIndex),</div>
-<div class="line"><a name="l14352"></a><span class="lineno">14352</span>&#160;    m_AllocationCount(0),</div>
-<div class="line"><a name="l14353"></a><span class="lineno">14353</span>&#160;    m_AllAllocations(false),</div>
-<div class="line"><a name="l14354"></a><span class="lineno">14354</span>&#160;    m_BytesMoved(0),</div>
-<div class="line"><a name="l14355"></a><span class="lineno">14355</span>&#160;    m_AllocationsMoved(0),</div>
-<div class="line"><a name="l14356"></a><span class="lineno">14356</span>&#160;    m_Blocks(VmaStlAllocator&lt;BlockInfo*&gt;(hAllocator-&gt;GetAllocationCallbacks()))</div>
-<div class="line"><a name="l14357"></a><span class="lineno">14357</span>&#160;{</div>
-<div class="line"><a name="l14358"></a><span class="lineno">14358</span>&#160;    <span class="comment">// Create block info for each block.</span></div>
-<div class="line"><a name="l14359"></a><span class="lineno">14359</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_pBlockVector-&gt;m_Blocks.size();</div>
-<div class="line"><a name="l14360"></a><span class="lineno">14360</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; blockIndex &lt; blockCount; ++blockIndex)</div>
-<div class="line"><a name="l14361"></a><span class="lineno">14361</span>&#160;    {</div>
-<div class="line"><a name="l14362"></a><span class="lineno">14362</span>&#160;        BlockInfo* pBlockInfo = vma_new(m_hAllocator, BlockInfo)(m_hAllocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l14363"></a><span class="lineno">14363</span>&#160;        pBlockInfo-&gt;m_OriginalBlockIndex = blockIndex;</div>
-<div class="line"><a name="l14364"></a><span class="lineno">14364</span>&#160;        pBlockInfo-&gt;m_pBlock = m_pBlockVector-&gt;m_Blocks[blockIndex];</div>
-<div class="line"><a name="l14365"></a><span class="lineno">14365</span>&#160;        m_Blocks.push_back(pBlockInfo);</div>
-<div class="line"><a name="l14366"></a><span class="lineno">14366</span>&#160;    }</div>
-<div class="line"><a name="l14367"></a><span class="lineno">14367</span>&#160; </div>
-<div class="line"><a name="l14368"></a><span class="lineno">14368</span>&#160;    <span class="comment">// Sort them by m_pBlock pointer value.</span></div>
-<div class="line"><a name="l14369"></a><span class="lineno">14369</span>&#160;    VMA_SORT(m_Blocks.begin(), m_Blocks.end(), BlockPointerLess());</div>
-<div class="line"><a name="l14370"></a><span class="lineno">14370</span>&#160;}</div>
-<div class="line"><a name="l14371"></a><span class="lineno">14371</span>&#160; </div>
-<div class="line"><a name="l14372"></a><span class="lineno">14372</span>&#160;VmaDefragmentationAlgorithm_Generic::~VmaDefragmentationAlgorithm_Generic()</div>
-<div class="line"><a name="l14373"></a><span class="lineno">14373</span>&#160;{</div>
-<div class="line"><a name="l14374"></a><span class="lineno">14374</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_Blocks.size(); i--; )</div>
-<div class="line"><a name="l14375"></a><span class="lineno">14375</span>&#160;    {</div>
-<div class="line"><a name="l14376"></a><span class="lineno">14376</span>&#160;        vma_delete(m_hAllocator, m_Blocks[i]);</div>
-<div class="line"><a name="l14377"></a><span class="lineno">14377</span>&#160;    }</div>
-<div class="line"><a name="l14378"></a><span class="lineno">14378</span>&#160;}</div>
-<div class="line"><a name="l14379"></a><span class="lineno">14379</span>&#160; </div>
-<div class="line"><a name="l14380"></a><span class="lineno">14380</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationAlgorithm_Generic::AddAllocation(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAlloc, VkBool32* pChanged)</div>
-<div class="line"><a name="l14381"></a><span class="lineno">14381</span>&#160;{</div>
-<div class="line"><a name="l14382"></a><span class="lineno">14382</span>&#160;    <span class="comment">// Now as we are inside VmaBlockVector::m_Mutex, we can make final check if this allocation was not lost.</span></div>
-<div class="line"><a name="l14383"></a><span class="lineno">14383</span>&#160;    <span class="keywordflow">if</span>(hAlloc-&gt;GetLastUseFrameIndex() != VMA_FRAME_INDEX_LOST)</div>
-<div class="line"><a name="l14384"></a><span class="lineno">14384</span>&#160;    {</div>
-<div class="line"><a name="l14385"></a><span class="lineno">14385</span>&#160;        VmaDeviceMemoryBlock* pBlock = hAlloc-&gt;GetBlock();</div>
-<div class="line"><a name="l14386"></a><span class="lineno">14386</span>&#160;        BlockInfoVector::iterator it = VmaBinaryFindFirstNotLess(m_Blocks.begin(), m_Blocks.end(), pBlock, BlockPointerLess());</div>
-<div class="line"><a name="l14387"></a><span class="lineno">14387</span>&#160;        <span class="keywordflow">if</span>(it != m_Blocks.end() &amp;&amp; (*it)-&gt;m_pBlock == pBlock)</div>
-<div class="line"><a name="l14388"></a><span class="lineno">14388</span>&#160;        {</div>
-<div class="line"><a name="l14389"></a><span class="lineno">14389</span>&#160;            AllocationInfo allocInfo = AllocationInfo(hAlloc, pChanged);</div>
-<div class="line"><a name="l14390"></a><span class="lineno">14390</span>&#160;            (*it)-&gt;m_Allocations.push_back(allocInfo);</div>
-<div class="line"><a name="l14391"></a><span class="lineno">14391</span>&#160;        }</div>
-<div class="line"><a name="l14392"></a><span class="lineno">14392</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14393"></a><span class="lineno">14393</span>&#160;        {</div>
-<div class="line"><a name="l14394"></a><span class="lineno">14394</span>&#160;            VMA_ASSERT(0);</div>
-<div class="line"><a name="l14395"></a><span class="lineno">14395</span>&#160;        }</div>
-<div class="line"><a name="l14396"></a><span class="lineno">14396</span>&#160; </div>
-<div class="line"><a name="l14397"></a><span class="lineno">14397</span>&#160;        ++m_AllocationCount;</div>
-<div class="line"><a name="l14398"></a><span class="lineno">14398</span>&#160;    }</div>
-<div class="line"><a name="l14399"></a><span class="lineno">14399</span>&#160;}</div>
-<div class="line"><a name="l14400"></a><span class="lineno">14400</span>&#160; </div>
-<div class="line"><a name="l14401"></a><span class="lineno">14401</span>&#160;VkResult VmaDefragmentationAlgorithm_Generic::DefragmentRound(</div>
-<div class="line"><a name="l14402"></a><span class="lineno">14402</span>&#160;    VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
-<div class="line"><a name="l14403"></a><span class="lineno">14403</span>&#160;    VkDeviceSize maxBytesToMove,</div>
-<div class="line"><a name="l14404"></a><span class="lineno">14404</span>&#160;    uint32_t maxAllocationsToMove,</div>
-<div class="line"><a name="l14405"></a><span class="lineno">14405</span>&#160;    <span class="keywordtype">bool</span> freeOldAllocations)</div>
-<div class="line"><a name="l14406"></a><span class="lineno">14406</span>&#160;{</div>
-<div class="line"><a name="l14407"></a><span class="lineno">14407</span>&#160;    <span class="keywordflow">if</span>(m_Blocks.empty())</div>
-<div class="line"><a name="l14408"></a><span class="lineno">14408</span>&#160;    {</div>
-<div class="line"><a name="l14409"></a><span class="lineno">14409</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l14410"></a><span class="lineno">14410</span>&#160;    }</div>
-<div class="line"><a name="l14411"></a><span class="lineno">14411</span>&#160; </div>
-<div class="line"><a name="l14412"></a><span class="lineno">14412</span>&#160;    <span class="comment">// This is a choice based on research.</span></div>
-<div class="line"><a name="l14413"></a><span class="lineno">14413</span>&#160;    <span class="comment">// Option 1:</span></div>
-<div class="line"><a name="l14414"></a><span class="lineno">14414</span>&#160;    uint32_t strategy = <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</a>;</div>
-<div class="line"><a name="l14415"></a><span class="lineno">14415</span>&#160;    <span class="comment">// Option 2:</span></div>
-<div class="line"><a name="l14416"></a><span class="lineno">14416</span>&#160;    <span class="comment">//uint32_t strategy = VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT;</span></div>
-<div class="line"><a name="l14417"></a><span class="lineno">14417</span>&#160;    <span class="comment">// Option 3:</span></div>
-<div class="line"><a name="l14418"></a><span class="lineno">14418</span>&#160;    <span class="comment">//uint32_t strategy = VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT;</span></div>
-<div class="line"><a name="l14419"></a><span class="lineno">14419</span>&#160; </div>
-<div class="line"><a name="l14420"></a><span class="lineno">14420</span>&#160;    <span class="keywordtype">size_t</span> srcBlockMinIndex = 0;</div>
-<div class="line"><a name="l14421"></a><span class="lineno">14421</span>&#160;    <span class="comment">// When FAST_ALGORITHM, move allocations from only last out of blocks that contain non-movable allocations.</span></div>
-<div class="line"><a name="l14422"></a><span class="lineno">14422</span>&#160;    <span class="comment">/*</span></div>
-<div class="line"><a name="l14423"></a><span class="lineno">14423</span>&#160;<span class="comment">    if(m_AlgorithmFlags &amp; VMA_DEFRAGMENTATION_FAST_ALGORITHM_BIT)</span></div>
-<div class="line"><a name="l14424"></a><span class="lineno">14424</span>&#160;<span class="comment">    {</span></div>
-<div class="line"><a name="l14425"></a><span class="lineno">14425</span>&#160;<span class="comment">        const size_t blocksWithNonMovableCount = CalcBlocksWithNonMovableCount();</span></div>
-<div class="line"><a name="l14426"></a><span class="lineno">14426</span>&#160;<span class="comment">        if(blocksWithNonMovableCount &gt; 0)</span></div>
-<div class="line"><a name="l14427"></a><span class="lineno">14427</span>&#160;<span class="comment">        {</span></div>
-<div class="line"><a name="l14428"></a><span class="lineno">14428</span>&#160;<span class="comment">            srcBlockMinIndex = blocksWithNonMovableCount - 1;</span></div>
-<div class="line"><a name="l14429"></a><span class="lineno">14429</span>&#160;<span class="comment">        }</span></div>
-<div class="line"><a name="l14430"></a><span class="lineno">14430</span>&#160;<span class="comment">    }</span></div>
-<div class="line"><a name="l14431"></a><span class="lineno">14431</span>&#160;<span class="comment">    */</span></div>
-<div class="line"><a name="l14432"></a><span class="lineno">14432</span>&#160; </div>
-<div class="line"><a name="l14433"></a><span class="lineno">14433</span>&#160;    <span class="keywordtype">size_t</span> srcBlockIndex = m_Blocks.size() - 1;</div>
-<div class="line"><a name="l14434"></a><span class="lineno">14434</span>&#160;    <span class="keywordtype">size_t</span> srcAllocIndex = SIZE_MAX;</div>
-<div class="line"><a name="l14435"></a><span class="lineno">14435</span>&#160;    <span class="keywordflow">for</span>(;;)</div>
-<div class="line"><a name="l14436"></a><span class="lineno">14436</span>&#160;    {</div>
-<div class="line"><a name="l14437"></a><span class="lineno">14437</span>&#160;        <span class="comment">// 1. Find next allocation to move.</span></div>
-<div class="line"><a name="l14438"></a><span class="lineno">14438</span>&#160;        <span class="comment">// 1.1. Start from last to first m_Blocks - they are sorted from most &quot;destination&quot; to most &quot;source&quot;.</span></div>
-<div class="line"><a name="l14439"></a><span class="lineno">14439</span>&#160;        <span class="comment">// 1.2. Then start from last to first m_Allocations.</span></div>
-<div class="line"><a name="l14440"></a><span class="lineno">14440</span>&#160;        <span class="keywordflow">while</span>(srcAllocIndex &gt;= m_Blocks[srcBlockIndex]-&gt;m_Allocations.size())</div>
-<div class="line"><a name="l14441"></a><span class="lineno">14441</span>&#160;        {</div>
-<div class="line"><a name="l14442"></a><span class="lineno">14442</span>&#160;            <span class="keywordflow">if</span>(m_Blocks[srcBlockIndex]-&gt;m_Allocations.empty())</div>
-<div class="line"><a name="l14443"></a><span class="lineno">14443</span>&#160;            {</div>
-<div class="line"><a name="l14444"></a><span class="lineno">14444</span>&#160;                <span class="comment">// Finished: no more allocations to process.</span></div>
-<div class="line"><a name="l14445"></a><span class="lineno">14445</span>&#160;                <span class="keywordflow">if</span>(srcBlockIndex == srcBlockMinIndex)</div>
-<div class="line"><a name="l14446"></a><span class="lineno">14446</span>&#160;                {</div>
-<div class="line"><a name="l14447"></a><span class="lineno">14447</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l14448"></a><span class="lineno">14448</span>&#160;                }</div>
-<div class="line"><a name="l14449"></a><span class="lineno">14449</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14450"></a><span class="lineno">14450</span>&#160;                {</div>
-<div class="line"><a name="l14451"></a><span class="lineno">14451</span>&#160;                    --srcBlockIndex;</div>
-<div class="line"><a name="l14452"></a><span class="lineno">14452</span>&#160;                    srcAllocIndex = SIZE_MAX;</div>
-<div class="line"><a name="l14453"></a><span class="lineno">14453</span>&#160;                }</div>
-<div class="line"><a name="l14454"></a><span class="lineno">14454</span>&#160;            }</div>
-<div class="line"><a name="l14455"></a><span class="lineno">14455</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14456"></a><span class="lineno">14456</span>&#160;            {</div>
-<div class="line"><a name="l14457"></a><span class="lineno">14457</span>&#160;                srcAllocIndex = m_Blocks[srcBlockIndex]-&gt;m_Allocations.size() - 1;</div>
-<div class="line"><a name="l14458"></a><span class="lineno">14458</span>&#160;            }</div>
-<div class="line"><a name="l14459"></a><span class="lineno">14459</span>&#160;        }</div>
-<div class="line"><a name="l14460"></a><span class="lineno">14460</span>&#160; </div>
-<div class="line"><a name="l14461"></a><span class="lineno">14461</span>&#160;        BlockInfo* pSrcBlockInfo = m_Blocks[srcBlockIndex];</div>
-<div class="line"><a name="l14462"></a><span class="lineno">14462</span>&#160;        AllocationInfo&amp; allocInfo = pSrcBlockInfo-&gt;m_Allocations[srcAllocIndex];</div>
-<div class="line"><a name="l14463"></a><span class="lineno">14463</span>&#160; </div>
-<div class="line"><a name="l14464"></a><span class="lineno">14464</span>&#160;        <span class="keyword">const</span> VkDeviceSize size = allocInfo.m_hAllocation-&gt;GetSize();</div>
-<div class="line"><a name="l14465"></a><span class="lineno">14465</span>&#160;        <span class="keyword">const</span> VkDeviceSize srcOffset = allocInfo.m_hAllocation-&gt;GetOffset();</div>
-<div class="line"><a name="l14466"></a><span class="lineno">14466</span>&#160;        <span class="keyword">const</span> VkDeviceSize alignment = allocInfo.m_hAllocation-&gt;GetAlignment();</div>
-<div class="line"><a name="l14467"></a><span class="lineno">14467</span>&#160;        <span class="keyword">const</span> VmaSuballocationType suballocType = allocInfo.m_hAllocation-&gt;GetSuballocationType();</div>
-<div class="line"><a name="l14468"></a><span class="lineno">14468</span>&#160; </div>
-<div class="line"><a name="l14469"></a><span class="lineno">14469</span>&#160;        <span class="comment">// 2. Try to find new place for this allocation in preceding or current block.</span></div>
-<div class="line"><a name="l14470"></a><span class="lineno">14470</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> dstBlockIndex = 0; dstBlockIndex &lt;= srcBlockIndex; ++dstBlockIndex)</div>
-<div class="line"><a name="l14471"></a><span class="lineno">14471</span>&#160;        {</div>
-<div class="line"><a name="l14472"></a><span class="lineno">14472</span>&#160;            BlockInfo* pDstBlockInfo = m_Blocks[dstBlockIndex];</div>
-<div class="line"><a name="l14473"></a><span class="lineno">14473</span>&#160;            VmaAllocationRequest dstAllocRequest;</div>
-<div class="line"><a name="l14474"></a><span class="lineno">14474</span>&#160;            <span class="keywordflow">if</span>(pDstBlockInfo-&gt;m_pBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
-<div class="line"><a name="l14475"></a><span class="lineno">14475</span>&#160;                m_CurrentFrameIndex,</div>
-<div class="line"><a name="l14476"></a><span class="lineno">14476</span>&#160;                m_pBlockVector-&gt;GetFrameInUseCount(),</div>
-<div class="line"><a name="l14477"></a><span class="lineno">14477</span>&#160;                m_pBlockVector-&gt;GetBufferImageGranularity(),</div>
-<div class="line"><a name="l14478"></a><span class="lineno">14478</span>&#160;                size,</div>
-<div class="line"><a name="l14479"></a><span class="lineno">14479</span>&#160;                alignment,</div>
-<div class="line"><a name="l14480"></a><span class="lineno">14480</span>&#160;                <span class="keyword">false</span>, <span class="comment">// upperAddress</span></div>
-<div class="line"><a name="l14481"></a><span class="lineno">14481</span>&#160;                suballocType,</div>
-<div class="line"><a name="l14482"></a><span class="lineno">14482</span>&#160;                <span class="keyword">false</span>, <span class="comment">// canMakeOtherLost</span></div>
-<div class="line"><a name="l14483"></a><span class="lineno">14483</span>&#160;                strategy,</div>
-<div class="line"><a name="l14484"></a><span class="lineno">14484</span>&#160;                &amp;dstAllocRequest) &amp;&amp;</div>
-<div class="line"><a name="l14485"></a><span class="lineno">14485</span>&#160;            MoveMakesSense(</div>
-<div class="line"><a name="l14486"></a><span class="lineno">14486</span>&#160;                dstBlockIndex, dstAllocRequest.offset, srcBlockIndex, srcOffset))</div>
-<div class="line"><a name="l14487"></a><span class="lineno">14487</span>&#160;            {</div>
-<div class="line"><a name="l14488"></a><span class="lineno">14488</span>&#160;                VMA_ASSERT(dstAllocRequest.itemsToMakeLostCount == 0);</div>
-<div class="line"><a name="l14489"></a><span class="lineno">14489</span>&#160; </div>
-<div class="line"><a name="l14490"></a><span class="lineno">14490</span>&#160;                <span class="comment">// Reached limit on number of allocations or bytes to move.</span></div>
-<div class="line"><a name="l14491"></a><span class="lineno">14491</span>&#160;                <span class="keywordflow">if</span>((m_AllocationsMoved + 1 &gt; maxAllocationsToMove) ||</div>
-<div class="line"><a name="l14492"></a><span class="lineno">14492</span>&#160;                    (m_BytesMoved + size &gt; maxBytesToMove))</div>
-<div class="line"><a name="l14493"></a><span class="lineno">14493</span>&#160;                {</div>
-<div class="line"><a name="l14494"></a><span class="lineno">14494</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l14495"></a><span class="lineno">14495</span>&#160;                }</div>
-<div class="line"><a name="l14496"></a><span class="lineno">14496</span>&#160; </div>
-<div class="line"><a name="l14497"></a><span class="lineno">14497</span>&#160;                VmaDefragmentationMove move = {};</div>
-<div class="line"><a name="l14498"></a><span class="lineno">14498</span>&#160;                move.srcBlockIndex = pSrcBlockInfo-&gt;m_OriginalBlockIndex;</div>
-<div class="line"><a name="l14499"></a><span class="lineno">14499</span>&#160;                move.dstBlockIndex = pDstBlockInfo-&gt;m_OriginalBlockIndex;</div>
-<div class="line"><a name="l14500"></a><span class="lineno">14500</span>&#160;                move.srcOffset = srcOffset;</div>
-<div class="line"><a name="l14501"></a><span class="lineno">14501</span>&#160;                move.dstOffset = dstAllocRequest.offset;</div>
-<div class="line"><a name="l14502"></a><span class="lineno">14502</span>&#160;                move.size = size;</div>
-<div class="line"><a name="l14503"></a><span class="lineno">14503</span>&#160;                move.hAllocation = allocInfo.m_hAllocation;</div>
-<div class="line"><a name="l14504"></a><span class="lineno">14504</span>&#160;                move.pSrcBlock = pSrcBlockInfo-&gt;m_pBlock;</div>
-<div class="line"><a name="l14505"></a><span class="lineno">14505</span>&#160;                move.pDstBlock = pDstBlockInfo-&gt;m_pBlock;</div>
-<div class="line"><a name="l14506"></a><span class="lineno">14506</span>&#160; </div>
-<div class="line"><a name="l14507"></a><span class="lineno">14507</span>&#160;                moves.push_back(move);</div>
-<div class="line"><a name="l14508"></a><span class="lineno">14508</span>&#160; </div>
-<div class="line"><a name="l14509"></a><span class="lineno">14509</span>&#160;                pDstBlockInfo-&gt;m_pBlock-&gt;m_pMetadata-&gt;Alloc(</div>
-<div class="line"><a name="l14510"></a><span class="lineno">14510</span>&#160;                    dstAllocRequest,</div>
-<div class="line"><a name="l14511"></a><span class="lineno">14511</span>&#160;                    suballocType,</div>
-<div class="line"><a name="l14512"></a><span class="lineno">14512</span>&#160;                    size,</div>
-<div class="line"><a name="l14513"></a><span class="lineno">14513</span>&#160;                    allocInfo.m_hAllocation);</div>
-<div class="line"><a name="l14514"></a><span class="lineno">14514</span>&#160; </div>
-<div class="line"><a name="l14515"></a><span class="lineno">14515</span>&#160;                <span class="keywordflow">if</span>(freeOldAllocations)</div>
-<div class="line"><a name="l14516"></a><span class="lineno">14516</span>&#160;                {</div>
-<div class="line"><a name="l14517"></a><span class="lineno">14517</span>&#160;                    pSrcBlockInfo-&gt;m_pBlock-&gt;m_pMetadata-&gt;FreeAtOffset(srcOffset);</div>
-<div class="line"><a name="l14518"></a><span class="lineno">14518</span>&#160;                    allocInfo.m_hAllocation-&gt;ChangeBlockAllocation(m_hAllocator, pDstBlockInfo-&gt;m_pBlock, dstAllocRequest.offset);</div>
-<div class="line"><a name="l14519"></a><span class="lineno">14519</span>&#160;                }</div>
-<div class="line"><a name="l14520"></a><span class="lineno">14520</span>&#160; </div>
-<div class="line"><a name="l14521"></a><span class="lineno">14521</span>&#160;                <span class="keywordflow">if</span>(allocInfo.m_pChanged != VMA_NULL)</div>
-<div class="line"><a name="l14522"></a><span class="lineno">14522</span>&#160;                {</div>
-<div class="line"><a name="l14523"></a><span class="lineno">14523</span>&#160;                    *allocInfo.m_pChanged = VK_TRUE;</div>
-<div class="line"><a name="l14524"></a><span class="lineno">14524</span>&#160;                }</div>
-<div class="line"><a name="l14525"></a><span class="lineno">14525</span>&#160; </div>
-<div class="line"><a name="l14526"></a><span class="lineno">14526</span>&#160;                ++m_AllocationsMoved;</div>
-<div class="line"><a name="l14527"></a><span class="lineno">14527</span>&#160;                m_BytesMoved += size;</div>
-<div class="line"><a name="l14528"></a><span class="lineno">14528</span>&#160; </div>
-<div class="line"><a name="l14529"></a><span class="lineno">14529</span>&#160;                VmaVectorRemove(pSrcBlockInfo-&gt;m_Allocations, srcAllocIndex);</div>
-<div class="line"><a name="l14530"></a><span class="lineno">14530</span>&#160; </div>
-<div class="line"><a name="l14531"></a><span class="lineno">14531</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l14532"></a><span class="lineno">14532</span>&#160;            }</div>
-<div class="line"><a name="l14533"></a><span class="lineno">14533</span>&#160;        }</div>
-<div class="line"><a name="l14534"></a><span class="lineno">14534</span>&#160; </div>
-<div class="line"><a name="l14535"></a><span class="lineno">14535</span>&#160;        <span class="comment">// If not processed, this allocInfo remains in pBlockInfo-&gt;m_Allocations for next round.</span></div>
-<div class="line"><a name="l14536"></a><span class="lineno">14536</span>&#160; </div>
-<div class="line"><a name="l14537"></a><span class="lineno">14537</span>&#160;        <span class="keywordflow">if</span>(srcAllocIndex &gt; 0)</div>
-<div class="line"><a name="l14538"></a><span class="lineno">14538</span>&#160;        {</div>
-<div class="line"><a name="l14539"></a><span class="lineno">14539</span>&#160;            --srcAllocIndex;</div>
-<div class="line"><a name="l14540"></a><span class="lineno">14540</span>&#160;        }</div>
-<div class="line"><a name="l14541"></a><span class="lineno">14541</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14542"></a><span class="lineno">14542</span>&#160;        {</div>
-<div class="line"><a name="l14543"></a><span class="lineno">14543</span>&#160;            <span class="keywordflow">if</span>(srcBlockIndex &gt; 0)</div>
-<div class="line"><a name="l14544"></a><span class="lineno">14544</span>&#160;            {</div>
-<div class="line"><a name="l14545"></a><span class="lineno">14545</span>&#160;                --srcBlockIndex;</div>
-<div class="line"><a name="l14546"></a><span class="lineno">14546</span>&#160;                srcAllocIndex = SIZE_MAX;</div>
-<div class="line"><a name="l14547"></a><span class="lineno">14547</span>&#160;            }</div>
-<div class="line"><a name="l14548"></a><span class="lineno">14548</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14549"></a><span class="lineno">14549</span>&#160;            {</div>
-<div class="line"><a name="l14550"></a><span class="lineno">14550</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l14551"></a><span class="lineno">14551</span>&#160;            }</div>
-<div class="line"><a name="l14552"></a><span class="lineno">14552</span>&#160;        }</div>
-<div class="line"><a name="l14553"></a><span class="lineno">14553</span>&#160;    }</div>
-<div class="line"><a name="l14554"></a><span class="lineno">14554</span>&#160;}</div>
-<div class="line"><a name="l14555"></a><span class="lineno">14555</span>&#160; </div>
-<div class="line"><a name="l14556"></a><span class="lineno">14556</span>&#160;<span class="keywordtype">size_t</span> VmaDefragmentationAlgorithm_Generic::CalcBlocksWithNonMovableCount()<span class="keyword"> const</span></div>
-<div class="line"><a name="l14557"></a><span class="lineno">14557</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l14558"></a><span class="lineno">14558</span>&#160;    <span class="keywordtype">size_t</span> result = 0;</div>
-<div class="line"><a name="l14559"></a><span class="lineno">14559</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; m_Blocks.size(); ++i)</div>
-<div class="line"><a name="l14560"></a><span class="lineno">14560</span>&#160;    {</div>
-<div class="line"><a name="l14561"></a><span class="lineno">14561</span>&#160;        <span class="keywordflow">if</span>(m_Blocks[i]-&gt;m_HasNonMovableAllocations)</div>
-<div class="line"><a name="l14562"></a><span class="lineno">14562</span>&#160;        {</div>
-<div class="line"><a name="l14563"></a><span class="lineno">14563</span>&#160;            ++result;</div>
-<div class="line"><a name="l14564"></a><span class="lineno">14564</span>&#160;        }</div>
-<div class="line"><a name="l14565"></a><span class="lineno">14565</span>&#160;    }</div>
-<div class="line"><a name="l14566"></a><span class="lineno">14566</span>&#160;    <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l14567"></a><span class="lineno">14567</span>&#160;}</div>
-<div class="line"><a name="l14568"></a><span class="lineno">14568</span>&#160; </div>
-<div class="line"><a name="l14569"></a><span class="lineno">14569</span>&#160;VkResult VmaDefragmentationAlgorithm_Generic::Defragment(</div>
-<div class="line"><a name="l14570"></a><span class="lineno">14570</span>&#160;    VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
-<div class="line"><a name="l14571"></a><span class="lineno">14571</span>&#160;    VkDeviceSize maxBytesToMove,</div>
-<div class="line"><a name="l14572"></a><span class="lineno">14572</span>&#160;    uint32_t maxAllocationsToMove,</div>
-<div class="line"><a name="l14573"></a><span class="lineno">14573</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> flags)</div>
-<div class="line"><a name="l14574"></a><span class="lineno">14574</span>&#160;{</div>
-<div class="line"><a name="l14575"></a><span class="lineno">14575</span>&#160;    <span class="keywordflow">if</span>(!m_AllAllocations &amp;&amp; m_AllocationCount == 0)</div>
-<div class="line"><a name="l14576"></a><span class="lineno">14576</span>&#160;    {</div>
-<div class="line"><a name="l14577"></a><span class="lineno">14577</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l14578"></a><span class="lineno">14578</span>&#160;    }</div>
-<div class="line"><a name="l14579"></a><span class="lineno">14579</span>&#160; </div>
-<div class="line"><a name="l14580"></a><span class="lineno">14580</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_Blocks.size();</div>
-<div class="line"><a name="l14581"></a><span class="lineno">14581</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; blockIndex &lt; blockCount; ++blockIndex)</div>
-<div class="line"><a name="l14582"></a><span class="lineno">14582</span>&#160;    {</div>
-<div class="line"><a name="l14583"></a><span class="lineno">14583</span>&#160;        BlockInfo* pBlockInfo = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l14584"></a><span class="lineno">14584</span>&#160; </div>
-<div class="line"><a name="l14585"></a><span class="lineno">14585</span>&#160;        <span class="keywordflow">if</span>(m_AllAllocations)</div>
-<div class="line"><a name="l14586"></a><span class="lineno">14586</span>&#160;        {</div>
-<div class="line"><a name="l14587"></a><span class="lineno">14587</span>&#160;            VmaBlockMetadata_Generic* pMetadata = (VmaBlockMetadata_Generic*)pBlockInfo-&gt;m_pBlock-&gt;m_pMetadata;</div>
-<div class="line"><a name="l14588"></a><span class="lineno">14588</span>&#160;            <span class="keywordflow">for</span>(VmaSuballocationList::const_iterator it = pMetadata-&gt;m_Suballocations.begin();</div>
-<div class="line"><a name="l14589"></a><span class="lineno">14589</span>&#160;                it != pMetadata-&gt;m_Suballocations.end();</div>
-<div class="line"><a name="l14590"></a><span class="lineno">14590</span>&#160;                ++it)</div>
-<div class="line"><a name="l14591"></a><span class="lineno">14591</span>&#160;            {</div>
-<div class="line"><a name="l14592"></a><span class="lineno">14592</span>&#160;                <span class="keywordflow">if</span>(it-&gt;type != VMA_SUBALLOCATION_TYPE_FREE)</div>
-<div class="line"><a name="l14593"></a><span class="lineno">14593</span>&#160;                {</div>
-<div class="line"><a name="l14594"></a><span class="lineno">14594</span>&#160;                    AllocationInfo allocInfo = AllocationInfo(it-&gt;hAllocation, VMA_NULL);</div>
-<div class="line"><a name="l14595"></a><span class="lineno">14595</span>&#160;                    pBlockInfo-&gt;m_Allocations.push_back(allocInfo);</div>
-<div class="line"><a name="l14596"></a><span class="lineno">14596</span>&#160;                }</div>
-<div class="line"><a name="l14597"></a><span class="lineno">14597</span>&#160;            }</div>
-<div class="line"><a name="l14598"></a><span class="lineno">14598</span>&#160;        }</div>
-<div class="line"><a name="l14599"></a><span class="lineno">14599</span>&#160; </div>
-<div class="line"><a name="l14600"></a><span class="lineno">14600</span>&#160;        pBlockInfo-&gt;CalcHasNonMovableAllocations();</div>
-<div class="line"><a name="l14601"></a><span class="lineno">14601</span>&#160; </div>
-<div class="line"><a name="l14602"></a><span class="lineno">14602</span>&#160;        <span class="comment">// This is a choice based on research.</span></div>
-<div class="line"><a name="l14603"></a><span class="lineno">14603</span>&#160;        <span class="comment">// Option 1:</span></div>
-<div class="line"><a name="l14604"></a><span class="lineno">14604</span>&#160;        pBlockInfo-&gt;SortAllocationsByOffsetDescending();</div>
-<div class="line"><a name="l14605"></a><span class="lineno">14605</span>&#160;        <span class="comment">// Option 2:</span></div>
-<div class="line"><a name="l14606"></a><span class="lineno">14606</span>&#160;        <span class="comment">//pBlockInfo-&gt;SortAllocationsBySizeDescending();</span></div>
-<div class="line"><a name="l14607"></a><span class="lineno">14607</span>&#160;    }</div>
-<div class="line"><a name="l14608"></a><span class="lineno">14608</span>&#160; </div>
-<div class="line"><a name="l14609"></a><span class="lineno">14609</span>&#160;    <span class="comment">// Sort m_Blocks this time by the main criterium, from most &quot;destination&quot; to most &quot;source&quot; blocks.</span></div>
-<div class="line"><a name="l14610"></a><span class="lineno">14610</span>&#160;    VMA_SORT(m_Blocks.begin(), m_Blocks.end(), BlockInfoCompareMoveDestination());</div>
-<div class="line"><a name="l14611"></a><span class="lineno">14611</span>&#160; </div>
-<div class="line"><a name="l14612"></a><span class="lineno">14612</span>&#160;    <span class="comment">// This is a choice based on research.</span></div>
-<div class="line"><a name="l14613"></a><span class="lineno">14613</span>&#160;    <span class="keyword">const</span> uint32_t roundCount = 2;</div>
-<div class="line"><a name="l14614"></a><span class="lineno">14614</span>&#160; </div>
-<div class="line"><a name="l14615"></a><span class="lineno">14615</span>&#160;    <span class="comment">// Execute defragmentation rounds (the main part).</span></div>
-<div class="line"><a name="l14616"></a><span class="lineno">14616</span>&#160;    VkResult result = VK_SUCCESS;</div>
-<div class="line"><a name="l14617"></a><span class="lineno">14617</span>&#160;    <span class="keywordflow">for</span>(uint32_t round = 0; (round &lt; roundCount) &amp;&amp; (result == VK_SUCCESS); ++round)</div>
-<div class="line"><a name="l14618"></a><span class="lineno">14618</span>&#160;    {</div>
-<div class="line"><a name="l14619"></a><span class="lineno">14619</span>&#160;        result = DefragmentRound(moves, maxBytesToMove, maxAllocationsToMove, !(flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a>));</div>
-<div class="line"><a name="l14620"></a><span class="lineno">14620</span>&#160;    }</div>
-<div class="line"><a name="l14621"></a><span class="lineno">14621</span>&#160; </div>
-<div class="line"><a name="l14622"></a><span class="lineno">14622</span>&#160;    <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l14623"></a><span class="lineno">14623</span>&#160;}</div>
-<div class="line"><a name="l14624"></a><span class="lineno">14624</span>&#160; </div>
-<div class="line"><a name="l14625"></a><span class="lineno">14625</span>&#160;<span class="keywordtype">bool</span> VmaDefragmentationAlgorithm_Generic::MoveMakesSense(</div>
-<div class="line"><a name="l14626"></a><span class="lineno">14626</span>&#160;        <span class="keywordtype">size_t</span> dstBlockIndex, VkDeviceSize dstOffset,</div>
-<div class="line"><a name="l14627"></a><span class="lineno">14627</span>&#160;        <span class="keywordtype">size_t</span> srcBlockIndex, VkDeviceSize srcOffset)</div>
-<div class="line"><a name="l14628"></a><span class="lineno">14628</span>&#160;{</div>
-<div class="line"><a name="l14629"></a><span class="lineno">14629</span>&#160;    <span class="keywordflow">if</span>(dstBlockIndex &lt; srcBlockIndex)</div>
-<div class="line"><a name="l14630"></a><span class="lineno">14630</span>&#160;    {</div>
-<div class="line"><a name="l14631"></a><span class="lineno">14631</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l14632"></a><span class="lineno">14632</span>&#160;    }</div>
-<div class="line"><a name="l14633"></a><span class="lineno">14633</span>&#160;    <span class="keywordflow">if</span>(dstBlockIndex &gt; srcBlockIndex)</div>
-<div class="line"><a name="l14634"></a><span class="lineno">14634</span>&#160;    {</div>
-<div class="line"><a name="l14635"></a><span class="lineno">14635</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l14636"></a><span class="lineno">14636</span>&#160;    }</div>
-<div class="line"><a name="l14637"></a><span class="lineno">14637</span>&#160;    <span class="keywordflow">if</span>(dstOffset &lt; srcOffset)</div>
-<div class="line"><a name="l14638"></a><span class="lineno">14638</span>&#160;    {</div>
-<div class="line"><a name="l14639"></a><span class="lineno">14639</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l14640"></a><span class="lineno">14640</span>&#160;    }</div>
-<div class="line"><a name="l14641"></a><span class="lineno">14641</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l14642"></a><span class="lineno">14642</span>&#160;}</div>
-<div class="line"><a name="l14643"></a><span class="lineno">14643</span>&#160; </div>
-<div class="line"><a name="l14645"></a><span class="lineno">14645</span>&#160;<span class="comment">// VmaDefragmentationAlgorithm_Fast</span></div>
-<div class="line"><a name="l14646"></a><span class="lineno">14646</span>&#160; </div>
-<div class="line"><a name="l14647"></a><span class="lineno">14647</span>&#160;VmaDefragmentationAlgorithm_Fast::VmaDefragmentationAlgorithm_Fast(</div>
-<div class="line"><a name="l14648"></a><span class="lineno">14648</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
-<div class="line"><a name="l14649"></a><span class="lineno">14649</span>&#160;    VmaBlockVector* pBlockVector,</div>
-<div class="line"><a name="l14650"></a><span class="lineno">14650</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l14651"></a><span class="lineno">14651</span>&#160;    <span class="keywordtype">bool</span> overlappingMoveSupported) :</div>
-<div class="line"><a name="l14652"></a><span class="lineno">14652</span>&#160;    VmaDefragmentationAlgorithm(hAllocator, pBlockVector, currentFrameIndex),</div>
-<div class="line"><a name="l14653"></a><span class="lineno">14653</span>&#160;    m_OverlappingMoveSupported(overlappingMoveSupported),</div>
-<div class="line"><a name="l14654"></a><span class="lineno">14654</span>&#160;    m_AllocationCount(0),</div>
-<div class="line"><a name="l14655"></a><span class="lineno">14655</span>&#160;    m_AllAllocations(false),</div>
-<div class="line"><a name="l14656"></a><span class="lineno">14656</span>&#160;    m_BytesMoved(0),</div>
-<div class="line"><a name="l14657"></a><span class="lineno">14657</span>&#160;    m_AllocationsMoved(0),</div>
-<div class="line"><a name="l14658"></a><span class="lineno">14658</span>&#160;    m_BlockInfos(VmaStlAllocator&lt;BlockInfo&gt;(hAllocator-&gt;GetAllocationCallbacks()))</div>
-<div class="line"><a name="l14659"></a><span class="lineno">14659</span>&#160;{</div>
-<div class="line"><a name="l14660"></a><span class="lineno">14660</span>&#160;    VMA_ASSERT(VMA_DEBUG_MARGIN == 0);</div>
-<div class="line"><a name="l14661"></a><span class="lineno">14661</span>&#160; </div>
-<div class="line"><a name="l14662"></a><span class="lineno">14662</span>&#160;}</div>
-<div class="line"><a name="l14663"></a><span class="lineno">14663</span>&#160; </div>
-<div class="line"><a name="l14664"></a><span class="lineno">14664</span>&#160;VmaDefragmentationAlgorithm_Fast::~VmaDefragmentationAlgorithm_Fast()</div>
-<div class="line"><a name="l14665"></a><span class="lineno">14665</span>&#160;{</div>
-<div class="line"><a name="l14666"></a><span class="lineno">14666</span>&#160;}</div>
-<div class="line"><a name="l14667"></a><span class="lineno">14667</span>&#160; </div>
-<div class="line"><a name="l14668"></a><span class="lineno">14668</span>&#160;VkResult VmaDefragmentationAlgorithm_Fast::Defragment(</div>
-<div class="line"><a name="l14669"></a><span class="lineno">14669</span>&#160;    VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
-<div class="line"><a name="l14670"></a><span class="lineno">14670</span>&#160;    VkDeviceSize maxBytesToMove,</div>
-<div class="line"><a name="l14671"></a><span class="lineno">14671</span>&#160;    uint32_t maxAllocationsToMove,</div>
-<div class="line"><a name="l14672"></a><span class="lineno">14672</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> flags)</div>
-<div class="line"><a name="l14673"></a><span class="lineno">14673</span>&#160;{</div>
-<div class="line"><a name="l14674"></a><span class="lineno">14674</span>&#160;    VMA_ASSERT(m_AllAllocations || m_pBlockVector-&gt;CalcAllocationCount() == m_AllocationCount);</div>
-<div class="line"><a name="l14675"></a><span class="lineno">14675</span>&#160; </div>
-<div class="line"><a name="l14676"></a><span class="lineno">14676</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_pBlockVector-&gt;GetBlockCount();</div>
-<div class="line"><a name="l14677"></a><span class="lineno">14677</span>&#160;    <span class="keywordflow">if</span>(blockCount == 0 || maxBytesToMove == 0 || maxAllocationsToMove == 0)</div>
-<div class="line"><a name="l14678"></a><span class="lineno">14678</span>&#160;    {</div>
-<div class="line"><a name="l14679"></a><span class="lineno">14679</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l14680"></a><span class="lineno">14680</span>&#160;    }</div>
-<div class="line"><a name="l14681"></a><span class="lineno">14681</span>&#160; </div>
-<div class="line"><a name="l14682"></a><span class="lineno">14682</span>&#160;    PreprocessMetadata();</div>
-<div class="line"><a name="l14683"></a><span class="lineno">14683</span>&#160; </div>
-<div class="line"><a name="l14684"></a><span class="lineno">14684</span>&#160;    <span class="comment">// Sort blocks in order from most destination.</span></div>
-<div class="line"><a name="l14685"></a><span class="lineno">14685</span>&#160; </div>
-<div class="line"><a name="l14686"></a><span class="lineno">14686</span>&#160;    m_BlockInfos.resize(blockCount);</div>
-<div class="line"><a name="l14687"></a><span class="lineno">14687</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; blockCount; ++i)</div>
-<div class="line"><a name="l14688"></a><span class="lineno">14688</span>&#160;    {</div>
-<div class="line"><a name="l14689"></a><span class="lineno">14689</span>&#160;        m_BlockInfos[i].origBlockIndex = i;</div>
-<div class="line"><a name="l14690"></a><span class="lineno">14690</span>&#160;    }</div>
-<div class="line"><a name="l14691"></a><span class="lineno">14691</span>&#160; </div>
-<div class="line"><a name="l14692"></a><span class="lineno">14692</span>&#160;    VMA_SORT(m_BlockInfos.begin(), m_BlockInfos.end(), [<span class="keyword">this</span>](<span class="keyword">const</span> BlockInfo&amp; lhs, <span class="keyword">const</span> BlockInfo&amp; rhs) -&gt; <span class="keywordtype">bool</span> {</div>
-<div class="line"><a name="l14693"></a><span class="lineno">14693</span>&#160;        return m_pBlockVector-&gt;GetBlock(lhs.origBlockIndex)-&gt;m_pMetadata-&gt;GetSumFreeSize() &lt;</div>
-<div class="line"><a name="l14694"></a><span class="lineno">14694</span>&#160;            m_pBlockVector-&gt;GetBlock(rhs.origBlockIndex)-&gt;m_pMetadata-&gt;GetSumFreeSize();</div>
-<div class="line"><a name="l14695"></a><span class="lineno">14695</span>&#160;    });</div>
-<div class="line"><a name="l14696"></a><span class="lineno">14696</span>&#160; </div>
-<div class="line"><a name="l14697"></a><span class="lineno">14697</span>&#160;    <span class="comment">// THE MAIN ALGORITHM</span></div>
-<div class="line"><a name="l14698"></a><span class="lineno">14698</span>&#160; </div>
-<div class="line"><a name="l14699"></a><span class="lineno">14699</span>&#160;    FreeSpaceDatabase freeSpaceDb;</div>
-<div class="line"><a name="l14700"></a><span class="lineno">14700</span>&#160; </div>
-<div class="line"><a name="l14701"></a><span class="lineno">14701</span>&#160;    <span class="keywordtype">size_t</span> dstBlockInfoIndex = 0;</div>
-<div class="line"><a name="l14702"></a><span class="lineno">14702</span>&#160;    <span class="keywordtype">size_t</span> dstOrigBlockIndex = m_BlockInfos[dstBlockInfoIndex].origBlockIndex;</div>
-<div class="line"><a name="l14703"></a><span class="lineno">14703</span>&#160;    VmaDeviceMemoryBlock* pDstBlock = m_pBlockVector-&gt;GetBlock(dstOrigBlockIndex);</div>
-<div class="line"><a name="l14704"></a><span class="lineno">14704</span>&#160;    VmaBlockMetadata_Generic* pDstMetadata = (VmaBlockMetadata_Generic*)pDstBlock-&gt;m_pMetadata;</div>
-<div class="line"><a name="l14705"></a><span class="lineno">14705</span>&#160;    VkDeviceSize dstBlockSize = pDstMetadata-&gt;GetSize();</div>
-<div class="line"><a name="l14706"></a><span class="lineno">14706</span>&#160;    VkDeviceSize dstOffset = 0;</div>
-<div class="line"><a name="l14707"></a><span class="lineno">14707</span>&#160; </div>
-<div class="line"><a name="l14708"></a><span class="lineno">14708</span>&#160;    <span class="keywordtype">bool</span> end = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l14709"></a><span class="lineno">14709</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> srcBlockInfoIndex = 0; !end &amp;&amp; srcBlockInfoIndex &lt; blockCount; ++srcBlockInfoIndex)</div>
-<div class="line"><a name="l14710"></a><span class="lineno">14710</span>&#160;    {</div>
-<div class="line"><a name="l14711"></a><span class="lineno">14711</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> srcOrigBlockIndex = m_BlockInfos[srcBlockInfoIndex].origBlockIndex;</div>
-<div class="line"><a name="l14712"></a><span class="lineno">14712</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pSrcBlock = m_pBlockVector-&gt;GetBlock(srcOrigBlockIndex);</div>
-<div class="line"><a name="l14713"></a><span class="lineno">14713</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pSrcMetadata = (VmaBlockMetadata_Generic*)pSrcBlock-&gt;m_pMetadata;</div>
-<div class="line"><a name="l14714"></a><span class="lineno">14714</span>&#160;        <span class="keywordflow">for</span>(VmaSuballocationList::iterator srcSuballocIt = pSrcMetadata-&gt;m_Suballocations.begin();</div>
-<div class="line"><a name="l14715"></a><span class="lineno">14715</span>&#160;            !end &amp;&amp; srcSuballocIt != pSrcMetadata-&gt;m_Suballocations.end(); )</div>
-<div class="line"><a name="l14716"></a><span class="lineno">14716</span>&#160;        {</div>
-<div class="line"><a name="l14717"></a><span class="lineno">14717</span>&#160;            VmaAllocation_T* <span class="keyword">const</span> pAlloc = srcSuballocIt-&gt;hAllocation;</div>
-<div class="line"><a name="l14718"></a><span class="lineno">14718</span>&#160;            <span class="keyword">const</span> VkDeviceSize srcAllocAlignment = pAlloc-&gt;GetAlignment();</div>
-<div class="line"><a name="l14719"></a><span class="lineno">14719</span>&#160;            <span class="keyword">const</span> VkDeviceSize srcAllocSize = srcSuballocIt-&gt;size;</div>
-<div class="line"><a name="l14720"></a><span class="lineno">14720</span>&#160;            <span class="keywordflow">if</span>(m_AllocationsMoved == maxAllocationsToMove ||</div>
-<div class="line"><a name="l14721"></a><span class="lineno">14721</span>&#160;                m_BytesMoved + srcAllocSize &gt; maxBytesToMove)</div>
-<div class="line"><a name="l14722"></a><span class="lineno">14722</span>&#160;            {</div>
-<div class="line"><a name="l14723"></a><span class="lineno">14723</span>&#160;                end = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l14724"></a><span class="lineno">14724</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l14725"></a><span class="lineno">14725</span>&#160;            }</div>
-<div class="line"><a name="l14726"></a><span class="lineno">14726</span>&#160;            <span class="keyword">const</span> VkDeviceSize srcAllocOffset = srcSuballocIt-&gt;offset;</div>
-<div class="line"><a name="l14727"></a><span class="lineno">14727</span>&#160; </div>
-<div class="line"><a name="l14728"></a><span class="lineno">14728</span>&#160;            VmaDefragmentationMove move = {};</div>
-<div class="line"><a name="l14729"></a><span class="lineno">14729</span>&#160;            <span class="comment">// Try to place it in one of free spaces from the database.</span></div>
-<div class="line"><a name="l14730"></a><span class="lineno">14730</span>&#160;            <span class="keywordtype">size_t</span> freeSpaceInfoIndex;</div>
-<div class="line"><a name="l14731"></a><span class="lineno">14731</span>&#160;            VkDeviceSize dstAllocOffset;</div>
-<div class="line"><a name="l14732"></a><span class="lineno">14732</span>&#160;            <span class="keywordflow">if</span>(freeSpaceDb.Fetch(srcAllocAlignment, srcAllocSize,</div>
-<div class="line"><a name="l14733"></a><span class="lineno">14733</span>&#160;                freeSpaceInfoIndex, dstAllocOffset))</div>
-<div class="line"><a name="l14734"></a><span class="lineno">14734</span>&#160;            {</div>
-<div class="line"><a name="l14735"></a><span class="lineno">14735</span>&#160;                <span class="keywordtype">size_t</span> freeSpaceOrigBlockIndex = m_BlockInfos[freeSpaceInfoIndex].origBlockIndex;</div>
-<div class="line"><a name="l14736"></a><span class="lineno">14736</span>&#160;                VmaDeviceMemoryBlock* pFreeSpaceBlock = m_pBlockVector-&gt;GetBlock(freeSpaceOrigBlockIndex);</div>
-<div class="line"><a name="l14737"></a><span class="lineno">14737</span>&#160;                VmaBlockMetadata_Generic* pFreeSpaceMetadata = (VmaBlockMetadata_Generic*)pFreeSpaceBlock-&gt;m_pMetadata;</div>
-<div class="line"><a name="l14738"></a><span class="lineno">14738</span>&#160; </div>
-<div class="line"><a name="l14739"></a><span class="lineno">14739</span>&#160;                <span class="comment">// Same block</span></div>
-<div class="line"><a name="l14740"></a><span class="lineno">14740</span>&#160;                <span class="keywordflow">if</span>(freeSpaceInfoIndex == srcBlockInfoIndex)</div>
-<div class="line"><a name="l14741"></a><span class="lineno">14741</span>&#160;                {</div>
-<div class="line"><a name="l14742"></a><span class="lineno">14742</span>&#160;                    VMA_ASSERT(dstAllocOffset &lt;= srcAllocOffset);</div>
-<div class="line"><a name="l14743"></a><span class="lineno">14743</span>&#160; </div>
-<div class="line"><a name="l14744"></a><span class="lineno">14744</span>&#160;                    <span class="comment">// MOVE OPTION 1: Move the allocation inside the same block by decreasing offset.</span></div>
-<div class="line"><a name="l14745"></a><span class="lineno">14745</span>&#160; </div>
-<div class="line"><a name="l14746"></a><span class="lineno">14746</span>&#160;                    VmaSuballocation suballoc = *srcSuballocIt;</div>
-<div class="line"><a name="l14747"></a><span class="lineno">14747</span>&#160;                    suballoc.offset = dstAllocOffset;</div>
-<div class="line"><a name="l14748"></a><span class="lineno">14748</span>&#160;                    suballoc.hAllocation-&gt;ChangeOffset(dstAllocOffset);</div>
-<div class="line"><a name="l14749"></a><span class="lineno">14749</span>&#160;                    m_BytesMoved += srcAllocSize;</div>
-<div class="line"><a name="l14750"></a><span class="lineno">14750</span>&#160;                    ++m_AllocationsMoved;</div>
-<div class="line"><a name="l14751"></a><span class="lineno">14751</span>&#160; </div>
-<div class="line"><a name="l14752"></a><span class="lineno">14752</span>&#160;                    VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;</div>
-<div class="line"><a name="l14753"></a><span class="lineno">14753</span>&#160;                    ++nextSuballocIt;</div>
-<div class="line"><a name="l14754"></a><span class="lineno">14754</span>&#160;                    pSrcMetadata-&gt;m_Suballocations.erase(srcSuballocIt);</div>
-<div class="line"><a name="l14755"></a><span class="lineno">14755</span>&#160;                    srcSuballocIt = nextSuballocIt;</div>
-<div class="line"><a name="l14756"></a><span class="lineno">14756</span>&#160; </div>
-<div class="line"><a name="l14757"></a><span class="lineno">14757</span>&#160;                    InsertSuballoc(pFreeSpaceMetadata, suballoc);</div>
-<div class="line"><a name="l14758"></a><span class="lineno">14758</span>&#160; </div>
-<div class="line"><a name="l14759"></a><span class="lineno">14759</span>&#160;                    move.srcBlockIndex = srcOrigBlockIndex;</div>
-<div class="line"><a name="l14760"></a><span class="lineno">14760</span>&#160;                    move.dstBlockIndex = freeSpaceOrigBlockIndex;</div>
-<div class="line"><a name="l14761"></a><span class="lineno">14761</span>&#160;                    move.srcOffset = srcAllocOffset;</div>
-<div class="line"><a name="l14762"></a><span class="lineno">14762</span>&#160;                    move.dstOffset = dstAllocOffset;</div>
-<div class="line"><a name="l14763"></a><span class="lineno">14763</span>&#160;                    move.size = srcAllocSize;</div>
-<div class="line"><a name="l14764"></a><span class="lineno">14764</span>&#160; </div>
-<div class="line"><a name="l14765"></a><span class="lineno">14765</span>&#160;                    moves.push_back(move);</div>
-<div class="line"><a name="l14766"></a><span class="lineno">14766</span>&#160;                }</div>
-<div class="line"><a name="l14767"></a><span class="lineno">14767</span>&#160;                <span class="comment">// Different block</span></div>
-<div class="line"><a name="l14768"></a><span class="lineno">14768</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14769"></a><span class="lineno">14769</span>&#160;                {</div>
-<div class="line"><a name="l14770"></a><span class="lineno">14770</span>&#160;                    <span class="comment">// MOVE OPTION 2: Move the allocation to a different block.</span></div>
-<div class="line"><a name="l14771"></a><span class="lineno">14771</span>&#160; </div>
-<div class="line"><a name="l14772"></a><span class="lineno">14772</span>&#160;                    VMA_ASSERT(freeSpaceInfoIndex &lt; srcBlockInfoIndex);</div>
-<div class="line"><a name="l14773"></a><span class="lineno">14773</span>&#160; </div>
-<div class="line"><a name="l14774"></a><span class="lineno">14774</span>&#160;                    VmaSuballocation suballoc = *srcSuballocIt;</div>
-<div class="line"><a name="l14775"></a><span class="lineno">14775</span>&#160;                    suballoc.offset = dstAllocOffset;</div>
-<div class="line"><a name="l14776"></a><span class="lineno">14776</span>&#160;                    suballoc.hAllocation-&gt;ChangeBlockAllocation(m_hAllocator, pFreeSpaceBlock, dstAllocOffset);</div>
-<div class="line"><a name="l14777"></a><span class="lineno">14777</span>&#160;                    m_BytesMoved += srcAllocSize;</div>
-<div class="line"><a name="l14778"></a><span class="lineno">14778</span>&#160;                    ++m_AllocationsMoved;</div>
-<div class="line"><a name="l14779"></a><span class="lineno">14779</span>&#160; </div>
-<div class="line"><a name="l14780"></a><span class="lineno">14780</span>&#160;                    VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;</div>
-<div class="line"><a name="l14781"></a><span class="lineno">14781</span>&#160;                    ++nextSuballocIt;</div>
-<div class="line"><a name="l14782"></a><span class="lineno">14782</span>&#160;                    pSrcMetadata-&gt;m_Suballocations.erase(srcSuballocIt);</div>
-<div class="line"><a name="l14783"></a><span class="lineno">14783</span>&#160;                    srcSuballocIt = nextSuballocIt;</div>
-<div class="line"><a name="l14784"></a><span class="lineno">14784</span>&#160; </div>
-<div class="line"><a name="l14785"></a><span class="lineno">14785</span>&#160;                    InsertSuballoc(pFreeSpaceMetadata, suballoc);</div>
-<div class="line"><a name="l14786"></a><span class="lineno">14786</span>&#160; </div>
-<div class="line"><a name="l14787"></a><span class="lineno">14787</span>&#160;                    move.srcBlockIndex = srcOrigBlockIndex;</div>
-<div class="line"><a name="l14788"></a><span class="lineno">14788</span>&#160;                    move.dstBlockIndex = freeSpaceOrigBlockIndex;</div>
-<div class="line"><a name="l14789"></a><span class="lineno">14789</span>&#160;                    move.srcOffset = srcAllocOffset;</div>
-<div class="line"><a name="l14790"></a><span class="lineno">14790</span>&#160;                    move.dstOffset = dstAllocOffset;</div>
-<div class="line"><a name="l14791"></a><span class="lineno">14791</span>&#160;                    move.size = srcAllocSize;</div>
-<div class="line"><a name="l14792"></a><span class="lineno">14792</span>&#160; </div>
-<div class="line"><a name="l14793"></a><span class="lineno">14793</span>&#160;                    moves.push_back(move);</div>
-<div class="line"><a name="l14794"></a><span class="lineno">14794</span>&#160;                }</div>
-<div class="line"><a name="l14795"></a><span class="lineno">14795</span>&#160;            }</div>
-<div class="line"><a name="l14796"></a><span class="lineno">14796</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14797"></a><span class="lineno">14797</span>&#160;            {</div>
-<div class="line"><a name="l14798"></a><span class="lineno">14798</span>&#160;                dstAllocOffset = VmaAlignUp(dstOffset, srcAllocAlignment);</div>
-<div class="line"><a name="l14799"></a><span class="lineno">14799</span>&#160; </div>
-<div class="line"><a name="l14800"></a><span class="lineno">14800</span>&#160;                <span class="comment">// If the allocation doesn&#39;t fit before the end of dstBlock, forward to next block.</span></div>
-<div class="line"><a name="l14801"></a><span class="lineno">14801</span>&#160;                <span class="keywordflow">while</span>(dstBlockInfoIndex &lt; srcBlockInfoIndex &amp;&amp;</div>
-<div class="line"><a name="l14802"></a><span class="lineno">14802</span>&#160;                    dstAllocOffset + srcAllocSize &gt; dstBlockSize)</div>
-<div class="line"><a name="l14803"></a><span class="lineno">14803</span>&#160;                {</div>
-<div class="line"><a name="l14804"></a><span class="lineno">14804</span>&#160;                    <span class="comment">// But before that, register remaining free space at the end of dst block.</span></div>
-<div class="line"><a name="l14805"></a><span class="lineno">14805</span>&#160;                    freeSpaceDb.Register(dstBlockInfoIndex, dstOffset, dstBlockSize - dstOffset);</div>
-<div class="line"><a name="l14806"></a><span class="lineno">14806</span>&#160; </div>
-<div class="line"><a name="l14807"></a><span class="lineno">14807</span>&#160;                    ++dstBlockInfoIndex;</div>
-<div class="line"><a name="l14808"></a><span class="lineno">14808</span>&#160;                    dstOrigBlockIndex = m_BlockInfos[dstBlockInfoIndex].origBlockIndex;</div>
-<div class="line"><a name="l14809"></a><span class="lineno">14809</span>&#160;                    pDstBlock = m_pBlockVector-&gt;GetBlock(dstOrigBlockIndex);</div>
-<div class="line"><a name="l14810"></a><span class="lineno">14810</span>&#160;                    pDstMetadata = (VmaBlockMetadata_Generic*)pDstBlock-&gt;m_pMetadata;</div>
-<div class="line"><a name="l14811"></a><span class="lineno">14811</span>&#160;                    dstBlockSize = pDstMetadata-&gt;GetSize();</div>
-<div class="line"><a name="l14812"></a><span class="lineno">14812</span>&#160;                    dstOffset = 0;</div>
-<div class="line"><a name="l14813"></a><span class="lineno">14813</span>&#160;                    dstAllocOffset = 0;</div>
-<div class="line"><a name="l14814"></a><span class="lineno">14814</span>&#160;                }</div>
-<div class="line"><a name="l14815"></a><span class="lineno">14815</span>&#160; </div>
-<div class="line"><a name="l14816"></a><span class="lineno">14816</span>&#160;                <span class="comment">// Same block</span></div>
-<div class="line"><a name="l14817"></a><span class="lineno">14817</span>&#160;                <span class="keywordflow">if</span>(dstBlockInfoIndex == srcBlockInfoIndex)</div>
-<div class="line"><a name="l14818"></a><span class="lineno">14818</span>&#160;                {</div>
-<div class="line"><a name="l14819"></a><span class="lineno">14819</span>&#160;                    VMA_ASSERT(dstAllocOffset &lt;= srcAllocOffset);</div>
-<div class="line"><a name="l14820"></a><span class="lineno">14820</span>&#160; </div>
-<div class="line"><a name="l14821"></a><span class="lineno">14821</span>&#160;                    <span class="keyword">const</span> <span class="keywordtype">bool</span> overlap = dstAllocOffset + srcAllocSize &gt; srcAllocOffset;</div>
-<div class="line"><a name="l14822"></a><span class="lineno">14822</span>&#160; </div>
-<div class="line"><a name="l14823"></a><span class="lineno">14823</span>&#160;                    <span class="keywordtype">bool</span> skipOver = overlap;</div>
-<div class="line"><a name="l14824"></a><span class="lineno">14824</span>&#160;                    <span class="keywordflow">if</span>(overlap &amp;&amp; m_OverlappingMoveSupported &amp;&amp; dstAllocOffset &lt; srcAllocOffset)</div>
-<div class="line"><a name="l14825"></a><span class="lineno">14825</span>&#160;                    {</div>
-<div class="line"><a name="l14826"></a><span class="lineno">14826</span>&#160;                        <span class="comment">// If destination and source place overlap, skip if it would move it</span></div>
-<div class="line"><a name="l14827"></a><span class="lineno">14827</span>&#160;                        <span class="comment">// by only &lt; 1/64 of its size.</span></div>
-<div class="line"><a name="l14828"></a><span class="lineno">14828</span>&#160;                        skipOver = (srcAllocOffset - dstAllocOffset) * 64 &lt; srcAllocSize;</div>
-<div class="line"><a name="l14829"></a><span class="lineno">14829</span>&#160;                    }</div>
-<div class="line"><a name="l14830"></a><span class="lineno">14830</span>&#160; </div>
-<div class="line"><a name="l14831"></a><span class="lineno">14831</span>&#160;                    <span class="keywordflow">if</span>(skipOver)</div>
-<div class="line"><a name="l14832"></a><span class="lineno">14832</span>&#160;                    {</div>
-<div class="line"><a name="l14833"></a><span class="lineno">14833</span>&#160;                        freeSpaceDb.Register(dstBlockInfoIndex, dstOffset, srcAllocOffset - dstOffset);</div>
-<div class="line"><a name="l14834"></a><span class="lineno">14834</span>&#160; </div>
-<div class="line"><a name="l14835"></a><span class="lineno">14835</span>&#160;                        dstOffset = srcAllocOffset + srcAllocSize;</div>
-<div class="line"><a name="l14836"></a><span class="lineno">14836</span>&#160;                        ++srcSuballocIt;</div>
-<div class="line"><a name="l14837"></a><span class="lineno">14837</span>&#160;                    }</div>
-<div class="line"><a name="l14838"></a><span class="lineno">14838</span>&#160;                    <span class="comment">// MOVE OPTION 1: Move the allocation inside the same block by decreasing offset.</span></div>
-<div class="line"><a name="l14839"></a><span class="lineno">14839</span>&#160;                    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14840"></a><span class="lineno">14840</span>&#160;                    {</div>
-<div class="line"><a name="l14841"></a><span class="lineno">14841</span>&#160;                        srcSuballocIt-&gt;offset = dstAllocOffset;</div>
-<div class="line"><a name="l14842"></a><span class="lineno">14842</span>&#160;                        srcSuballocIt-&gt;hAllocation-&gt;ChangeOffset(dstAllocOffset);</div>
-<div class="line"><a name="l14843"></a><span class="lineno">14843</span>&#160;                        dstOffset = dstAllocOffset + srcAllocSize;</div>
-<div class="line"><a name="l14844"></a><span class="lineno">14844</span>&#160;                        m_BytesMoved += srcAllocSize;</div>
-<div class="line"><a name="l14845"></a><span class="lineno">14845</span>&#160;                        ++m_AllocationsMoved;</div>
-<div class="line"><a name="l14846"></a><span class="lineno">14846</span>&#160;                        ++srcSuballocIt;</div>
-<div class="line"><a name="l14847"></a><span class="lineno">14847</span>&#160; </div>
-<div class="line"><a name="l14848"></a><span class="lineno">14848</span>&#160;                        move.srcBlockIndex = srcOrigBlockIndex;</div>
-<div class="line"><a name="l14849"></a><span class="lineno">14849</span>&#160;                        move.dstBlockIndex = dstOrigBlockIndex;</div>
-<div class="line"><a name="l14850"></a><span class="lineno">14850</span>&#160;                        move.srcOffset = srcAllocOffset;</div>
-<div class="line"><a name="l14851"></a><span class="lineno">14851</span>&#160;                        move.dstOffset = dstAllocOffset;</div>
-<div class="line"><a name="l14852"></a><span class="lineno">14852</span>&#160;                        move.size = srcAllocSize;</div>
-<div class="line"><a name="l14853"></a><span class="lineno">14853</span>&#160; </div>
-<div class="line"><a name="l14854"></a><span class="lineno">14854</span>&#160;                        moves.push_back(move);</div>
-<div class="line"><a name="l14855"></a><span class="lineno">14855</span>&#160;                    }</div>
-<div class="line"><a name="l14856"></a><span class="lineno">14856</span>&#160;                }</div>
-<div class="line"><a name="l14857"></a><span class="lineno">14857</span>&#160;                <span class="comment">// Different block</span></div>
-<div class="line"><a name="l14858"></a><span class="lineno">14858</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14859"></a><span class="lineno">14859</span>&#160;                {</div>
-<div class="line"><a name="l14860"></a><span class="lineno">14860</span>&#160;                    <span class="comment">// MOVE OPTION 2: Move the allocation to a different block.</span></div>
-<div class="line"><a name="l14861"></a><span class="lineno">14861</span>&#160; </div>
-<div class="line"><a name="l14862"></a><span class="lineno">14862</span>&#160;                    VMA_ASSERT(dstBlockInfoIndex &lt; srcBlockInfoIndex);</div>
-<div class="line"><a name="l14863"></a><span class="lineno">14863</span>&#160;                    VMA_ASSERT(dstAllocOffset + srcAllocSize &lt;= dstBlockSize);</div>
-<div class="line"><a name="l14864"></a><span class="lineno">14864</span>&#160; </div>
-<div class="line"><a name="l14865"></a><span class="lineno">14865</span>&#160;                    VmaSuballocation suballoc = *srcSuballocIt;</div>
-<div class="line"><a name="l14866"></a><span class="lineno">14866</span>&#160;                    suballoc.offset = dstAllocOffset;</div>
-<div class="line"><a name="l14867"></a><span class="lineno">14867</span>&#160;                    suballoc.hAllocation-&gt;ChangeBlockAllocation(m_hAllocator, pDstBlock, dstAllocOffset);</div>
-<div class="line"><a name="l14868"></a><span class="lineno">14868</span>&#160;                    dstOffset = dstAllocOffset + srcAllocSize;</div>
-<div class="line"><a name="l14869"></a><span class="lineno">14869</span>&#160;                    m_BytesMoved += srcAllocSize;</div>
-<div class="line"><a name="l14870"></a><span class="lineno">14870</span>&#160;                    ++m_AllocationsMoved;</div>
-<div class="line"><a name="l14871"></a><span class="lineno">14871</span>&#160; </div>
-<div class="line"><a name="l14872"></a><span class="lineno">14872</span>&#160;                    VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;</div>
-<div class="line"><a name="l14873"></a><span class="lineno">14873</span>&#160;                    ++nextSuballocIt;</div>
-<div class="line"><a name="l14874"></a><span class="lineno">14874</span>&#160;                    pSrcMetadata-&gt;m_Suballocations.erase(srcSuballocIt);</div>
-<div class="line"><a name="l14875"></a><span class="lineno">14875</span>&#160;                    srcSuballocIt = nextSuballocIt;</div>
-<div class="line"><a name="l14876"></a><span class="lineno">14876</span>&#160; </div>
-<div class="line"><a name="l14877"></a><span class="lineno">14877</span>&#160;                    pDstMetadata-&gt;m_Suballocations.push_back(suballoc);</div>
-<div class="line"><a name="l14878"></a><span class="lineno">14878</span>&#160; </div>
-<div class="line"><a name="l14879"></a><span class="lineno">14879</span>&#160;                    move.srcBlockIndex = srcOrigBlockIndex;</div>
-<div class="line"><a name="l14880"></a><span class="lineno">14880</span>&#160;                    move.dstBlockIndex = dstOrigBlockIndex;</div>
-<div class="line"><a name="l14881"></a><span class="lineno">14881</span>&#160;                    move.srcOffset = srcAllocOffset;</div>
-<div class="line"><a name="l14882"></a><span class="lineno">14882</span>&#160;                    move.dstOffset = dstAllocOffset;</div>
-<div class="line"><a name="l14883"></a><span class="lineno">14883</span>&#160;                    move.size = srcAllocSize;</div>
-<div class="line"><a name="l14884"></a><span class="lineno">14884</span>&#160; </div>
-<div class="line"><a name="l14885"></a><span class="lineno">14885</span>&#160;                    moves.push_back(move);</div>
-<div class="line"><a name="l14886"></a><span class="lineno">14886</span>&#160;                }</div>
-<div class="line"><a name="l14887"></a><span class="lineno">14887</span>&#160;            }</div>
-<div class="line"><a name="l14888"></a><span class="lineno">14888</span>&#160;        }</div>
-<div class="line"><a name="l14889"></a><span class="lineno">14889</span>&#160;    }</div>
-<div class="line"><a name="l14890"></a><span class="lineno">14890</span>&#160; </div>
-<div class="line"><a name="l14891"></a><span class="lineno">14891</span>&#160;    m_BlockInfos.clear();</div>
-<div class="line"><a name="l14892"></a><span class="lineno">14892</span>&#160; </div>
-<div class="line"><a name="l14893"></a><span class="lineno">14893</span>&#160;    PostprocessMetadata();</div>
-<div class="line"><a name="l14894"></a><span class="lineno">14894</span>&#160; </div>
-<div class="line"><a name="l14895"></a><span class="lineno">14895</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l14896"></a><span class="lineno">14896</span>&#160;}</div>
-<div class="line"><a name="l14897"></a><span class="lineno">14897</span>&#160; </div>
-<div class="line"><a name="l14898"></a><span class="lineno">14898</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationAlgorithm_Fast::PreprocessMetadata()</div>
-<div class="line"><a name="l14899"></a><span class="lineno">14899</span>&#160;{</div>
-<div class="line"><a name="l14900"></a><span class="lineno">14900</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_pBlockVector-&gt;GetBlockCount();</div>
-<div class="line"><a name="l14901"></a><span class="lineno">14901</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; blockIndex &lt; blockCount; ++blockIndex)</div>
-<div class="line"><a name="l14902"></a><span class="lineno">14902</span>&#160;    {</div>
-<div class="line"><a name="l14903"></a><span class="lineno">14903</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pMetadata =</div>
-<div class="line"><a name="l14904"></a><span class="lineno">14904</span>&#160;            (VmaBlockMetadata_Generic*)m_pBlockVector-&gt;GetBlock(blockIndex)-&gt;m_pMetadata;</div>
-<div class="line"><a name="l14905"></a><span class="lineno">14905</span>&#160;        pMetadata-&gt;m_FreeCount = 0;</div>
-<div class="line"><a name="l14906"></a><span class="lineno">14906</span>&#160;        pMetadata-&gt;m_SumFreeSize = pMetadata-&gt;GetSize();</div>
-<div class="line"><a name="l14907"></a><span class="lineno">14907</span>&#160;        pMetadata-&gt;m_FreeSuballocationsBySize.clear();</div>
-<div class="line"><a name="l14908"></a><span class="lineno">14908</span>&#160;        <span class="keywordflow">for</span>(VmaSuballocationList::iterator it = pMetadata-&gt;m_Suballocations.begin();</div>
-<div class="line"><a name="l14909"></a><span class="lineno">14909</span>&#160;            it != pMetadata-&gt;m_Suballocations.end(); )</div>
-<div class="line"><a name="l14910"></a><span class="lineno">14910</span>&#160;        {</div>
-<div class="line"><a name="l14911"></a><span class="lineno">14911</span>&#160;            <span class="keywordflow">if</span>(it-&gt;type == VMA_SUBALLOCATION_TYPE_FREE)</div>
-<div class="line"><a name="l14912"></a><span class="lineno">14912</span>&#160;            {</div>
-<div class="line"><a name="l14913"></a><span class="lineno">14913</span>&#160;                VmaSuballocationList::iterator nextIt = it;</div>
-<div class="line"><a name="l14914"></a><span class="lineno">14914</span>&#160;                ++nextIt;</div>
-<div class="line"><a name="l14915"></a><span class="lineno">14915</span>&#160;                pMetadata-&gt;m_Suballocations.erase(it);</div>
-<div class="line"><a name="l14916"></a><span class="lineno">14916</span>&#160;                it = nextIt;</div>
-<div class="line"><a name="l14917"></a><span class="lineno">14917</span>&#160;            }</div>
-<div class="line"><a name="l14918"></a><span class="lineno">14918</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14919"></a><span class="lineno">14919</span>&#160;            {</div>
-<div class="line"><a name="l14920"></a><span class="lineno">14920</span>&#160;                ++it;</div>
-<div class="line"><a name="l14921"></a><span class="lineno">14921</span>&#160;            }</div>
-<div class="line"><a name="l14922"></a><span class="lineno">14922</span>&#160;        }</div>
-<div class="line"><a name="l14923"></a><span class="lineno">14923</span>&#160;    }</div>
-<div class="line"><a name="l14924"></a><span class="lineno">14924</span>&#160;}</div>
-<div class="line"><a name="l14925"></a><span class="lineno">14925</span>&#160; </div>
-<div class="line"><a name="l14926"></a><span class="lineno">14926</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationAlgorithm_Fast::PostprocessMetadata()</div>
-<div class="line"><a name="l14927"></a><span class="lineno">14927</span>&#160;{</div>
-<div class="line"><a name="l14928"></a><span class="lineno">14928</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_pBlockVector-&gt;GetBlockCount();</div>
-<div class="line"><a name="l14929"></a><span class="lineno">14929</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; blockIndex &lt; blockCount; ++blockIndex)</div>
-<div class="line"><a name="l14930"></a><span class="lineno">14930</span>&#160;    {</div>
-<div class="line"><a name="l14931"></a><span class="lineno">14931</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pMetadata =</div>
-<div class="line"><a name="l14932"></a><span class="lineno">14932</span>&#160;            (VmaBlockMetadata_Generic*)m_pBlockVector-&gt;GetBlock(blockIndex)-&gt;m_pMetadata;</div>
-<div class="line"><a name="l14933"></a><span class="lineno">14933</span>&#160;        <span class="keyword">const</span> VkDeviceSize blockSize = pMetadata-&gt;GetSize();</div>
-<div class="line"><a name="l14934"></a><span class="lineno">14934</span>&#160; </div>
-<div class="line"><a name="l14935"></a><span class="lineno">14935</span>&#160;        <span class="comment">// No allocations in this block - entire area is free.</span></div>
-<div class="line"><a name="l14936"></a><span class="lineno">14936</span>&#160;        <span class="keywordflow">if</span>(pMetadata-&gt;m_Suballocations.empty())</div>
-<div class="line"><a name="l14937"></a><span class="lineno">14937</span>&#160;        {</div>
-<div class="line"><a name="l14938"></a><span class="lineno">14938</span>&#160;            pMetadata-&gt;m_FreeCount = 1;</div>
-<div class="line"><a name="l14939"></a><span class="lineno">14939</span>&#160;            <span class="comment">//pMetadata-&gt;m_SumFreeSize is already set to blockSize.</span></div>
-<div class="line"><a name="l14940"></a><span class="lineno">14940</span>&#160;            VmaSuballocation suballoc = {</div>
-<div class="line"><a name="l14941"></a><span class="lineno">14941</span>&#160;                0, <span class="comment">// offset</span></div>
-<div class="line"><a name="l14942"></a><span class="lineno">14942</span>&#160;                blockSize, <span class="comment">// size</span></div>
-<div class="line"><a name="l14943"></a><span class="lineno">14943</span>&#160;                VMA_NULL, <span class="comment">// hAllocation</span></div>
-<div class="line"><a name="l14944"></a><span class="lineno">14944</span>&#160;                VMA_SUBALLOCATION_TYPE_FREE };</div>
-<div class="line"><a name="l14945"></a><span class="lineno">14945</span>&#160;            pMetadata-&gt;m_Suballocations.push_back(suballoc);</div>
-<div class="line"><a name="l14946"></a><span class="lineno">14946</span>&#160;            pMetadata-&gt;RegisterFreeSuballocation(pMetadata-&gt;m_Suballocations.begin());</div>
-<div class="line"><a name="l14947"></a><span class="lineno">14947</span>&#160;        }</div>
-<div class="line"><a name="l14948"></a><span class="lineno">14948</span>&#160;        <span class="comment">// There are some allocations in this block.</span></div>
-<div class="line"><a name="l14949"></a><span class="lineno">14949</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14950"></a><span class="lineno">14950</span>&#160;        {</div>
-<div class="line"><a name="l14951"></a><span class="lineno">14951</span>&#160;            VkDeviceSize offset = 0;</div>
-<div class="line"><a name="l14952"></a><span class="lineno">14952</span>&#160;            VmaSuballocationList::iterator it;</div>
-<div class="line"><a name="l14953"></a><span class="lineno">14953</span>&#160;            <span class="keywordflow">for</span>(it = pMetadata-&gt;m_Suballocations.begin();</div>
-<div class="line"><a name="l14954"></a><span class="lineno">14954</span>&#160;                it != pMetadata-&gt;m_Suballocations.end();</div>
-<div class="line"><a name="l14955"></a><span class="lineno">14955</span>&#160;                ++it)</div>
-<div class="line"><a name="l14956"></a><span class="lineno">14956</span>&#160;            {</div>
-<div class="line"><a name="l14957"></a><span class="lineno">14957</span>&#160;                VMA_ASSERT(it-&gt;type != VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l14958"></a><span class="lineno">14958</span>&#160;                VMA_ASSERT(it-&gt;offset &gt;= offset);</div>
-<div class="line"><a name="l14959"></a><span class="lineno">14959</span>&#160; </div>
-<div class="line"><a name="l14960"></a><span class="lineno">14960</span>&#160;                <span class="comment">// Need to insert preceding free space.</span></div>
-<div class="line"><a name="l14961"></a><span class="lineno">14961</span>&#160;                <span class="keywordflow">if</span>(it-&gt;offset &gt; offset)</div>
-<div class="line"><a name="l14962"></a><span class="lineno">14962</span>&#160;                {</div>
-<div class="line"><a name="l14963"></a><span class="lineno">14963</span>&#160;                    ++pMetadata-&gt;m_FreeCount;</div>
-<div class="line"><a name="l14964"></a><span class="lineno">14964</span>&#160;                    <span class="keyword">const</span> VkDeviceSize freeSize = it-&gt;offset - offset;</div>
-<div class="line"><a name="l14965"></a><span class="lineno">14965</span>&#160;                    VmaSuballocation suballoc = {</div>
-<div class="line"><a name="l14966"></a><span class="lineno">14966</span>&#160;                        offset, <span class="comment">// offset</span></div>
-<div class="line"><a name="l14967"></a><span class="lineno">14967</span>&#160;                        freeSize, <span class="comment">// size</span></div>
-<div class="line"><a name="l14968"></a><span class="lineno">14968</span>&#160;                        VMA_NULL, <span class="comment">// hAllocation</span></div>
-<div class="line"><a name="l14969"></a><span class="lineno">14969</span>&#160;                        VMA_SUBALLOCATION_TYPE_FREE };</div>
-<div class="line"><a name="l14970"></a><span class="lineno">14970</span>&#160;                    VmaSuballocationList::iterator precedingFreeIt = pMetadata-&gt;m_Suballocations.insert(it, suballoc);</div>
-<div class="line"><a name="l14971"></a><span class="lineno">14971</span>&#160;                    <span class="keywordflow">if</span>(freeSize &gt;= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)</div>
-<div class="line"><a name="l14972"></a><span class="lineno">14972</span>&#160;                    {</div>
-<div class="line"><a name="l14973"></a><span class="lineno">14973</span>&#160;                        pMetadata-&gt;m_FreeSuballocationsBySize.push_back(precedingFreeIt);</div>
-<div class="line"><a name="l14974"></a><span class="lineno">14974</span>&#160;                    }</div>
-<div class="line"><a name="l14975"></a><span class="lineno">14975</span>&#160;                }</div>
-<div class="line"><a name="l14976"></a><span class="lineno">14976</span>&#160; </div>
-<div class="line"><a name="l14977"></a><span class="lineno">14977</span>&#160;                pMetadata-&gt;m_SumFreeSize -= it-&gt;size;</div>
-<div class="line"><a name="l14978"></a><span class="lineno">14978</span>&#160;                offset = it-&gt;offset + it-&gt;size;</div>
-<div class="line"><a name="l14979"></a><span class="lineno">14979</span>&#160;            }</div>
-<div class="line"><a name="l14980"></a><span class="lineno">14980</span>&#160; </div>
-<div class="line"><a name="l14981"></a><span class="lineno">14981</span>&#160;            <span class="comment">// Need to insert trailing free space.</span></div>
-<div class="line"><a name="l14982"></a><span class="lineno">14982</span>&#160;            <span class="keywordflow">if</span>(offset &lt; blockSize)</div>
-<div class="line"><a name="l14983"></a><span class="lineno">14983</span>&#160;            {</div>
-<div class="line"><a name="l14984"></a><span class="lineno">14984</span>&#160;                ++pMetadata-&gt;m_FreeCount;</div>
-<div class="line"><a name="l14985"></a><span class="lineno">14985</span>&#160;                <span class="keyword">const</span> VkDeviceSize freeSize = blockSize - offset;</div>
-<div class="line"><a name="l14986"></a><span class="lineno">14986</span>&#160;                VmaSuballocation suballoc = {</div>
-<div class="line"><a name="l14987"></a><span class="lineno">14987</span>&#160;                    offset, <span class="comment">// offset</span></div>
-<div class="line"><a name="l14988"></a><span class="lineno">14988</span>&#160;                    freeSize, <span class="comment">// size</span></div>
-<div class="line"><a name="l14989"></a><span class="lineno">14989</span>&#160;                    VMA_NULL, <span class="comment">// hAllocation</span></div>
-<div class="line"><a name="l14990"></a><span class="lineno">14990</span>&#160;                    VMA_SUBALLOCATION_TYPE_FREE };</div>
-<div class="line"><a name="l14991"></a><span class="lineno">14991</span>&#160;                VMA_ASSERT(it == pMetadata-&gt;m_Suballocations.end());</div>
-<div class="line"><a name="l14992"></a><span class="lineno">14992</span>&#160;                VmaSuballocationList::iterator trailingFreeIt = pMetadata-&gt;m_Suballocations.insert(it, suballoc);</div>
-<div class="line"><a name="l14993"></a><span class="lineno">14993</span>&#160;                <span class="keywordflow">if</span>(freeSize &gt; VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)</div>
-<div class="line"><a name="l14994"></a><span class="lineno">14994</span>&#160;                {</div>
-<div class="line"><a name="l14995"></a><span class="lineno">14995</span>&#160;                    pMetadata-&gt;m_FreeSuballocationsBySize.push_back(trailingFreeIt);</div>
-<div class="line"><a name="l14996"></a><span class="lineno">14996</span>&#160;                }</div>
-<div class="line"><a name="l14997"></a><span class="lineno">14997</span>&#160;            }</div>
-<div class="line"><a name="l14998"></a><span class="lineno">14998</span>&#160; </div>
-<div class="line"><a name="l14999"></a><span class="lineno">14999</span>&#160;            VMA_SORT(</div>
-<div class="line"><a name="l15000"></a><span class="lineno">15000</span>&#160;                pMetadata-&gt;m_FreeSuballocationsBySize.begin(),</div>
-<div class="line"><a name="l15001"></a><span class="lineno">15001</span>&#160;                pMetadata-&gt;m_FreeSuballocationsBySize.end(),</div>
-<div class="line"><a name="l15002"></a><span class="lineno">15002</span>&#160;                VmaSuballocationItemSizeLess());</div>
-<div class="line"><a name="l15003"></a><span class="lineno">15003</span>&#160;        }</div>
-<div class="line"><a name="l15004"></a><span class="lineno">15004</span>&#160; </div>
-<div class="line"><a name="l15005"></a><span class="lineno">15005</span>&#160;        VMA_HEAVY_ASSERT(pMetadata-&gt;Validate());</div>
-<div class="line"><a name="l15006"></a><span class="lineno">15006</span>&#160;    }</div>
-<div class="line"><a name="l15007"></a><span class="lineno">15007</span>&#160;}</div>
-<div class="line"><a name="l15008"></a><span class="lineno">15008</span>&#160; </div>
-<div class="line"><a name="l15009"></a><span class="lineno">15009</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationAlgorithm_Fast::InsertSuballoc(VmaBlockMetadata_Generic* pMetadata, <span class="keyword">const</span> VmaSuballocation&amp; suballoc)</div>
-<div class="line"><a name="l15010"></a><span class="lineno">15010</span>&#160;{</div>
-<div class="line"><a name="l15011"></a><span class="lineno">15011</span>&#160;    <span class="comment">// TODO: Optimize somehow. Remember iterator instead of searching for it linearly.</span></div>
-<div class="line"><a name="l15012"></a><span class="lineno">15012</span>&#160;    VmaSuballocationList::iterator it = pMetadata-&gt;m_Suballocations.begin();</div>
-<div class="line"><a name="l15013"></a><span class="lineno">15013</span>&#160;    <span class="keywordflow">while</span>(it != pMetadata-&gt;m_Suballocations.end())</div>
-<div class="line"><a name="l15014"></a><span class="lineno">15014</span>&#160;    {</div>
-<div class="line"><a name="l15015"></a><span class="lineno">15015</span>&#160;        <span class="keywordflow">if</span>(it-&gt;offset &lt; suballoc.offset)</div>
-<div class="line"><a name="l15016"></a><span class="lineno">15016</span>&#160;        {</div>
-<div class="line"><a name="l15017"></a><span class="lineno">15017</span>&#160;            ++it;</div>
-<div class="line"><a name="l15018"></a><span class="lineno">15018</span>&#160;        }</div>
-<div class="line"><a name="l15019"></a><span class="lineno">15019</span>&#160;    }</div>
-<div class="line"><a name="l15020"></a><span class="lineno">15020</span>&#160;    pMetadata-&gt;m_Suballocations.insert(it, suballoc);</div>
-<div class="line"><a name="l15021"></a><span class="lineno">15021</span>&#160;}</div>
-<div class="line"><a name="l15022"></a><span class="lineno">15022</span>&#160; </div>
-<div class="line"><a name="l15024"></a><span class="lineno">15024</span>&#160;<span class="comment">// VmaBlockVectorDefragmentationContext</span></div>
-<div class="line"><a name="l15025"></a><span class="lineno">15025</span>&#160; </div>
-<div class="line"><a name="l15026"></a><span class="lineno">15026</span>&#160;VmaBlockVectorDefragmentationContext::VmaBlockVectorDefragmentationContext(</div>
-<div class="line"><a name="l15027"></a><span class="lineno">15027</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
-<div class="line"><a name="l15028"></a><span class="lineno">15028</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> hCustomPool,</div>
-<div class="line"><a name="l15029"></a><span class="lineno">15029</span>&#160;    VmaBlockVector* pBlockVector,</div>
-<div class="line"><a name="l15030"></a><span class="lineno">15030</span>&#160;    uint32_t currFrameIndex) :</div>
-<div class="line"><a name="l15031"></a><span class="lineno">15031</span>&#160;    res(VK_SUCCESS),</div>
-<div class="line"><a name="l15032"></a><span class="lineno">15032</span>&#160;    mutexLocked(false),</div>
-<div class="line"><a name="l15033"></a><span class="lineno">15033</span>&#160;    blockContexts(VmaStlAllocator&lt;VmaBlockDefragmentationContext&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
-<div class="line"><a name="l15034"></a><span class="lineno">15034</span>&#160;    defragmentationMoves(VmaStlAllocator&lt;VmaDefragmentationMove&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
-<div class="line"><a name="l15035"></a><span class="lineno">15035</span>&#160;    defragmentationMovesProcessed(0),</div>
-<div class="line"><a name="l15036"></a><span class="lineno">15036</span>&#160;    defragmentationMovesCommitted(0),</div>
-<div class="line"><a name="l15037"></a><span class="lineno">15037</span>&#160;    hasDefragmentationPlan(0),</div>
-<div class="line"><a name="l15038"></a><span class="lineno">15038</span>&#160;    m_hAllocator(hAllocator),</div>
-<div class="line"><a name="l15039"></a><span class="lineno">15039</span>&#160;    m_hCustomPool(hCustomPool),</div>
-<div class="line"><a name="l15040"></a><span class="lineno">15040</span>&#160;    m_pBlockVector(pBlockVector),</div>
-<div class="line"><a name="l15041"></a><span class="lineno">15041</span>&#160;    m_CurrFrameIndex(currFrameIndex),</div>
-<div class="line"><a name="l15042"></a><span class="lineno">15042</span>&#160;    m_pAlgorithm(VMA_NULL),</div>
-<div class="line"><a name="l15043"></a><span class="lineno">15043</span>&#160;    m_Allocations(VmaStlAllocator&lt;AllocInfo&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
-<div class="line"><a name="l15044"></a><span class="lineno">15044</span>&#160;    m_AllAllocations(false)</div>
-<div class="line"><a name="l15045"></a><span class="lineno">15045</span>&#160;{</div>
-<div class="line"><a name="l15046"></a><span class="lineno">15046</span>&#160;}</div>
-<div class="line"><a name="l15047"></a><span class="lineno">15047</span>&#160; </div>
-<div class="line"><a name="l15048"></a><span class="lineno">15048</span>&#160;VmaBlockVectorDefragmentationContext::~VmaBlockVectorDefragmentationContext()</div>
-<div class="line"><a name="l15049"></a><span class="lineno">15049</span>&#160;{</div>
-<div class="line"><a name="l15050"></a><span class="lineno">15050</span>&#160;    vma_delete(m_hAllocator, m_pAlgorithm);</div>
-<div class="line"><a name="l15051"></a><span class="lineno">15051</span>&#160;}</div>
-<div class="line"><a name="l15052"></a><span class="lineno">15052</span>&#160; </div>
-<div class="line"><a name="l15053"></a><span class="lineno">15053</span>&#160;<span class="keywordtype">void</span> VmaBlockVectorDefragmentationContext::AddAllocation(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAlloc, VkBool32* pChanged)</div>
-<div class="line"><a name="l15054"></a><span class="lineno">15054</span>&#160;{</div>
-<div class="line"><a name="l15055"></a><span class="lineno">15055</span>&#160;    AllocInfo info = { hAlloc, pChanged };</div>
-<div class="line"><a name="l15056"></a><span class="lineno">15056</span>&#160;    m_Allocations.push_back(info);</div>
-<div class="line"><a name="l15057"></a><span class="lineno">15057</span>&#160;}</div>
-<div class="line"><a name="l15058"></a><span class="lineno">15058</span>&#160; </div>
-<div class="line"><a name="l15059"></a><span class="lineno">15059</span>&#160;<span class="keywordtype">void</span> VmaBlockVectorDefragmentationContext::Begin(<span class="keywordtype">bool</span> overlappingMoveSupported, <a class="code" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> flags)</div>
-<div class="line"><a name="l15060"></a><span class="lineno">15060</span>&#160;{</div>
-<div class="line"><a name="l15061"></a><span class="lineno">15061</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> allAllocations = m_AllAllocations ||</div>
-<div class="line"><a name="l15062"></a><span class="lineno">15062</span>&#160;        m_Allocations.size() == m_pBlockVector-&gt;CalcAllocationCount();</div>
-<div class="line"><a name="l15063"></a><span class="lineno">15063</span>&#160; </div>
-<div class="line"><a name="l15064"></a><span class="lineno">15064</span>&#160;<span class="comment">    /********************************</span></div>
-<div class="line"><a name="l15065"></a><span class="lineno">15065</span>&#160;<span class="comment">    HERE IS THE CHOICE OF DEFRAGMENTATION ALGORITHM.</span></div>
-<div class="line"><a name="l15066"></a><span class="lineno">15066</span>&#160;<span class="comment">    ********************************/</span></div>
-<div class="line"><a name="l15067"></a><span class="lineno">15067</span>&#160; </div>
-<div class="line"><a name="l15068"></a><span class="lineno">15068</span>&#160;    <span class="comment">/*</span></div>
-<div class="line"><a name="l15069"></a><span class="lineno">15069</span>&#160;<span class="comment">    Fast algorithm is supported only when certain criteria are met:</span></div>
-<div class="line"><a name="l15070"></a><span class="lineno">15070</span>&#160;<span class="comment">    - VMA_DEBUG_MARGIN is 0.</span></div>
-<div class="line"><a name="l15071"></a><span class="lineno">15071</span>&#160;<span class="comment">    - All allocations in this block vector are moveable.</span></div>
-<div class="line"><a name="l15072"></a><span class="lineno">15072</span>&#160;<span class="comment">    - There is no possibility of image/buffer granularity conflict.</span></div>
-<div class="line"><a name="l15073"></a><span class="lineno">15073</span>&#160;<span class="comment">    - The defragmentation is not incremental</span></div>
-<div class="line"><a name="l15074"></a><span class="lineno">15074</span>&#160;<span class="comment">    */</span></div>
-<div class="line"><a name="l15075"></a><span class="lineno">15075</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_MARGIN == 0 &amp;&amp;</div>
-<div class="line"><a name="l15076"></a><span class="lineno">15076</span>&#160;        allAllocations &amp;&amp;</div>
-<div class="line"><a name="l15077"></a><span class="lineno">15077</span>&#160;        !m_pBlockVector-&gt;IsBufferImageGranularityConflictPossible() &amp;&amp;</div>
-<div class="line"><a name="l15078"></a><span class="lineno">15078</span>&#160;        !(flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a>))</div>
-<div class="line"><a name="l15079"></a><span class="lineno">15079</span>&#160;    {</div>
-<div class="line"><a name="l15080"></a><span class="lineno">15080</span>&#160;        m_pAlgorithm = vma_new(m_hAllocator, VmaDefragmentationAlgorithm_Fast)(</div>
-<div class="line"><a name="l15081"></a><span class="lineno">15081</span>&#160;            m_hAllocator, m_pBlockVector, m_CurrFrameIndex, overlappingMoveSupported);</div>
-<div class="line"><a name="l15082"></a><span class="lineno">15082</span>&#160;    }</div>
-<div class="line"><a name="l15083"></a><span class="lineno">15083</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15084"></a><span class="lineno">15084</span>&#160;    {</div>
-<div class="line"><a name="l15085"></a><span class="lineno">15085</span>&#160;        m_pAlgorithm = vma_new(m_hAllocator, VmaDefragmentationAlgorithm_Generic)(</div>
-<div class="line"><a name="l15086"></a><span class="lineno">15086</span>&#160;            m_hAllocator, m_pBlockVector, m_CurrFrameIndex, overlappingMoveSupported);</div>
-<div class="line"><a name="l15087"></a><span class="lineno">15087</span>&#160;    }</div>
-<div class="line"><a name="l15088"></a><span class="lineno">15088</span>&#160; </div>
-<div class="line"><a name="l15089"></a><span class="lineno">15089</span>&#160;    <span class="keywordflow">if</span>(allAllocations)</div>
-<div class="line"><a name="l15090"></a><span class="lineno">15090</span>&#160;    {</div>
-<div class="line"><a name="l15091"></a><span class="lineno">15091</span>&#160;        m_pAlgorithm-&gt;AddAll();</div>
-<div class="line"><a name="l15092"></a><span class="lineno">15092</span>&#160;    }</div>
-<div class="line"><a name="l15093"></a><span class="lineno">15093</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15094"></a><span class="lineno">15094</span>&#160;    {</div>
-<div class="line"><a name="l15095"></a><span class="lineno">15095</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0, count = m_Allocations.size(); i &lt; count; ++i)</div>
-<div class="line"><a name="l15096"></a><span class="lineno">15096</span>&#160;        {</div>
-<div class="line"><a name="l15097"></a><span class="lineno">15097</span>&#160;            m_pAlgorithm-&gt;AddAllocation(m_Allocations[i].hAlloc, m_Allocations[i].pChanged);</div>
-<div class="line"><a name="l15098"></a><span class="lineno">15098</span>&#160;        }</div>
-<div class="line"><a name="l15099"></a><span class="lineno">15099</span>&#160;    }</div>
-<div class="line"><a name="l15100"></a><span class="lineno">15100</span>&#160;}</div>
-<div class="line"><a name="l15101"></a><span class="lineno">15101</span>&#160; </div>
-<div class="line"><a name="l15103"></a><span class="lineno">15103</span>&#160;<span class="comment">// VmaDefragmentationContext</span></div>
-<div class="line"><a name="l15104"></a><span class="lineno">15104</span>&#160; </div>
-<div class="line"><a name="l15105"></a><span class="lineno">15105</span>&#160;VmaDefragmentationContext_T::VmaDefragmentationContext_T(</div>
-<div class="line"><a name="l15106"></a><span class="lineno">15106</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
-<div class="line"><a name="l15107"></a><span class="lineno">15107</span>&#160;    uint32_t currFrameIndex,</div>
-<div class="line"><a name="l15108"></a><span class="lineno">15108</span>&#160;    uint32_t flags,</div>
-<div class="line"><a name="l15109"></a><span class="lineno">15109</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats) :</div>
-<div class="line"><a name="l15110"></a><span class="lineno">15110</span>&#160;    m_hAllocator(hAllocator),</div>
-<div class="line"><a name="l15111"></a><span class="lineno">15111</span>&#160;    m_CurrFrameIndex(currFrameIndex),</div>
-<div class="line"><a name="l15112"></a><span class="lineno">15112</span>&#160;    m_Flags(flags),</div>
-<div class="line"><a name="l15113"></a><span class="lineno">15113</span>&#160;    m_pStats(pStats),</div>
-<div class="line"><a name="l15114"></a><span class="lineno">15114</span>&#160;    m_CustomPoolContexts(VmaStlAllocator&lt;VmaBlockVectorDefragmentationContext*&gt;(hAllocator-&gt;GetAllocationCallbacks()))</div>
-<div class="line"><a name="l15115"></a><span class="lineno">15115</span>&#160;{</div>
-<div class="line"><a name="l15116"></a><span class="lineno">15116</span>&#160;    memset(m_DefaultPoolContexts, 0, <span class="keyword">sizeof</span>(m_DefaultPoolContexts));</div>
-<div class="line"><a name="l15117"></a><span class="lineno">15117</span>&#160;}</div>
-<div class="line"><a name="l15118"></a><span class="lineno">15118</span>&#160; </div>
-<div class="line"><a name="l15119"></a><span class="lineno">15119</span>&#160;VmaDefragmentationContext_T::~VmaDefragmentationContext_T()</div>
-<div class="line"><a name="l15120"></a><span class="lineno">15120</span>&#160;{</div>
-<div class="line"><a name="l15121"></a><span class="lineno">15121</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_CustomPoolContexts.size(); i--; )</div>
-<div class="line"><a name="l15122"></a><span class="lineno">15122</span>&#160;    {</div>
-<div class="line"><a name="l15123"></a><span class="lineno">15123</span>&#160;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_CustomPoolContexts[i];</div>
-<div class="line"><a name="l15124"></a><span class="lineno">15124</span>&#160;        pBlockVectorCtx-&gt;GetBlockVector()-&gt;DefragmentationEnd(pBlockVectorCtx, m_Flags, m_pStats);</div>
-<div class="line"><a name="l15125"></a><span class="lineno">15125</span>&#160;        vma_delete(m_hAllocator, pBlockVectorCtx);</div>
-<div class="line"><a name="l15126"></a><span class="lineno">15126</span>&#160;    }</div>
-<div class="line"><a name="l15127"></a><span class="lineno">15127</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_hAllocator-&gt;m_MemProps.memoryTypeCount; i--; )</div>
-<div class="line"><a name="l15128"></a><span class="lineno">15128</span>&#160;    {</div>
-<div class="line"><a name="l15129"></a><span class="lineno">15129</span>&#160;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_DefaultPoolContexts[i];</div>
-<div class="line"><a name="l15130"></a><span class="lineno">15130</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx)</div>
-<div class="line"><a name="l15131"></a><span class="lineno">15131</span>&#160;        {</div>
-<div class="line"><a name="l15132"></a><span class="lineno">15132</span>&#160;            pBlockVectorCtx-&gt;GetBlockVector()-&gt;DefragmentationEnd(pBlockVectorCtx, m_Flags, m_pStats);</div>
-<div class="line"><a name="l15133"></a><span class="lineno">15133</span>&#160;            vma_delete(m_hAllocator, pBlockVectorCtx);</div>
-<div class="line"><a name="l15134"></a><span class="lineno">15134</span>&#160;        }</div>
-<div class="line"><a name="l15135"></a><span class="lineno">15135</span>&#160;    }</div>
-<div class="line"><a name="l15136"></a><span class="lineno">15136</span>&#160;}</div>
-<div class="line"><a name="l15137"></a><span class="lineno">15137</span>&#160; </div>
-<div class="line"><a name="l15138"></a><span class="lineno">15138</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationContext_T::AddPools(uint32_t poolCount, <span class="keyword">const</span> <a class="code" href="struct_vma_pool.html">VmaPool</a>* pPools)</div>
-<div class="line"><a name="l15139"></a><span class="lineno">15139</span>&#160;{</div>
-<div class="line"><a name="l15140"></a><span class="lineno">15140</span>&#160;    <span class="keywordflow">for</span>(uint32_t poolIndex = 0; poolIndex &lt; poolCount; ++poolIndex)</div>
-<div class="line"><a name="l15141"></a><span class="lineno">15141</span>&#160;    {</div>
-<div class="line"><a name="l15142"></a><span class="lineno">15142</span>&#160;        <a class="code" href="struct_vma_pool.html">VmaPool</a> pool = pPools[poolIndex];</div>
-<div class="line"><a name="l15143"></a><span class="lineno">15143</span>&#160;        VMA_ASSERT(pool);</div>
-<div class="line"><a name="l15144"></a><span class="lineno">15144</span>&#160;        <span class="comment">// Pools with algorithm other than default are not defragmented.</span></div>
-<div class="line"><a name="l15145"></a><span class="lineno">15145</span>&#160;        <span class="keywordflow">if</span>(pool-&gt;m_BlockVector.GetAlgorithm() == 0)</div>
-<div class="line"><a name="l15146"></a><span class="lineno">15146</span>&#160;        {</div>
-<div class="line"><a name="l15147"></a><span class="lineno">15147</span>&#160;            VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;</div>
-<div class="line"><a name="l15148"></a><span class="lineno">15148</span>&#160; </div>
-<div class="line"><a name="l15149"></a><span class="lineno">15149</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_CustomPoolContexts.size(); i--; )</div>
-<div class="line"><a name="l15150"></a><span class="lineno">15150</span>&#160;            {</div>
-<div class="line"><a name="l15151"></a><span class="lineno">15151</span>&#160;                <span class="keywordflow">if</span>(m_CustomPoolContexts[i]-&gt;GetCustomPool() == pool)</div>
-<div class="line"><a name="l15152"></a><span class="lineno">15152</span>&#160;                {</div>
-<div class="line"><a name="l15153"></a><span class="lineno">15153</span>&#160;                    pBlockVectorDefragCtx = m_CustomPoolContexts[i];</div>
-<div class="line"><a name="l15154"></a><span class="lineno">15154</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l15155"></a><span class="lineno">15155</span>&#160;                }</div>
-<div class="line"><a name="l15156"></a><span class="lineno">15156</span>&#160;            }</div>
-<div class="line"><a name="l15157"></a><span class="lineno">15157</span>&#160; </div>
-<div class="line"><a name="l15158"></a><span class="lineno">15158</span>&#160;            <span class="keywordflow">if</span>(!pBlockVectorDefragCtx)</div>
-<div class="line"><a name="l15159"></a><span class="lineno">15159</span>&#160;            {</div>
-<div class="line"><a name="l15160"></a><span class="lineno">15160</span>&#160;                pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(</div>
-<div class="line"><a name="l15161"></a><span class="lineno">15161</span>&#160;                    m_hAllocator,</div>
-<div class="line"><a name="l15162"></a><span class="lineno">15162</span>&#160;                    pool,</div>
-<div class="line"><a name="l15163"></a><span class="lineno">15163</span>&#160;                    &amp;pool-&gt;m_BlockVector,</div>
-<div class="line"><a name="l15164"></a><span class="lineno">15164</span>&#160;                    m_CurrFrameIndex);</div>
-<div class="line"><a name="l15165"></a><span class="lineno">15165</span>&#160;                m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);</div>
-<div class="line"><a name="l15166"></a><span class="lineno">15166</span>&#160;            }</div>
-<div class="line"><a name="l15167"></a><span class="lineno">15167</span>&#160; </div>
-<div class="line"><a name="l15168"></a><span class="lineno">15168</span>&#160;            pBlockVectorDefragCtx-&gt;AddAll();</div>
-<div class="line"><a name="l15169"></a><span class="lineno">15169</span>&#160;        }</div>
-<div class="line"><a name="l15170"></a><span class="lineno">15170</span>&#160;    }</div>
-<div class="line"><a name="l15171"></a><span class="lineno">15171</span>&#160;}</div>
-<div class="line"><a name="l15172"></a><span class="lineno">15172</span>&#160; </div>
-<div class="line"><a name="l15173"></a><span class="lineno">15173</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationContext_T::AddAllocations(</div>
-<div class="line"><a name="l15174"></a><span class="lineno">15174</span>&#160;    uint32_t allocationCount,</div>
-<div class="line"><a name="l15175"></a><span class="lineno">15175</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations,</div>
-<div class="line"><a name="l15176"></a><span class="lineno">15176</span>&#160;    VkBool32* pAllocationsChanged)</div>
-<div class="line"><a name="l15177"></a><span class="lineno">15177</span>&#160;{</div>
-<div class="line"><a name="l15178"></a><span class="lineno">15178</span>&#160;    <span class="comment">// Dispatch pAllocations among defragmentators. Create them when necessary.</span></div>
-<div class="line"><a name="l15179"></a><span class="lineno">15179</span>&#160;    <span class="keywordflow">for</span>(uint32_t allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</div>
-<div class="line"><a name="l15180"></a><span class="lineno">15180</span>&#160;    {</div>
-<div class="line"><a name="l15181"></a><span class="lineno">15181</span>&#160;        <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAlloc = pAllocations[allocIndex];</div>
-<div class="line"><a name="l15182"></a><span class="lineno">15182</span>&#160;        VMA_ASSERT(hAlloc);</div>
-<div class="line"><a name="l15183"></a><span class="lineno">15183</span>&#160;        <span class="comment">// DedicatedAlloc cannot be defragmented.</span></div>
-<div class="line"><a name="l15184"></a><span class="lineno">15184</span>&#160;        <span class="keywordflow">if</span>((hAlloc-&gt;GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK) &amp;&amp;</div>
-<div class="line"><a name="l15185"></a><span class="lineno">15185</span>&#160;            <span class="comment">// Lost allocation cannot be defragmented.</span></div>
-<div class="line"><a name="l15186"></a><span class="lineno">15186</span>&#160;            (hAlloc-&gt;GetLastUseFrameIndex() != VMA_FRAME_INDEX_LOST))</div>
-<div class="line"><a name="l15187"></a><span class="lineno">15187</span>&#160;        {</div>
-<div class="line"><a name="l15188"></a><span class="lineno">15188</span>&#160;            VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;</div>
-<div class="line"><a name="l15189"></a><span class="lineno">15189</span>&#160; </div>
-<div class="line"><a name="l15190"></a><span class="lineno">15190</span>&#160;            <span class="keyword">const</span> <a class="code" href="struct_vma_pool.html">VmaPool</a> hAllocPool = hAlloc-&gt;GetBlock()-&gt;GetParentPool();</div>
-<div class="line"><a name="l15191"></a><span class="lineno">15191</span>&#160;            <span class="comment">// This allocation belongs to custom pool.</span></div>
-<div class="line"><a name="l15192"></a><span class="lineno">15192</span>&#160;            <span class="keywordflow">if</span>(hAllocPool != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l15193"></a><span class="lineno">15193</span>&#160;            {</div>
-<div class="line"><a name="l15194"></a><span class="lineno">15194</span>&#160;                <span class="comment">// Pools with algorithm other than default are not defragmented.</span></div>
-<div class="line"><a name="l15195"></a><span class="lineno">15195</span>&#160;                <span class="keywordflow">if</span>(hAllocPool-&gt;m_BlockVector.GetAlgorithm() == 0)</div>
-<div class="line"><a name="l15196"></a><span class="lineno">15196</span>&#160;                {</div>
-<div class="line"><a name="l15197"></a><span class="lineno">15197</span>&#160;                    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_CustomPoolContexts.size(); i--; )</div>
-<div class="line"><a name="l15198"></a><span class="lineno">15198</span>&#160;                    {</div>
-<div class="line"><a name="l15199"></a><span class="lineno">15199</span>&#160;                        <span class="keywordflow">if</span>(m_CustomPoolContexts[i]-&gt;GetCustomPool() == hAllocPool)</div>
-<div class="line"><a name="l15200"></a><span class="lineno">15200</span>&#160;                        {</div>
-<div class="line"><a name="l15201"></a><span class="lineno">15201</span>&#160;                            pBlockVectorDefragCtx = m_CustomPoolContexts[i];</div>
-<div class="line"><a name="l15202"></a><span class="lineno">15202</span>&#160;                            <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l15203"></a><span class="lineno">15203</span>&#160;                        }</div>
-<div class="line"><a name="l15204"></a><span class="lineno">15204</span>&#160;                    }</div>
-<div class="line"><a name="l15205"></a><span class="lineno">15205</span>&#160;                    <span class="keywordflow">if</span>(!pBlockVectorDefragCtx)</div>
-<div class="line"><a name="l15206"></a><span class="lineno">15206</span>&#160;                    {</div>
-<div class="line"><a name="l15207"></a><span class="lineno">15207</span>&#160;                        pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(</div>
-<div class="line"><a name="l15208"></a><span class="lineno">15208</span>&#160;                            m_hAllocator,</div>
-<div class="line"><a name="l15209"></a><span class="lineno">15209</span>&#160;                            hAllocPool,</div>
-<div class="line"><a name="l15210"></a><span class="lineno">15210</span>&#160;                            &amp;hAllocPool-&gt;m_BlockVector,</div>
-<div class="line"><a name="l15211"></a><span class="lineno">15211</span>&#160;                            m_CurrFrameIndex);</div>
-<div class="line"><a name="l15212"></a><span class="lineno">15212</span>&#160;                        m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);</div>
-<div class="line"><a name="l15213"></a><span class="lineno">15213</span>&#160;                    }</div>
-<div class="line"><a name="l15214"></a><span class="lineno">15214</span>&#160;                }</div>
-<div class="line"><a name="l15215"></a><span class="lineno">15215</span>&#160;            }</div>
-<div class="line"><a name="l15216"></a><span class="lineno">15216</span>&#160;            <span class="comment">// This allocation belongs to default pool.</span></div>
-<div class="line"><a name="l15217"></a><span class="lineno">15217</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15218"></a><span class="lineno">15218</span>&#160;            {</div>
-<div class="line"><a name="l15219"></a><span class="lineno">15219</span>&#160;                <span class="keyword">const</span> uint32_t memTypeIndex = hAlloc-&gt;GetMemoryTypeIndex();</div>
-<div class="line"><a name="l15220"></a><span class="lineno">15220</span>&#160;                pBlockVectorDefragCtx = m_DefaultPoolContexts[memTypeIndex];</div>
-<div class="line"><a name="l15221"></a><span class="lineno">15221</span>&#160;                <span class="keywordflow">if</span>(!pBlockVectorDefragCtx)</div>
-<div class="line"><a name="l15222"></a><span class="lineno">15222</span>&#160;                {</div>
-<div class="line"><a name="l15223"></a><span class="lineno">15223</span>&#160;                    pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(</div>
-<div class="line"><a name="l15224"></a><span class="lineno">15224</span>&#160;                        m_hAllocator,</div>
-<div class="line"><a name="l15225"></a><span class="lineno">15225</span>&#160;                        VMA_NULL, <span class="comment">// hCustomPool</span></div>
-<div class="line"><a name="l15226"></a><span class="lineno">15226</span>&#160;                        m_hAllocator-&gt;m_pBlockVectors[memTypeIndex],</div>
-<div class="line"><a name="l15227"></a><span class="lineno">15227</span>&#160;                        m_CurrFrameIndex);</div>
-<div class="line"><a name="l15228"></a><span class="lineno">15228</span>&#160;                    m_DefaultPoolContexts[memTypeIndex] = pBlockVectorDefragCtx;</div>
-<div class="line"><a name="l15229"></a><span class="lineno">15229</span>&#160;                }</div>
-<div class="line"><a name="l15230"></a><span class="lineno">15230</span>&#160;            }</div>
-<div class="line"><a name="l15231"></a><span class="lineno">15231</span>&#160; </div>
-<div class="line"><a name="l15232"></a><span class="lineno">15232</span>&#160;            <span class="keywordflow">if</span>(pBlockVectorDefragCtx)</div>
-<div class="line"><a name="l15233"></a><span class="lineno">15233</span>&#160;            {</div>
-<div class="line"><a name="l15234"></a><span class="lineno">15234</span>&#160;                VkBool32* <span class="keyword">const</span> pChanged = (pAllocationsChanged != VMA_NULL) ?</div>
-<div class="line"><a name="l15235"></a><span class="lineno">15235</span>&#160;                    &amp;pAllocationsChanged[allocIndex] : VMA_NULL;</div>
-<div class="line"><a name="l15236"></a><span class="lineno">15236</span>&#160;                pBlockVectorDefragCtx-&gt;AddAllocation(hAlloc, pChanged);</div>
-<div class="line"><a name="l15237"></a><span class="lineno">15237</span>&#160;            }</div>
-<div class="line"><a name="l15238"></a><span class="lineno">15238</span>&#160;        }</div>
-<div class="line"><a name="l15239"></a><span class="lineno">15239</span>&#160;    }</div>
-<div class="line"><a name="l15240"></a><span class="lineno">15240</span>&#160;}</div>
-<div class="line"><a name="l15241"></a><span class="lineno">15241</span>&#160; </div>
-<div class="line"><a name="l15242"></a><span class="lineno">15242</span>&#160;VkResult VmaDefragmentationContext_T::Defragment(</div>
-<div class="line"><a name="l15243"></a><span class="lineno">15243</span>&#160;    VkDeviceSize maxCpuBytesToMove, uint32_t maxCpuAllocationsToMove,</div>
-<div class="line"><a name="l15244"></a><span class="lineno">15244</span>&#160;    VkDeviceSize maxGpuBytesToMove, uint32_t maxGpuAllocationsToMove,</div>
-<div class="line"><a name="l15245"></a><span class="lineno">15245</span>&#160;    VkCommandBuffer commandBuffer, <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats, <a class="code" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> flags)</div>
-<div class="line"><a name="l15246"></a><span class="lineno">15246</span>&#160;{</div>
-<div class="line"><a name="l15247"></a><span class="lineno">15247</span>&#160;    <span class="keywordflow">if</span>(pStats)</div>
-<div class="line"><a name="l15248"></a><span class="lineno">15248</span>&#160;    {</div>
-<div class="line"><a name="l15249"></a><span class="lineno">15249</span>&#160;        memset(pStats, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>));</div>
-<div class="line"><a name="l15250"></a><span class="lineno">15250</span>&#160;    }</div>
-<div class="line"><a name="l15251"></a><span class="lineno">15251</span>&#160; </div>
-<div class="line"><a name="l15252"></a><span class="lineno">15252</span>&#160;    <span class="keywordflow">if</span>(flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a>)</div>
-<div class="line"><a name="l15253"></a><span class="lineno">15253</span>&#160;    {</div>
-<div class="line"><a name="l15254"></a><span class="lineno">15254</span>&#160;        <span class="comment">// For incremental defragmetnations, we just earmark how much we can move</span></div>
-<div class="line"><a name="l15255"></a><span class="lineno">15255</span>&#160;        <span class="comment">// The real meat is in the defragmentation steps</span></div>
-<div class="line"><a name="l15256"></a><span class="lineno">15256</span>&#160;        m_MaxCpuBytesToMove = maxCpuBytesToMove;</div>
-<div class="line"><a name="l15257"></a><span class="lineno">15257</span>&#160;        m_MaxCpuAllocationsToMove = maxCpuAllocationsToMove;</div>
-<div class="line"><a name="l15258"></a><span class="lineno">15258</span>&#160; </div>
-<div class="line"><a name="l15259"></a><span class="lineno">15259</span>&#160;        m_MaxGpuBytesToMove = maxGpuBytesToMove;</div>
-<div class="line"><a name="l15260"></a><span class="lineno">15260</span>&#160;        m_MaxGpuAllocationsToMove = maxGpuAllocationsToMove;</div>
-<div class="line"><a name="l15261"></a><span class="lineno">15261</span>&#160; </div>
-<div class="line"><a name="l15262"></a><span class="lineno">15262</span>&#160;        <span class="keywordflow">if</span>(m_MaxCpuBytesToMove == 0 &amp;&amp; m_MaxCpuAllocationsToMove == 0 &amp;&amp;</div>
-<div class="line"><a name="l15263"></a><span class="lineno">15263</span>&#160;            m_MaxGpuBytesToMove == 0 &amp;&amp; m_MaxGpuAllocationsToMove == 0)</div>
-<div class="line"><a name="l15264"></a><span class="lineno">15264</span>&#160;            <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l15265"></a><span class="lineno">15265</span>&#160; </div>
-<div class="line"><a name="l15266"></a><span class="lineno">15266</span>&#160;        <span class="keywordflow">return</span> VK_NOT_READY;</div>
-<div class="line"><a name="l15267"></a><span class="lineno">15267</span>&#160;    }</div>
-<div class="line"><a name="l15268"></a><span class="lineno">15268</span>&#160; </div>
-<div class="line"><a name="l15269"></a><span class="lineno">15269</span>&#160;    <span class="keywordflow">if</span>(commandBuffer == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l15270"></a><span class="lineno">15270</span>&#160;    {</div>
-<div class="line"><a name="l15271"></a><span class="lineno">15271</span>&#160;        maxGpuBytesToMove = 0;</div>
-<div class="line"><a name="l15272"></a><span class="lineno">15272</span>&#160;        maxGpuAllocationsToMove = 0;</div>
-<div class="line"><a name="l15273"></a><span class="lineno">15273</span>&#160;    }</div>
-<div class="line"><a name="l15274"></a><span class="lineno">15274</span>&#160; </div>
-<div class="line"><a name="l15275"></a><span class="lineno">15275</span>&#160;    VkResult res = VK_SUCCESS;</div>
-<div class="line"><a name="l15276"></a><span class="lineno">15276</span>&#160; </div>
-<div class="line"><a name="l15277"></a><span class="lineno">15277</span>&#160;    <span class="comment">// Process default pools.</span></div>
-<div class="line"><a name="l15278"></a><span class="lineno">15278</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0;</div>
-<div class="line"><a name="l15279"></a><span class="lineno">15279</span>&#160;        memTypeIndex &lt; m_hAllocator-&gt;GetMemoryTypeCount() &amp;&amp; res &gt;= VK_SUCCESS;</div>
-<div class="line"><a name="l15280"></a><span class="lineno">15280</span>&#160;        ++memTypeIndex)</div>
-<div class="line"><a name="l15281"></a><span class="lineno">15281</span>&#160;    {</div>
-<div class="line"><a name="l15282"></a><span class="lineno">15282</span>&#160;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_DefaultPoolContexts[memTypeIndex];</div>
-<div class="line"><a name="l15283"></a><span class="lineno">15283</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx)</div>
-<div class="line"><a name="l15284"></a><span class="lineno">15284</span>&#160;        {</div>
-<div class="line"><a name="l15285"></a><span class="lineno">15285</span>&#160;            VMA_ASSERT(pBlockVectorCtx-&gt;GetBlockVector());</div>
-<div class="line"><a name="l15286"></a><span class="lineno">15286</span>&#160;            pBlockVectorCtx-&gt;GetBlockVector()-&gt;Defragment(</div>
-<div class="line"><a name="l15287"></a><span class="lineno">15287</span>&#160;                pBlockVectorCtx,</div>
-<div class="line"><a name="l15288"></a><span class="lineno">15288</span>&#160;                pStats, flags,</div>
-<div class="line"><a name="l15289"></a><span class="lineno">15289</span>&#160;                maxCpuBytesToMove, maxCpuAllocationsToMove,</div>
-<div class="line"><a name="l15290"></a><span class="lineno">15290</span>&#160;                maxGpuBytesToMove, maxGpuAllocationsToMove,</div>
-<div class="line"><a name="l15291"></a><span class="lineno">15291</span>&#160;                commandBuffer);</div>
-<div class="line"><a name="l15292"></a><span class="lineno">15292</span>&#160;            <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;res != VK_SUCCESS)</div>
-<div class="line"><a name="l15293"></a><span class="lineno">15293</span>&#160;            {</div>
-<div class="line"><a name="l15294"></a><span class="lineno">15294</span>&#160;                res = pBlockVectorCtx-&gt;res;</div>
-<div class="line"><a name="l15295"></a><span class="lineno">15295</span>&#160;            }</div>
-<div class="line"><a name="l15296"></a><span class="lineno">15296</span>&#160;        }</div>
-<div class="line"><a name="l15297"></a><span class="lineno">15297</span>&#160;    }</div>
-<div class="line"><a name="l15298"></a><span class="lineno">15298</span>&#160; </div>
-<div class="line"><a name="l15299"></a><span class="lineno">15299</span>&#160;    <span class="comment">// Process custom pools.</span></div>
-<div class="line"><a name="l15300"></a><span class="lineno">15300</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> customCtxIndex = 0, customCtxCount = m_CustomPoolContexts.size();</div>
-<div class="line"><a name="l15301"></a><span class="lineno">15301</span>&#160;        customCtxIndex &lt; customCtxCount &amp;&amp; res &gt;= VK_SUCCESS;</div>
-<div class="line"><a name="l15302"></a><span class="lineno">15302</span>&#160;        ++customCtxIndex)</div>
-<div class="line"><a name="l15303"></a><span class="lineno">15303</span>&#160;    {</div>
-<div class="line"><a name="l15304"></a><span class="lineno">15304</span>&#160;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_CustomPoolContexts[customCtxIndex];</div>
-<div class="line"><a name="l15305"></a><span class="lineno">15305</span>&#160;        VMA_ASSERT(pBlockVectorCtx &amp;&amp; pBlockVectorCtx-&gt;GetBlockVector());</div>
-<div class="line"><a name="l15306"></a><span class="lineno">15306</span>&#160;        pBlockVectorCtx-&gt;GetBlockVector()-&gt;Defragment(</div>
-<div class="line"><a name="l15307"></a><span class="lineno">15307</span>&#160;            pBlockVectorCtx,</div>
-<div class="line"><a name="l15308"></a><span class="lineno">15308</span>&#160;            pStats, flags,</div>
-<div class="line"><a name="l15309"></a><span class="lineno">15309</span>&#160;            maxCpuBytesToMove, maxCpuAllocationsToMove,</div>
-<div class="line"><a name="l15310"></a><span class="lineno">15310</span>&#160;            maxGpuBytesToMove, maxGpuAllocationsToMove,</div>
-<div class="line"><a name="l15311"></a><span class="lineno">15311</span>&#160;            commandBuffer);</div>
-<div class="line"><a name="l15312"></a><span class="lineno">15312</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;res != VK_SUCCESS)</div>
-<div class="line"><a name="l15313"></a><span class="lineno">15313</span>&#160;        {</div>
-<div class="line"><a name="l15314"></a><span class="lineno">15314</span>&#160;            res = pBlockVectorCtx-&gt;res;</div>
-<div class="line"><a name="l15315"></a><span class="lineno">15315</span>&#160;        }</div>
-<div class="line"><a name="l15316"></a><span class="lineno">15316</span>&#160;    }</div>
-<div class="line"><a name="l15317"></a><span class="lineno">15317</span>&#160; </div>
-<div class="line"><a name="l15318"></a><span class="lineno">15318</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l15319"></a><span class="lineno">15319</span>&#160;}</div>
-<div class="line"><a name="l15320"></a><span class="lineno">15320</span>&#160; </div>
-<div class="line"><a name="l15321"></a><span class="lineno">15321</span>&#160;VkResult VmaDefragmentationContext_T::DefragmentPassBegin(<a class="code" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a>* pInfo)</div>
-<div class="line"><a name="l15322"></a><span class="lineno">15322</span>&#160;{</div>
-<div class="line"><a name="l15323"></a><span class="lineno">15323</span>&#160;    <a class="code" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a>* pCurrentMove = pInfo-&gt;<a class="code" href="struct_vma_defragmentation_pass_info.html#acbd42d4a3357999da130a95cd99a3792">pMoves</a>;</div>
-<div class="line"><a name="l15324"></a><span class="lineno">15324</span>&#160;    uint32_t movesLeft = pInfo-&gt;<a class="code" href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c">moveCount</a>;</div>
-<div class="line"><a name="l15325"></a><span class="lineno">15325</span>&#160; </div>
-<div class="line"><a name="l15326"></a><span class="lineno">15326</span>&#160;    <span class="comment">// Process default pools.</span></div>
-<div class="line"><a name="l15327"></a><span class="lineno">15327</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0;</div>
-<div class="line"><a name="l15328"></a><span class="lineno">15328</span>&#160;        memTypeIndex &lt; m_hAllocator-&gt;GetMemoryTypeCount();</div>
-<div class="line"><a name="l15329"></a><span class="lineno">15329</span>&#160;        ++memTypeIndex)</div>
-<div class="line"><a name="l15330"></a><span class="lineno">15330</span>&#160;    {</div>
-<div class="line"><a name="l15331"></a><span class="lineno">15331</span>&#160;        VmaBlockVectorDefragmentationContext *pBlockVectorCtx = m_DefaultPoolContexts[memTypeIndex];</div>
-<div class="line"><a name="l15332"></a><span class="lineno">15332</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx)</div>
-<div class="line"><a name="l15333"></a><span class="lineno">15333</span>&#160;        {</div>
-<div class="line"><a name="l15334"></a><span class="lineno">15334</span>&#160;            VMA_ASSERT(pBlockVectorCtx-&gt;GetBlockVector());</div>
-<div class="line"><a name="l15335"></a><span class="lineno">15335</span>&#160; </div>
-<div class="line"><a name="l15336"></a><span class="lineno">15336</span>&#160;            <span class="keywordflow">if</span>(!pBlockVectorCtx-&gt;hasDefragmentationPlan)</div>
-<div class="line"><a name="l15337"></a><span class="lineno">15337</span>&#160;            {</div>
-<div class="line"><a name="l15338"></a><span class="lineno">15338</span>&#160;                pBlockVectorCtx-&gt;GetBlockVector()-&gt;Defragment(</div>
-<div class="line"><a name="l15339"></a><span class="lineno">15339</span>&#160;                    pBlockVectorCtx,</div>
-<div class="line"><a name="l15340"></a><span class="lineno">15340</span>&#160;                    m_pStats, m_Flags,</div>
-<div class="line"><a name="l15341"></a><span class="lineno">15341</span>&#160;                    m_MaxCpuBytesToMove, m_MaxCpuAllocationsToMove,</div>
-<div class="line"><a name="l15342"></a><span class="lineno">15342</span>&#160;                    m_MaxGpuBytesToMove, m_MaxGpuAllocationsToMove,</div>
-<div class="line"><a name="l15343"></a><span class="lineno">15343</span>&#160;                    VK_NULL_HANDLE);</div>
-<div class="line"><a name="l15344"></a><span class="lineno">15344</span>&#160; </div>
-<div class="line"><a name="l15345"></a><span class="lineno">15345</span>&#160;                <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;res &lt; VK_SUCCESS)</div>
-<div class="line"><a name="l15346"></a><span class="lineno">15346</span>&#160;                    <span class="keywordflow">continue</span>;</div>
-<div class="line"><a name="l15347"></a><span class="lineno">15347</span>&#160; </div>
-<div class="line"><a name="l15348"></a><span class="lineno">15348</span>&#160;                pBlockVectorCtx-&gt;hasDefragmentationPlan = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l15349"></a><span class="lineno">15349</span>&#160;            }</div>
-<div class="line"><a name="l15350"></a><span class="lineno">15350</span>&#160; </div>
-<div class="line"><a name="l15351"></a><span class="lineno">15351</span>&#160;            <span class="keyword">const</span> uint32_t processed = pBlockVectorCtx-&gt;GetBlockVector()-&gt;ProcessDefragmentations(</div>
-<div class="line"><a name="l15352"></a><span class="lineno">15352</span>&#160;                pBlockVectorCtx,</div>
-<div class="line"><a name="l15353"></a><span class="lineno">15353</span>&#160;                pCurrentMove, movesLeft);</div>
-<div class="line"><a name="l15354"></a><span class="lineno">15354</span>&#160; </div>
-<div class="line"><a name="l15355"></a><span class="lineno">15355</span>&#160;            movesLeft -= processed;</div>
-<div class="line"><a name="l15356"></a><span class="lineno">15356</span>&#160;            pCurrentMove += processed;</div>
-<div class="line"><a name="l15357"></a><span class="lineno">15357</span>&#160;        }</div>
-<div class="line"><a name="l15358"></a><span class="lineno">15358</span>&#160;    }</div>
-<div class="line"><a name="l15359"></a><span class="lineno">15359</span>&#160; </div>
-<div class="line"><a name="l15360"></a><span class="lineno">15360</span>&#160;    <span class="comment">// Process custom pools.</span></div>
-<div class="line"><a name="l15361"></a><span class="lineno">15361</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> customCtxIndex = 0, customCtxCount = m_CustomPoolContexts.size();</div>
-<div class="line"><a name="l15362"></a><span class="lineno">15362</span>&#160;        customCtxIndex &lt; customCtxCount;</div>
-<div class="line"><a name="l15363"></a><span class="lineno">15363</span>&#160;        ++customCtxIndex)</div>
-<div class="line"><a name="l15364"></a><span class="lineno">15364</span>&#160;    {</div>
-<div class="line"><a name="l15365"></a><span class="lineno">15365</span>&#160;        VmaBlockVectorDefragmentationContext *pBlockVectorCtx = m_CustomPoolContexts[customCtxIndex];</div>
-<div class="line"><a name="l15366"></a><span class="lineno">15366</span>&#160;        VMA_ASSERT(pBlockVectorCtx &amp;&amp; pBlockVectorCtx-&gt;GetBlockVector());</div>
-<div class="line"><a name="l15367"></a><span class="lineno">15367</span>&#160; </div>
-<div class="line"><a name="l15368"></a><span class="lineno">15368</span>&#160;        <span class="keywordflow">if</span>(!pBlockVectorCtx-&gt;hasDefragmentationPlan)</div>
-<div class="line"><a name="l15369"></a><span class="lineno">15369</span>&#160;        {</div>
-<div class="line"><a name="l15370"></a><span class="lineno">15370</span>&#160;            pBlockVectorCtx-&gt;GetBlockVector()-&gt;Defragment(</div>
-<div class="line"><a name="l15371"></a><span class="lineno">15371</span>&#160;                pBlockVectorCtx,</div>
-<div class="line"><a name="l15372"></a><span class="lineno">15372</span>&#160;                m_pStats, m_Flags,</div>
-<div class="line"><a name="l15373"></a><span class="lineno">15373</span>&#160;                m_MaxCpuBytesToMove, m_MaxCpuAllocationsToMove,</div>
-<div class="line"><a name="l15374"></a><span class="lineno">15374</span>&#160;                m_MaxGpuBytesToMove, m_MaxGpuAllocationsToMove,</div>
-<div class="line"><a name="l15375"></a><span class="lineno">15375</span>&#160;                VK_NULL_HANDLE);</div>
-<div class="line"><a name="l15376"></a><span class="lineno">15376</span>&#160; </div>
-<div class="line"><a name="l15377"></a><span class="lineno">15377</span>&#160;            <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;res &lt; VK_SUCCESS)</div>
-<div class="line"><a name="l15378"></a><span class="lineno">15378</span>&#160;                <span class="keywordflow">continue</span>;</div>
-<div class="line"><a name="l15379"></a><span class="lineno">15379</span>&#160; </div>
-<div class="line"><a name="l15380"></a><span class="lineno">15380</span>&#160;            pBlockVectorCtx-&gt;hasDefragmentationPlan = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l15381"></a><span class="lineno">15381</span>&#160;        }</div>
-<div class="line"><a name="l15382"></a><span class="lineno">15382</span>&#160; </div>
-<div class="line"><a name="l15383"></a><span class="lineno">15383</span>&#160;        <span class="keyword">const</span> uint32_t processed = pBlockVectorCtx-&gt;GetBlockVector()-&gt;ProcessDefragmentations(</div>
-<div class="line"><a name="l15384"></a><span class="lineno">15384</span>&#160;            pBlockVectorCtx,</div>
-<div class="line"><a name="l15385"></a><span class="lineno">15385</span>&#160;            pCurrentMove, movesLeft);</div>
-<div class="line"><a name="l15386"></a><span class="lineno">15386</span>&#160; </div>
-<div class="line"><a name="l15387"></a><span class="lineno">15387</span>&#160;        movesLeft -= processed;</div>
-<div class="line"><a name="l15388"></a><span class="lineno">15388</span>&#160;        pCurrentMove += processed;</div>
-<div class="line"><a name="l15389"></a><span class="lineno">15389</span>&#160;    }</div>
-<div class="line"><a name="l15390"></a><span class="lineno">15390</span>&#160; </div>
-<div class="line"><a name="l15391"></a><span class="lineno">15391</span>&#160;    pInfo-&gt;<a class="code" href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c">moveCount</a> = pInfo-&gt;<a class="code" href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c">moveCount</a> - movesLeft;</div>
-<div class="line"><a name="l15392"></a><span class="lineno">15392</span>&#160; </div>
-<div class="line"><a name="l15393"></a><span class="lineno">15393</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l15394"></a><span class="lineno">15394</span>&#160;}</div>
-<div class="line"><a name="l15395"></a><span class="lineno">15395</span>&#160;VkResult VmaDefragmentationContext_T::DefragmentPassEnd()</div>
-<div class="line"><a name="l15396"></a><span class="lineno">15396</span>&#160;{</div>
-<div class="line"><a name="l15397"></a><span class="lineno">15397</span>&#160;    VkResult res = VK_SUCCESS;</div>
-<div class="line"><a name="l15398"></a><span class="lineno">15398</span>&#160; </div>
-<div class="line"><a name="l15399"></a><span class="lineno">15399</span>&#160;    <span class="comment">// Process default pools.</span></div>
-<div class="line"><a name="l15400"></a><span class="lineno">15400</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0;</div>
-<div class="line"><a name="l15401"></a><span class="lineno">15401</span>&#160;        memTypeIndex &lt; m_hAllocator-&gt;GetMemoryTypeCount();</div>
-<div class="line"><a name="l15402"></a><span class="lineno">15402</span>&#160;        ++memTypeIndex)</div>
-<div class="line"><a name="l15403"></a><span class="lineno">15403</span>&#160;    {</div>
-<div class="line"><a name="l15404"></a><span class="lineno">15404</span>&#160;        VmaBlockVectorDefragmentationContext *pBlockVectorCtx = m_DefaultPoolContexts[memTypeIndex];</div>
-<div class="line"><a name="l15405"></a><span class="lineno">15405</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx)</div>
-<div class="line"><a name="l15406"></a><span class="lineno">15406</span>&#160;        {</div>
-<div class="line"><a name="l15407"></a><span class="lineno">15407</span>&#160;            VMA_ASSERT(pBlockVectorCtx-&gt;GetBlockVector());</div>
-<div class="line"><a name="l15408"></a><span class="lineno">15408</span>&#160; </div>
-<div class="line"><a name="l15409"></a><span class="lineno">15409</span>&#160;            <span class="keywordflow">if</span>(!pBlockVectorCtx-&gt;hasDefragmentationPlan)</div>
-<div class="line"><a name="l15410"></a><span class="lineno">15410</span>&#160;            {</div>
-<div class="line"><a name="l15411"></a><span class="lineno">15411</span>&#160;                res = VK_NOT_READY;</div>
-<div class="line"><a name="l15412"></a><span class="lineno">15412</span>&#160;                <span class="keywordflow">continue</span>;</div>
-<div class="line"><a name="l15413"></a><span class="lineno">15413</span>&#160;            }</div>
-<div class="line"><a name="l15414"></a><span class="lineno">15414</span>&#160; </div>
-<div class="line"><a name="l15415"></a><span class="lineno">15415</span>&#160;            pBlockVectorCtx-&gt;GetBlockVector()-&gt;CommitDefragmentations(</div>
-<div class="line"><a name="l15416"></a><span class="lineno">15416</span>&#160;                pBlockVectorCtx, m_pStats);</div>
-<div class="line"><a name="l15417"></a><span class="lineno">15417</span>&#160; </div>
-<div class="line"><a name="l15418"></a><span class="lineno">15418</span>&#160;            <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;defragmentationMoves.size() != pBlockVectorCtx-&gt;defragmentationMovesCommitted)</div>
-<div class="line"><a name="l15419"></a><span class="lineno">15419</span>&#160;                res = VK_NOT_READY;</div>
-<div class="line"><a name="l15420"></a><span class="lineno">15420</span>&#160;        }</div>
-<div class="line"><a name="l15421"></a><span class="lineno">15421</span>&#160;    }</div>
-<div class="line"><a name="l15422"></a><span class="lineno">15422</span>&#160; </div>
-<div class="line"><a name="l15423"></a><span class="lineno">15423</span>&#160;    <span class="comment">// Process custom pools.</span></div>
-<div class="line"><a name="l15424"></a><span class="lineno">15424</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> customCtxIndex = 0, customCtxCount = m_CustomPoolContexts.size();</div>
-<div class="line"><a name="l15425"></a><span class="lineno">15425</span>&#160;        customCtxIndex &lt; customCtxCount;</div>
-<div class="line"><a name="l15426"></a><span class="lineno">15426</span>&#160;        ++customCtxIndex)</div>
-<div class="line"><a name="l15427"></a><span class="lineno">15427</span>&#160;    {</div>
-<div class="line"><a name="l15428"></a><span class="lineno">15428</span>&#160;        VmaBlockVectorDefragmentationContext *pBlockVectorCtx = m_CustomPoolContexts[customCtxIndex];</div>
-<div class="line"><a name="l15429"></a><span class="lineno">15429</span>&#160;        VMA_ASSERT(pBlockVectorCtx &amp;&amp; pBlockVectorCtx-&gt;GetBlockVector());</div>
-<div class="line"><a name="l15430"></a><span class="lineno">15430</span>&#160; </div>
-<div class="line"><a name="l15431"></a><span class="lineno">15431</span>&#160;        <span class="keywordflow">if</span>(!pBlockVectorCtx-&gt;hasDefragmentationPlan)</div>
-<div class="line"><a name="l15432"></a><span class="lineno">15432</span>&#160;        {</div>
-<div class="line"><a name="l15433"></a><span class="lineno">15433</span>&#160;            res = VK_NOT_READY;</div>
-<div class="line"><a name="l15434"></a><span class="lineno">15434</span>&#160;            <span class="keywordflow">continue</span>;</div>
-<div class="line"><a name="l15435"></a><span class="lineno">15435</span>&#160;        }</div>
-<div class="line"><a name="l15436"></a><span class="lineno">15436</span>&#160; </div>
-<div class="line"><a name="l15437"></a><span class="lineno">15437</span>&#160;        pBlockVectorCtx-&gt;GetBlockVector()-&gt;CommitDefragmentations(</div>
-<div class="line"><a name="l15438"></a><span class="lineno">15438</span>&#160;            pBlockVectorCtx, m_pStats);</div>
-<div class="line"><a name="l15439"></a><span class="lineno">15439</span>&#160; </div>
-<div class="line"><a name="l15440"></a><span class="lineno">15440</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;defragmentationMoves.size() != pBlockVectorCtx-&gt;defragmentationMovesCommitted)</div>
-<div class="line"><a name="l15441"></a><span class="lineno">15441</span>&#160;            res = VK_NOT_READY;</div>
-<div class="line"><a name="l15442"></a><span class="lineno">15442</span>&#160;    }</div>
-<div class="line"><a name="l15443"></a><span class="lineno">15443</span>&#160; </div>
-<div class="line"><a name="l15444"></a><span class="lineno">15444</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l15445"></a><span class="lineno">15445</span>&#160;}</div>
-<div class="line"><a name="l15446"></a><span class="lineno">15446</span>&#160; </div>
-<div class="line"><a name="l15448"></a><span class="lineno">15448</span>&#160;<span class="comment">// VmaRecorder</span></div>
-<div class="line"><a name="l15449"></a><span class="lineno">15449</span>&#160; </div>
-<div class="line"><a name="l15450"></a><span class="lineno">15450</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l15451"></a><span class="lineno">15451</span>&#160; </div>
-<div class="line"><a name="l15452"></a><span class="lineno">15452</span>&#160;VmaRecorder::VmaRecorder() :</div>
-<div class="line"><a name="l15453"></a><span class="lineno">15453</span>&#160;    m_UseMutex(true),</div>
-<div class="line"><a name="l15454"></a><span class="lineno">15454</span>&#160;    m_Flags(0),</div>
-<div class="line"><a name="l15455"></a><span class="lineno">15455</span>&#160;    m_File(VMA_NULL),</div>
-<div class="line"><a name="l15456"></a><span class="lineno">15456</span>&#160;    m_RecordingStartTime(std::chrono::high_resolution_clock::now())</div>
-<div class="line"><a name="l15457"></a><span class="lineno">15457</span>&#160;{</div>
-<div class="line"><a name="l15458"></a><span class="lineno">15458</span>&#160;}</div>
-<div class="line"><a name="l15459"></a><span class="lineno">15459</span>&#160; </div>
-<div class="line"><a name="l15460"></a><span class="lineno">15460</span>&#160;VkResult VmaRecorder::Init(<span class="keyword">const</span> <a class="code" href="struct_vma_record_settings.html">VmaRecordSettings</a>&amp; settings, <span class="keywordtype">bool</span> useMutex)</div>
-<div class="line"><a name="l15461"></a><span class="lineno">15461</span>&#160;{</div>
-<div class="line"><a name="l15462"></a><span class="lineno">15462</span>&#160;    m_UseMutex = useMutex;</div>
-<div class="line"><a name="l15463"></a><span class="lineno">15463</span>&#160;    m_Flags = settings.<a class="code" href="struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a">flags</a>;</div>
-<div class="line"><a name="l15464"></a><span class="lineno">15464</span>&#160; </div>
-<div class="line"><a name="l15465"></a><span class="lineno">15465</span>&#160;<span class="preprocessor">#if defined(_WIN32)</span></div>
-<div class="line"><a name="l15466"></a><span class="lineno">15466</span>&#160;    <span class="comment">// Open file for writing.</span></div>
-<div class="line"><a name="l15467"></a><span class="lineno">15467</span>&#160;    errno_t err = fopen_s(&amp;m_File, settings.<a class="code" href="struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d">pFilePath</a>, <span class="stringliteral">&quot;wb&quot;</span>);</div>
-<div class="line"><a name="l15468"></a><span class="lineno">15468</span>&#160; </div>
-<div class="line"><a name="l15469"></a><span class="lineno">15469</span>&#160;    <span class="keywordflow">if</span>(err != 0)</div>
-<div class="line"><a name="l15470"></a><span class="lineno">15470</span>&#160;    {</div>
-<div class="line"><a name="l15471"></a><span class="lineno">15471</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_INITIALIZATION_FAILED;</div>
-<div class="line"><a name="l15472"></a><span class="lineno">15472</span>&#160;    }</div>
-<div class="line"><a name="l15473"></a><span class="lineno">15473</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l15474"></a><span class="lineno">15474</span>&#160;    <span class="comment">// Open file for writing.</span></div>
-<div class="line"><a name="l15475"></a><span class="lineno">15475</span>&#160;    m_File = fopen(settings.<a class="code" href="struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d">pFilePath</a>, <span class="stringliteral">&quot;wb&quot;</span>);</div>
-<div class="line"><a name="l15476"></a><span class="lineno">15476</span>&#160; </div>
-<div class="line"><a name="l15477"></a><span class="lineno">15477</span>&#160;    <span class="keywordflow">if</span>(m_File == 0)</div>
-<div class="line"><a name="l15478"></a><span class="lineno">15478</span>&#160;    {</div>
-<div class="line"><a name="l15479"></a><span class="lineno">15479</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_INITIALIZATION_FAILED;</div>
-<div class="line"><a name="l15480"></a><span class="lineno">15480</span>&#160;    }</div>
-<div class="line"><a name="l15481"></a><span class="lineno">15481</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l15482"></a><span class="lineno">15482</span>&#160; </div>
-<div class="line"><a name="l15483"></a><span class="lineno">15483</span>&#160;    <span class="comment">// Write header.</span></div>
-<div class="line"><a name="l15484"></a><span class="lineno">15484</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%s\n&quot;</span>, <span class="stringliteral">&quot;Vulkan Memory Allocator,Calls recording&quot;</span>);</div>
-<div class="line"><a name="l15485"></a><span class="lineno">15485</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%s\n&quot;</span>, <span class="stringliteral">&quot;1,8&quot;</span>);</div>
-<div class="line"><a name="l15486"></a><span class="lineno">15486</span>&#160; </div>
-<div class="line"><a name="l15487"></a><span class="lineno">15487</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l15488"></a><span class="lineno">15488</span>&#160;}</div>
-<div class="line"><a name="l15489"></a><span class="lineno">15489</span>&#160; </div>
-<div class="line"><a name="l15490"></a><span class="lineno">15490</span>&#160;VmaRecorder::~VmaRecorder()</div>
-<div class="line"><a name="l15491"></a><span class="lineno">15491</span>&#160;{</div>
-<div class="line"><a name="l15492"></a><span class="lineno">15492</span>&#160;    <span class="keywordflow">if</span>(m_File != VMA_NULL)</div>
-<div class="line"><a name="l15493"></a><span class="lineno">15493</span>&#160;    {</div>
-<div class="line"><a name="l15494"></a><span class="lineno">15494</span>&#160;        fclose(m_File);</div>
-<div class="line"><a name="l15495"></a><span class="lineno">15495</span>&#160;    }</div>
-<div class="line"><a name="l15496"></a><span class="lineno">15496</span>&#160;}</div>
-<div class="line"><a name="l15497"></a><span class="lineno">15497</span>&#160; </div>
-<div class="line"><a name="l15498"></a><span class="lineno">15498</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreateAllocator(uint32_t frameIndex)</div>
-<div class="line"><a name="l15499"></a><span class="lineno">15499</span>&#160;{</div>
-<div class="line"><a name="l15500"></a><span class="lineno">15500</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15501"></a><span class="lineno">15501</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15502"></a><span class="lineno">15502</span>&#160; </div>
-<div class="line"><a name="l15503"></a><span class="lineno">15503</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15504"></a><span class="lineno">15504</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaCreateAllocator\n&quot;</span>, callParams.threadId, callParams.time, frameIndex);</div>
-<div class="line"><a name="l15505"></a><span class="lineno">15505</span>&#160;    Flush();</div>
-<div class="line"><a name="l15506"></a><span class="lineno">15506</span>&#160;}</div>
-<div class="line"><a name="l15507"></a><span class="lineno">15507</span>&#160; </div>
-<div class="line"><a name="l15508"></a><span class="lineno">15508</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDestroyAllocator(uint32_t frameIndex)</div>
-<div class="line"><a name="l15509"></a><span class="lineno">15509</span>&#160;{</div>
-<div class="line"><a name="l15510"></a><span class="lineno">15510</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15511"></a><span class="lineno">15511</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15512"></a><span class="lineno">15512</span>&#160; </div>
-<div class="line"><a name="l15513"></a><span class="lineno">15513</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15514"></a><span class="lineno">15514</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaDestroyAllocator\n&quot;</span>, callParams.threadId, callParams.time, frameIndex);</div>
-<div class="line"><a name="l15515"></a><span class="lineno">15515</span>&#160;    Flush();</div>
-<div class="line"><a name="l15516"></a><span class="lineno">15516</span>&#160;}</div>
-<div class="line"><a name="l15517"></a><span class="lineno">15517</span>&#160; </div>
-<div class="line"><a name="l15518"></a><span class="lineno">15518</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreatePool(uint32_t frameIndex, <span class="keyword">const</span> <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a>&amp; createInfo, <a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</div>
-<div class="line"><a name="l15519"></a><span class="lineno">15519</span>&#160;{</div>
-<div class="line"><a name="l15520"></a><span class="lineno">15520</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15521"></a><span class="lineno">15521</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15522"></a><span class="lineno">15522</span>&#160; </div>
-<div class="line"><a name="l15523"></a><span class="lineno">15523</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15524"></a><span class="lineno">15524</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaCreatePool,%u,%u,%llu,%llu,%llu,%u,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15525"></a><span class="lineno">15525</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a>,</div>
-<div class="line"><a name="l15526"></a><span class="lineno">15526</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">flags</a>,</div>
-<div class="line"><a name="l15527"></a><span class="lineno">15527</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676">blockSize</a>,</div>
-<div class="line"><a name="l15528"></a><span class="lineno">15528</span>&#160;        (uint64_t)createInfo.<a class="code" href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae">minBlockCount</a>,</div>
-<div class="line"><a name="l15529"></a><span class="lineno">15529</span>&#160;        (uint64_t)createInfo.<a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a>,</div>
-<div class="line"><a name="l15530"></a><span class="lineno">15530</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa">frameInUseCount</a>,</div>
-<div class="line"><a name="l15531"></a><span class="lineno">15531</span>&#160;        pool);</div>
-<div class="line"><a name="l15532"></a><span class="lineno">15532</span>&#160;    Flush();</div>
-<div class="line"><a name="l15533"></a><span class="lineno">15533</span>&#160;}</div>
-<div class="line"><a name="l15534"></a><span class="lineno">15534</span>&#160; </div>
-<div class="line"><a name="l15535"></a><span class="lineno">15535</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDestroyPool(uint32_t frameIndex, <a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</div>
-<div class="line"><a name="l15536"></a><span class="lineno">15536</span>&#160;{</div>
-<div class="line"><a name="l15537"></a><span class="lineno">15537</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15538"></a><span class="lineno">15538</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15539"></a><span class="lineno">15539</span>&#160; </div>
-<div class="line"><a name="l15540"></a><span class="lineno">15540</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15541"></a><span class="lineno">15541</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaDestroyPool,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15542"></a><span class="lineno">15542</span>&#160;        pool);</div>
-<div class="line"><a name="l15543"></a><span class="lineno">15543</span>&#160;    Flush();</div>
-<div class="line"><a name="l15544"></a><span class="lineno">15544</span>&#160;}</div>
-<div class="line"><a name="l15545"></a><span class="lineno">15545</span>&#160; </div>
-<div class="line"><a name="l15546"></a><span class="lineno">15546</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordAllocateMemory(uint32_t frameIndex,</div>
-<div class="line"><a name="l15547"></a><span class="lineno">15547</span>&#160;        <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
-<div class="line"><a name="l15548"></a><span class="lineno">15548</span>&#160;        <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
-<div class="line"><a name="l15549"></a><span class="lineno">15549</span>&#160;        <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l15550"></a><span class="lineno">15550</span>&#160;{</div>
-<div class="line"><a name="l15551"></a><span class="lineno">15551</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15552"></a><span class="lineno">15552</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15553"></a><span class="lineno">15553</span>&#160; </div>
-<div class="line"><a name="l15554"></a><span class="lineno">15554</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15555"></a><span class="lineno">15555</span>&#160;    UserDataString userDataStr(createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>, createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>);</div>
-<div class="line"><a name="l15556"></a><span class="lineno">15556</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaAllocateMemory,%llu,%llu,%u,%u,%u,%u,%u,%u,%p,%p,%s\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15557"></a><span class="lineno">15557</span>&#160;        vkMemReq.size,</div>
-<div class="line"><a name="l15558"></a><span class="lineno">15558</span>&#160;        vkMemReq.alignment,</div>
-<div class="line"><a name="l15559"></a><span class="lineno">15559</span>&#160;        vkMemReq.memoryTypeBits,</div>
-<div class="line"><a name="l15560"></a><span class="lineno">15560</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
-<div class="line"><a name="l15561"></a><span class="lineno">15561</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
-<div class="line"><a name="l15562"></a><span class="lineno">15562</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
-<div class="line"><a name="l15563"></a><span class="lineno">15563</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
-<div class="line"><a name="l15564"></a><span class="lineno">15564</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
-<div class="line"><a name="l15565"></a><span class="lineno">15565</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
-<div class="line"><a name="l15566"></a><span class="lineno">15566</span>&#160;        allocation,</div>
-<div class="line"><a name="l15567"></a><span class="lineno">15567</span>&#160;        userDataStr.GetString());</div>
-<div class="line"><a name="l15568"></a><span class="lineno">15568</span>&#160;    Flush();</div>
-<div class="line"><a name="l15569"></a><span class="lineno">15569</span>&#160;}</div>
-<div class="line"><a name="l15570"></a><span class="lineno">15570</span>&#160; </div>
-<div class="line"><a name="l15571"></a><span class="lineno">15571</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordAllocateMemoryPages(uint32_t frameIndex,</div>
-<div class="line"><a name="l15572"></a><span class="lineno">15572</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
-<div class="line"><a name="l15573"></a><span class="lineno">15573</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
-<div class="line"><a name="l15574"></a><span class="lineno">15574</span>&#160;    uint64_t allocationCount,</div>
-<div class="line"><a name="l15575"></a><span class="lineno">15575</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
-<div class="line"><a name="l15576"></a><span class="lineno">15576</span>&#160;{</div>
-<div class="line"><a name="l15577"></a><span class="lineno">15577</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15578"></a><span class="lineno">15578</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15579"></a><span class="lineno">15579</span>&#160; </div>
-<div class="line"><a name="l15580"></a><span class="lineno">15580</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15581"></a><span class="lineno">15581</span>&#160;    UserDataString userDataStr(createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>, createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>);</div>
-<div class="line"><a name="l15582"></a><span class="lineno">15582</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaAllocateMemoryPages,%llu,%llu,%u,%u,%u,%u,%u,%u,%p,&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15583"></a><span class="lineno">15583</span>&#160;        vkMemReq.size,</div>
-<div class="line"><a name="l15584"></a><span class="lineno">15584</span>&#160;        vkMemReq.alignment,</div>
-<div class="line"><a name="l15585"></a><span class="lineno">15585</span>&#160;        vkMemReq.memoryTypeBits,</div>
-<div class="line"><a name="l15586"></a><span class="lineno">15586</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
-<div class="line"><a name="l15587"></a><span class="lineno">15587</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
-<div class="line"><a name="l15588"></a><span class="lineno">15588</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
-<div class="line"><a name="l15589"></a><span class="lineno">15589</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
-<div class="line"><a name="l15590"></a><span class="lineno">15590</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
-<div class="line"><a name="l15591"></a><span class="lineno">15591</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>);</div>
-<div class="line"><a name="l15592"></a><span class="lineno">15592</span>&#160;    PrintPointerList(allocationCount, pAllocations);</div>
-<div class="line"><a name="l15593"></a><span class="lineno">15593</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;,%s\n&quot;</span>, userDataStr.GetString());</div>
-<div class="line"><a name="l15594"></a><span class="lineno">15594</span>&#160;    Flush();</div>
-<div class="line"><a name="l15595"></a><span class="lineno">15595</span>&#160;}</div>
-<div class="line"><a name="l15596"></a><span class="lineno">15596</span>&#160; </div>
-<div class="line"><a name="l15597"></a><span class="lineno">15597</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordAllocateMemoryForBuffer(uint32_t frameIndex,</div>
-<div class="line"><a name="l15598"></a><span class="lineno">15598</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
-<div class="line"><a name="l15599"></a><span class="lineno">15599</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation,</div>
-<div class="line"><a name="l15600"></a><span class="lineno">15600</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation,</div>
-<div class="line"><a name="l15601"></a><span class="lineno">15601</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
-<div class="line"><a name="l15602"></a><span class="lineno">15602</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l15603"></a><span class="lineno">15603</span>&#160;{</div>
-<div class="line"><a name="l15604"></a><span class="lineno">15604</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15605"></a><span class="lineno">15605</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15606"></a><span class="lineno">15606</span>&#160; </div>
-<div class="line"><a name="l15607"></a><span class="lineno">15607</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15608"></a><span class="lineno">15608</span>&#160;    UserDataString userDataStr(createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>, createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>);</div>
-<div class="line"><a name="l15609"></a><span class="lineno">15609</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaAllocateMemoryForBuffer,%llu,%llu,%u,%u,%u,%u,%u,%u,%u,%u,%p,%p,%s\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15610"></a><span class="lineno">15610</span>&#160;        vkMemReq.size,</div>
-<div class="line"><a name="l15611"></a><span class="lineno">15611</span>&#160;        vkMemReq.alignment,</div>
-<div class="line"><a name="l15612"></a><span class="lineno">15612</span>&#160;        vkMemReq.memoryTypeBits,</div>
-<div class="line"><a name="l15613"></a><span class="lineno">15613</span>&#160;        requiresDedicatedAllocation ? 1 : 0,</div>
-<div class="line"><a name="l15614"></a><span class="lineno">15614</span>&#160;        prefersDedicatedAllocation ? 1 : 0,</div>
-<div class="line"><a name="l15615"></a><span class="lineno">15615</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
-<div class="line"><a name="l15616"></a><span class="lineno">15616</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
-<div class="line"><a name="l15617"></a><span class="lineno">15617</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
-<div class="line"><a name="l15618"></a><span class="lineno">15618</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
-<div class="line"><a name="l15619"></a><span class="lineno">15619</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
-<div class="line"><a name="l15620"></a><span class="lineno">15620</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
-<div class="line"><a name="l15621"></a><span class="lineno">15621</span>&#160;        allocation,</div>
-<div class="line"><a name="l15622"></a><span class="lineno">15622</span>&#160;        userDataStr.GetString());</div>
-<div class="line"><a name="l15623"></a><span class="lineno">15623</span>&#160;    Flush();</div>
-<div class="line"><a name="l15624"></a><span class="lineno">15624</span>&#160;}</div>
-<div class="line"><a name="l15625"></a><span class="lineno">15625</span>&#160; </div>
-<div class="line"><a name="l15626"></a><span class="lineno">15626</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordAllocateMemoryForImage(uint32_t frameIndex,</div>
-<div class="line"><a name="l15627"></a><span class="lineno">15627</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
-<div class="line"><a name="l15628"></a><span class="lineno">15628</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation,</div>
-<div class="line"><a name="l15629"></a><span class="lineno">15629</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation,</div>
-<div class="line"><a name="l15630"></a><span class="lineno">15630</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
-<div class="line"><a name="l15631"></a><span class="lineno">15631</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l15632"></a><span class="lineno">15632</span>&#160;{</div>
-<div class="line"><a name="l15633"></a><span class="lineno">15633</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15634"></a><span class="lineno">15634</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15635"></a><span class="lineno">15635</span>&#160; </div>
-<div class="line"><a name="l15636"></a><span class="lineno">15636</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15637"></a><span class="lineno">15637</span>&#160;    UserDataString userDataStr(createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>, createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>);</div>
-<div class="line"><a name="l15638"></a><span class="lineno">15638</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaAllocateMemoryForImage,%llu,%llu,%u,%u,%u,%u,%u,%u,%u,%u,%p,%p,%s\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15639"></a><span class="lineno">15639</span>&#160;        vkMemReq.size,</div>
-<div class="line"><a name="l15640"></a><span class="lineno">15640</span>&#160;        vkMemReq.alignment,</div>
-<div class="line"><a name="l15641"></a><span class="lineno">15641</span>&#160;        vkMemReq.memoryTypeBits,</div>
-<div class="line"><a name="l15642"></a><span class="lineno">15642</span>&#160;        requiresDedicatedAllocation ? 1 : 0,</div>
-<div class="line"><a name="l15643"></a><span class="lineno">15643</span>&#160;        prefersDedicatedAllocation ? 1 : 0,</div>
-<div class="line"><a name="l15644"></a><span class="lineno">15644</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
-<div class="line"><a name="l15645"></a><span class="lineno">15645</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
-<div class="line"><a name="l15646"></a><span class="lineno">15646</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
-<div class="line"><a name="l15647"></a><span class="lineno">15647</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
-<div class="line"><a name="l15648"></a><span class="lineno">15648</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
-<div class="line"><a name="l15649"></a><span class="lineno">15649</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
-<div class="line"><a name="l15650"></a><span class="lineno">15650</span>&#160;        allocation,</div>
-<div class="line"><a name="l15651"></a><span class="lineno">15651</span>&#160;        userDataStr.GetString());</div>
-<div class="line"><a name="l15652"></a><span class="lineno">15652</span>&#160;    Flush();</div>
-<div class="line"><a name="l15653"></a><span class="lineno">15653</span>&#160;}</div>
-<div class="line"><a name="l15654"></a><span class="lineno">15654</span>&#160; </div>
-<div class="line"><a name="l15655"></a><span class="lineno">15655</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordFreeMemory(uint32_t frameIndex,</div>
-<div class="line"><a name="l15656"></a><span class="lineno">15656</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l15657"></a><span class="lineno">15657</span>&#160;{</div>
-<div class="line"><a name="l15658"></a><span class="lineno">15658</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15659"></a><span class="lineno">15659</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15660"></a><span class="lineno">15660</span>&#160; </div>
-<div class="line"><a name="l15661"></a><span class="lineno">15661</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15662"></a><span class="lineno">15662</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaFreeMemory,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15663"></a><span class="lineno">15663</span>&#160;        allocation);</div>
-<div class="line"><a name="l15664"></a><span class="lineno">15664</span>&#160;    Flush();</div>
-<div class="line"><a name="l15665"></a><span class="lineno">15665</span>&#160;}</div>
-<div class="line"><a name="l15666"></a><span class="lineno">15666</span>&#160; </div>
-<div class="line"><a name="l15667"></a><span class="lineno">15667</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordFreeMemoryPages(uint32_t frameIndex,</div>
-<div class="line"><a name="l15668"></a><span class="lineno">15668</span>&#160;    uint64_t allocationCount,</div>
-<div class="line"><a name="l15669"></a><span class="lineno">15669</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
-<div class="line"><a name="l15670"></a><span class="lineno">15670</span>&#160;{</div>
-<div class="line"><a name="l15671"></a><span class="lineno">15671</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15672"></a><span class="lineno">15672</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15673"></a><span class="lineno">15673</span>&#160; </div>
-<div class="line"><a name="l15674"></a><span class="lineno">15674</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15675"></a><span class="lineno">15675</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaFreeMemoryPages,&quot;</span>, callParams.threadId, callParams.time, frameIndex);</div>
-<div class="line"><a name="l15676"></a><span class="lineno">15676</span>&#160;    PrintPointerList(allocationCount, pAllocations);</div>
-<div class="line"><a name="l15677"></a><span class="lineno">15677</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;\n&quot;</span>);</div>
-<div class="line"><a name="l15678"></a><span class="lineno">15678</span>&#160;    Flush();</div>
-<div class="line"><a name="l15679"></a><span class="lineno">15679</span>&#160;}</div>
-<div class="line"><a name="l15680"></a><span class="lineno">15680</span>&#160; </div>
-<div class="line"><a name="l15681"></a><span class="lineno">15681</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordSetAllocationUserData(uint32_t frameIndex,</div>
-<div class="line"><a name="l15682"></a><span class="lineno">15682</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l15683"></a><span class="lineno">15683</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pUserData)</div>
-<div class="line"><a name="l15684"></a><span class="lineno">15684</span>&#160;{</div>
-<div class="line"><a name="l15685"></a><span class="lineno">15685</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15686"></a><span class="lineno">15686</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15687"></a><span class="lineno">15687</span>&#160; </div>
-<div class="line"><a name="l15688"></a><span class="lineno">15688</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15689"></a><span class="lineno">15689</span>&#160;    UserDataString userDataStr(</div>
-<div class="line"><a name="l15690"></a><span class="lineno">15690</span>&#160;        allocation-&gt;IsUserDataString() ? <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a> : 0,</div>
-<div class="line"><a name="l15691"></a><span class="lineno">15691</span>&#160;        pUserData);</div>
-<div class="line"><a name="l15692"></a><span class="lineno">15692</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaSetAllocationUserData,%p,%s\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15693"></a><span class="lineno">15693</span>&#160;        allocation,</div>
-<div class="line"><a name="l15694"></a><span class="lineno">15694</span>&#160;        userDataStr.GetString());</div>
-<div class="line"><a name="l15695"></a><span class="lineno">15695</span>&#160;    Flush();</div>
-<div class="line"><a name="l15696"></a><span class="lineno">15696</span>&#160;}</div>
-<div class="line"><a name="l15697"></a><span class="lineno">15697</span>&#160; </div>
-<div class="line"><a name="l15698"></a><span class="lineno">15698</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreateLostAllocation(uint32_t frameIndex,</div>
-<div class="line"><a name="l15699"></a><span class="lineno">15699</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l15700"></a><span class="lineno">15700</span>&#160;{</div>
-<div class="line"><a name="l15701"></a><span class="lineno">15701</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15702"></a><span class="lineno">15702</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15703"></a><span class="lineno">15703</span>&#160; </div>
-<div class="line"><a name="l15704"></a><span class="lineno">15704</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15705"></a><span class="lineno">15705</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaCreateLostAllocation,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15706"></a><span class="lineno">15706</span>&#160;        allocation);</div>
-<div class="line"><a name="l15707"></a><span class="lineno">15707</span>&#160;    Flush();</div>
-<div class="line"><a name="l15708"></a><span class="lineno">15708</span>&#160;}</div>
-<div class="line"><a name="l15709"></a><span class="lineno">15709</span>&#160; </div>
-<div class="line"><a name="l15710"></a><span class="lineno">15710</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordMapMemory(uint32_t frameIndex,</div>
-<div class="line"><a name="l15711"></a><span class="lineno">15711</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l15712"></a><span class="lineno">15712</span>&#160;{</div>
-<div class="line"><a name="l15713"></a><span class="lineno">15713</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15714"></a><span class="lineno">15714</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15715"></a><span class="lineno">15715</span>&#160; </div>
-<div class="line"><a name="l15716"></a><span class="lineno">15716</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15717"></a><span class="lineno">15717</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaMapMemory,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15718"></a><span class="lineno">15718</span>&#160;        allocation);</div>
-<div class="line"><a name="l15719"></a><span class="lineno">15719</span>&#160;    Flush();</div>
-<div class="line"><a name="l15720"></a><span class="lineno">15720</span>&#160;}</div>
-<div class="line"><a name="l15721"></a><span class="lineno">15721</span>&#160; </div>
-<div class="line"><a name="l15722"></a><span class="lineno">15722</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordUnmapMemory(uint32_t frameIndex,</div>
-<div class="line"><a name="l15723"></a><span class="lineno">15723</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l15724"></a><span class="lineno">15724</span>&#160;{</div>
-<div class="line"><a name="l15725"></a><span class="lineno">15725</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15726"></a><span class="lineno">15726</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15727"></a><span class="lineno">15727</span>&#160; </div>
-<div class="line"><a name="l15728"></a><span class="lineno">15728</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15729"></a><span class="lineno">15729</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaUnmapMemory,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15730"></a><span class="lineno">15730</span>&#160;        allocation);</div>
-<div class="line"><a name="l15731"></a><span class="lineno">15731</span>&#160;    Flush();</div>
-<div class="line"><a name="l15732"></a><span class="lineno">15732</span>&#160;}</div>
-<div class="line"><a name="l15733"></a><span class="lineno">15733</span>&#160; </div>
-<div class="line"><a name="l15734"></a><span class="lineno">15734</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordFlushAllocation(uint32_t frameIndex,</div>
-<div class="line"><a name="l15735"></a><span class="lineno">15735</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</div>
-<div class="line"><a name="l15736"></a><span class="lineno">15736</span>&#160;{</div>
-<div class="line"><a name="l15737"></a><span class="lineno">15737</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15738"></a><span class="lineno">15738</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15739"></a><span class="lineno">15739</span>&#160; </div>
-<div class="line"><a name="l15740"></a><span class="lineno">15740</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15741"></a><span class="lineno">15741</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaFlushAllocation,%p,%llu,%llu\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15742"></a><span class="lineno">15742</span>&#160;        allocation,</div>
-<div class="line"><a name="l15743"></a><span class="lineno">15743</span>&#160;        offset,</div>
-<div class="line"><a name="l15744"></a><span class="lineno">15744</span>&#160;        size);</div>
-<div class="line"><a name="l15745"></a><span class="lineno">15745</span>&#160;    Flush();</div>
-<div class="line"><a name="l15746"></a><span class="lineno">15746</span>&#160;}</div>
-<div class="line"><a name="l15747"></a><span class="lineno">15747</span>&#160; </div>
-<div class="line"><a name="l15748"></a><span class="lineno">15748</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordInvalidateAllocation(uint32_t frameIndex,</div>
-<div class="line"><a name="l15749"></a><span class="lineno">15749</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</div>
-<div class="line"><a name="l15750"></a><span class="lineno">15750</span>&#160;{</div>
-<div class="line"><a name="l15751"></a><span class="lineno">15751</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15752"></a><span class="lineno">15752</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15753"></a><span class="lineno">15753</span>&#160; </div>
-<div class="line"><a name="l15754"></a><span class="lineno">15754</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15755"></a><span class="lineno">15755</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaInvalidateAllocation,%p,%llu,%llu\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15756"></a><span class="lineno">15756</span>&#160;        allocation,</div>
-<div class="line"><a name="l15757"></a><span class="lineno">15757</span>&#160;        offset,</div>
-<div class="line"><a name="l15758"></a><span class="lineno">15758</span>&#160;        size);</div>
-<div class="line"><a name="l15759"></a><span class="lineno">15759</span>&#160;    Flush();</div>
-<div class="line"><a name="l15760"></a><span class="lineno">15760</span>&#160;}</div>
-<div class="line"><a name="l15761"></a><span class="lineno">15761</span>&#160; </div>
-<div class="line"><a name="l15762"></a><span class="lineno">15762</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreateBuffer(uint32_t frameIndex,</div>
-<div class="line"><a name="l15763"></a><span class="lineno">15763</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo&amp; bufCreateInfo,</div>
-<div class="line"><a name="l15764"></a><span class="lineno">15764</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; allocCreateInfo,</div>
-<div class="line"><a name="l15765"></a><span class="lineno">15765</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l15766"></a><span class="lineno">15766</span>&#160;{</div>
-<div class="line"><a name="l15767"></a><span class="lineno">15767</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15768"></a><span class="lineno">15768</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15769"></a><span class="lineno">15769</span>&#160; </div>
-<div class="line"><a name="l15770"></a><span class="lineno">15770</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15771"></a><span class="lineno">15771</span>&#160;    UserDataString userDataStr(allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>, allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>);</div>
-<div class="line"><a name="l15772"></a><span class="lineno">15772</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaCreateBuffer,%u,%llu,%u,%u,%u,%u,%u,%u,%u,%p,%p,%s\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15773"></a><span class="lineno">15773</span>&#160;        bufCreateInfo.flags,</div>
-<div class="line"><a name="l15774"></a><span class="lineno">15774</span>&#160;        bufCreateInfo.size,</div>
-<div class="line"><a name="l15775"></a><span class="lineno">15775</span>&#160;        bufCreateInfo.usage,</div>
-<div class="line"><a name="l15776"></a><span class="lineno">15776</span>&#160;        bufCreateInfo.sharingMode,</div>
-<div class="line"><a name="l15777"></a><span class="lineno">15777</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
-<div class="line"><a name="l15778"></a><span class="lineno">15778</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
-<div class="line"><a name="l15779"></a><span class="lineno">15779</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
-<div class="line"><a name="l15780"></a><span class="lineno">15780</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
-<div class="line"><a name="l15781"></a><span class="lineno">15781</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
-<div class="line"><a name="l15782"></a><span class="lineno">15782</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
-<div class="line"><a name="l15783"></a><span class="lineno">15783</span>&#160;        allocation,</div>
-<div class="line"><a name="l15784"></a><span class="lineno">15784</span>&#160;        userDataStr.GetString());</div>
-<div class="line"><a name="l15785"></a><span class="lineno">15785</span>&#160;    Flush();</div>
-<div class="line"><a name="l15786"></a><span class="lineno">15786</span>&#160;}</div>
-<div class="line"><a name="l15787"></a><span class="lineno">15787</span>&#160; </div>
-<div class="line"><a name="l15788"></a><span class="lineno">15788</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreateImage(uint32_t frameIndex,</div>
-<div class="line"><a name="l15789"></a><span class="lineno">15789</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo&amp; imageCreateInfo,</div>
-<div class="line"><a name="l15790"></a><span class="lineno">15790</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; allocCreateInfo,</div>
-<div class="line"><a name="l15791"></a><span class="lineno">15791</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l15792"></a><span class="lineno">15792</span>&#160;{</div>
-<div class="line"><a name="l15793"></a><span class="lineno">15793</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15794"></a><span class="lineno">15794</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15795"></a><span class="lineno">15795</span>&#160; </div>
-<div class="line"><a name="l15796"></a><span class="lineno">15796</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15797"></a><span class="lineno">15797</span>&#160;    UserDataString userDataStr(allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>, allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>);</div>
-<div class="line"><a name="l15798"></a><span class="lineno">15798</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaCreateImage,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%p,%p,%s\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15799"></a><span class="lineno">15799</span>&#160;        imageCreateInfo.flags,</div>
-<div class="line"><a name="l15800"></a><span class="lineno">15800</span>&#160;        imageCreateInfo.imageType,</div>
-<div class="line"><a name="l15801"></a><span class="lineno">15801</span>&#160;        imageCreateInfo.format,</div>
-<div class="line"><a name="l15802"></a><span class="lineno">15802</span>&#160;        imageCreateInfo.extent.width,</div>
-<div class="line"><a name="l15803"></a><span class="lineno">15803</span>&#160;        imageCreateInfo.extent.height,</div>
-<div class="line"><a name="l15804"></a><span class="lineno">15804</span>&#160;        imageCreateInfo.extent.depth,</div>
-<div class="line"><a name="l15805"></a><span class="lineno">15805</span>&#160;        imageCreateInfo.mipLevels,</div>
-<div class="line"><a name="l15806"></a><span class="lineno">15806</span>&#160;        imageCreateInfo.arrayLayers,</div>
-<div class="line"><a name="l15807"></a><span class="lineno">15807</span>&#160;        imageCreateInfo.samples,</div>
-<div class="line"><a name="l15808"></a><span class="lineno">15808</span>&#160;        imageCreateInfo.tiling,</div>
-<div class="line"><a name="l15809"></a><span class="lineno">15809</span>&#160;        imageCreateInfo.usage,</div>
-<div class="line"><a name="l15810"></a><span class="lineno">15810</span>&#160;        imageCreateInfo.sharingMode,</div>
-<div class="line"><a name="l15811"></a><span class="lineno">15811</span>&#160;        imageCreateInfo.initialLayout,</div>
-<div class="line"><a name="l15812"></a><span class="lineno">15812</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
-<div class="line"><a name="l15813"></a><span class="lineno">15813</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
-<div class="line"><a name="l15814"></a><span class="lineno">15814</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
-<div class="line"><a name="l15815"></a><span class="lineno">15815</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
-<div class="line"><a name="l15816"></a><span class="lineno">15816</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
-<div class="line"><a name="l15817"></a><span class="lineno">15817</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
-<div class="line"><a name="l15818"></a><span class="lineno">15818</span>&#160;        allocation,</div>
-<div class="line"><a name="l15819"></a><span class="lineno">15819</span>&#160;        userDataStr.GetString());</div>
-<div class="line"><a name="l15820"></a><span class="lineno">15820</span>&#160;    Flush();</div>
-<div class="line"><a name="l15821"></a><span class="lineno">15821</span>&#160;}</div>
-<div class="line"><a name="l15822"></a><span class="lineno">15822</span>&#160; </div>
-<div class="line"><a name="l15823"></a><span class="lineno">15823</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDestroyBuffer(uint32_t frameIndex,</div>
-<div class="line"><a name="l15824"></a><span class="lineno">15824</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l15825"></a><span class="lineno">15825</span>&#160;{</div>
-<div class="line"><a name="l15826"></a><span class="lineno">15826</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15827"></a><span class="lineno">15827</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15828"></a><span class="lineno">15828</span>&#160; </div>
-<div class="line"><a name="l15829"></a><span class="lineno">15829</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15830"></a><span class="lineno">15830</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaDestroyBuffer,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15831"></a><span class="lineno">15831</span>&#160;        allocation);</div>
-<div class="line"><a name="l15832"></a><span class="lineno">15832</span>&#160;    Flush();</div>
-<div class="line"><a name="l15833"></a><span class="lineno">15833</span>&#160;}</div>
-<div class="line"><a name="l15834"></a><span class="lineno">15834</span>&#160; </div>
-<div class="line"><a name="l15835"></a><span class="lineno">15835</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDestroyImage(uint32_t frameIndex,</div>
-<div class="line"><a name="l15836"></a><span class="lineno">15836</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l15837"></a><span class="lineno">15837</span>&#160;{</div>
-<div class="line"><a name="l15838"></a><span class="lineno">15838</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15839"></a><span class="lineno">15839</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15840"></a><span class="lineno">15840</span>&#160; </div>
-<div class="line"><a name="l15841"></a><span class="lineno">15841</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15842"></a><span class="lineno">15842</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaDestroyImage,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15843"></a><span class="lineno">15843</span>&#160;        allocation);</div>
-<div class="line"><a name="l15844"></a><span class="lineno">15844</span>&#160;    Flush();</div>
-<div class="line"><a name="l15845"></a><span class="lineno">15845</span>&#160;}</div>
-<div class="line"><a name="l15846"></a><span class="lineno">15846</span>&#160; </div>
-<div class="line"><a name="l15847"></a><span class="lineno">15847</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordTouchAllocation(uint32_t frameIndex,</div>
-<div class="line"><a name="l15848"></a><span class="lineno">15848</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l15849"></a><span class="lineno">15849</span>&#160;{</div>
-<div class="line"><a name="l15850"></a><span class="lineno">15850</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15851"></a><span class="lineno">15851</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15852"></a><span class="lineno">15852</span>&#160; </div>
-<div class="line"><a name="l15853"></a><span class="lineno">15853</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15854"></a><span class="lineno">15854</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaTouchAllocation,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15855"></a><span class="lineno">15855</span>&#160;        allocation);</div>
-<div class="line"><a name="l15856"></a><span class="lineno">15856</span>&#160;    Flush();</div>
-<div class="line"><a name="l15857"></a><span class="lineno">15857</span>&#160;}</div>
-<div class="line"><a name="l15858"></a><span class="lineno">15858</span>&#160; </div>
-<div class="line"><a name="l15859"></a><span class="lineno">15859</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordGetAllocationInfo(uint32_t frameIndex,</div>
-<div class="line"><a name="l15860"></a><span class="lineno">15860</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l15861"></a><span class="lineno">15861</span>&#160;{</div>
-<div class="line"><a name="l15862"></a><span class="lineno">15862</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15863"></a><span class="lineno">15863</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15864"></a><span class="lineno">15864</span>&#160; </div>
-<div class="line"><a name="l15865"></a><span class="lineno">15865</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15866"></a><span class="lineno">15866</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaGetAllocationInfo,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15867"></a><span class="lineno">15867</span>&#160;        allocation);</div>
-<div class="line"><a name="l15868"></a><span class="lineno">15868</span>&#160;    Flush();</div>
-<div class="line"><a name="l15869"></a><span class="lineno">15869</span>&#160;}</div>
-<div class="line"><a name="l15870"></a><span class="lineno">15870</span>&#160; </div>
-<div class="line"><a name="l15871"></a><span class="lineno">15871</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordMakePoolAllocationsLost(uint32_t frameIndex,</div>
-<div class="line"><a name="l15872"></a><span class="lineno">15872</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</div>
-<div class="line"><a name="l15873"></a><span class="lineno">15873</span>&#160;{</div>
-<div class="line"><a name="l15874"></a><span class="lineno">15874</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15875"></a><span class="lineno">15875</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15876"></a><span class="lineno">15876</span>&#160; </div>
-<div class="line"><a name="l15877"></a><span class="lineno">15877</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15878"></a><span class="lineno">15878</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaMakePoolAllocationsLost,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15879"></a><span class="lineno">15879</span>&#160;        pool);</div>
-<div class="line"><a name="l15880"></a><span class="lineno">15880</span>&#160;    Flush();</div>
-<div class="line"><a name="l15881"></a><span class="lineno">15881</span>&#160;}</div>
-<div class="line"><a name="l15882"></a><span class="lineno">15882</span>&#160; </div>
-<div class="line"><a name="l15883"></a><span class="lineno">15883</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDefragmentationBegin(uint32_t frameIndex,</div>
-<div class="line"><a name="l15884"></a><span class="lineno">15884</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a>&amp; info,</div>
-<div class="line"><a name="l15885"></a><span class="lineno">15885</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> ctx)</div>
-<div class="line"><a name="l15886"></a><span class="lineno">15886</span>&#160;{</div>
-<div class="line"><a name="l15887"></a><span class="lineno">15887</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15888"></a><span class="lineno">15888</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15889"></a><span class="lineno">15889</span>&#160; </div>
-<div class="line"><a name="l15890"></a><span class="lineno">15890</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15891"></a><span class="lineno">15891</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaDefragmentationBegin,%u,&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15892"></a><span class="lineno">15892</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">flags</a>);</div>
-<div class="line"><a name="l15893"></a><span class="lineno">15893</span>&#160;    PrintPointerList(info.<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">pAllocations</a>);</div>
-<div class="line"><a name="l15894"></a><span class="lineno">15894</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;,&quot;</span>);</div>
-<div class="line"><a name="l15895"></a><span class="lineno">15895</span>&#160;    PrintPointerList(info.<a class="code" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">poolCount</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b">pPools</a>);</div>
-<div class="line"><a name="l15896"></a><span class="lineno">15896</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;,%llu,%u,%llu,%u,%p,%p\n&quot;</span>,</div>
-<div class="line"><a name="l15897"></a><span class="lineno">15897</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">maxCpuBytesToMove</a>,</div>
-<div class="line"><a name="l15898"></a><span class="lineno">15898</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a>,</div>
-<div class="line"><a name="l15899"></a><span class="lineno">15899</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08">maxGpuBytesToMove</a>,</div>
-<div class="line"><a name="l15900"></a><span class="lineno">15900</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6">maxGpuAllocationsToMove</a>,</div>
-<div class="line"><a name="l15901"></a><span class="lineno">15901</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">commandBuffer</a>,</div>
-<div class="line"><a name="l15902"></a><span class="lineno">15902</span>&#160;        ctx);</div>
-<div class="line"><a name="l15903"></a><span class="lineno">15903</span>&#160;    Flush();</div>
-<div class="line"><a name="l15904"></a><span class="lineno">15904</span>&#160;}</div>
-<div class="line"><a name="l15905"></a><span class="lineno">15905</span>&#160; </div>
-<div class="line"><a name="l15906"></a><span class="lineno">15906</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDefragmentationEnd(uint32_t frameIndex,</div>
-<div class="line"><a name="l15907"></a><span class="lineno">15907</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> ctx)</div>
-<div class="line"><a name="l15908"></a><span class="lineno">15908</span>&#160;{</div>
-<div class="line"><a name="l15909"></a><span class="lineno">15909</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15910"></a><span class="lineno">15910</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15911"></a><span class="lineno">15911</span>&#160; </div>
-<div class="line"><a name="l15912"></a><span class="lineno">15912</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15913"></a><span class="lineno">15913</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaDefragmentationEnd,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15914"></a><span class="lineno">15914</span>&#160;        ctx);</div>
-<div class="line"><a name="l15915"></a><span class="lineno">15915</span>&#160;    Flush();</div>
-<div class="line"><a name="l15916"></a><span class="lineno">15916</span>&#160;}</div>
-<div class="line"><a name="l15917"></a><span class="lineno">15917</span>&#160; </div>
-<div class="line"><a name="l15918"></a><span class="lineno">15918</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordSetPoolName(uint32_t frameIndex,</div>
-<div class="line"><a name="l15919"></a><span class="lineno">15919</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
-<div class="line"><a name="l15920"></a><span class="lineno">15920</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* name)</div>
-<div class="line"><a name="l15921"></a><span class="lineno">15921</span>&#160;{</div>
-<div class="line"><a name="l15922"></a><span class="lineno">15922</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l15923"></a><span class="lineno">15923</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l15924"></a><span class="lineno">15924</span>&#160; </div>
-<div class="line"><a name="l15925"></a><span class="lineno">15925</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l15926"></a><span class="lineno">15926</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaSetPoolName,%p,%s\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
-<div class="line"><a name="l15927"></a><span class="lineno">15927</span>&#160;        pool, name != VMA_NULL ? name : <span class="stringliteral">&quot;&quot;</span>);</div>
-<div class="line"><a name="l15928"></a><span class="lineno">15928</span>&#160;    Flush();</div>
-<div class="line"><a name="l15929"></a><span class="lineno">15929</span>&#160;}</div>
-<div class="line"><a name="l15930"></a><span class="lineno">15930</span>&#160; </div>
-<div class="line"><a name="l15931"></a><span class="lineno">15931</span>&#160;VmaRecorder::UserDataString::UserDataString(<a class="code" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a> allocFlags, <span class="keyword">const</span> <span class="keywordtype">void</span>* pUserData)</div>
-<div class="line"><a name="l15932"></a><span class="lineno">15932</span>&#160;{</div>
-<div class="line"><a name="l15933"></a><span class="lineno">15933</span>&#160;    <span class="keywordflow">if</span>(pUserData != VMA_NULL)</div>
-<div class="line"><a name="l15934"></a><span class="lineno">15934</span>&#160;    {</div>
-<div class="line"><a name="l15935"></a><span class="lineno">15935</span>&#160;        <span class="keywordflow">if</span>((allocFlags &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a>) != 0)</div>
-<div class="line"><a name="l15936"></a><span class="lineno">15936</span>&#160;        {</div>
-<div class="line"><a name="l15937"></a><span class="lineno">15937</span>&#160;            m_Str = (<span class="keyword">const</span> <span class="keywordtype">char</span>*)pUserData;</div>
-<div class="line"><a name="l15938"></a><span class="lineno">15938</span>&#160;        }</div>
-<div class="line"><a name="l15939"></a><span class="lineno">15939</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15940"></a><span class="lineno">15940</span>&#160;        {</div>
-<div class="line"><a name="l15941"></a><span class="lineno">15941</span>&#160;            <span class="comment">// If VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT is not specified, convert the string&#39;s memory address to a string and store it.</span></div>
-<div class="line"><a name="l15942"></a><span class="lineno">15942</span>&#160;            snprintf(m_PtrStr, 17, <span class="stringliteral">&quot;%p&quot;</span>, pUserData);</div>
-<div class="line"><a name="l15943"></a><span class="lineno">15943</span>&#160;            m_Str = m_PtrStr;</div>
-<div class="line"><a name="l15944"></a><span class="lineno">15944</span>&#160;        }</div>
-<div class="line"><a name="l15945"></a><span class="lineno">15945</span>&#160;    }</div>
-<div class="line"><a name="l15946"></a><span class="lineno">15946</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15947"></a><span class="lineno">15947</span>&#160;    {</div>
-<div class="line"><a name="l15948"></a><span class="lineno">15948</span>&#160;        m_Str = <span class="stringliteral">&quot;&quot;</span>;</div>
-<div class="line"><a name="l15949"></a><span class="lineno">15949</span>&#160;    }</div>
-<div class="line"><a name="l15950"></a><span class="lineno">15950</span>&#160;}</div>
-<div class="line"><a name="l15951"></a><span class="lineno">15951</span>&#160; </div>
-<div class="line"><a name="l15952"></a><span class="lineno">15952</span>&#160;<span class="keywordtype">void</span> VmaRecorder::WriteConfiguration(</div>
-<div class="line"><a name="l15953"></a><span class="lineno">15953</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceProperties&amp; devProps,</div>
-<div class="line"><a name="l15954"></a><span class="lineno">15954</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceMemoryProperties&amp; memProps,</div>
-<div class="line"><a name="l15955"></a><span class="lineno">15955</span>&#160;    uint32_t vulkanApiVersion,</div>
-<div class="line"><a name="l15956"></a><span class="lineno">15956</span>&#160;    <span class="keywordtype">bool</span> dedicatedAllocationExtensionEnabled,</div>
-<div class="line"><a name="l15957"></a><span class="lineno">15957</span>&#160;    <span class="keywordtype">bool</span> bindMemory2ExtensionEnabled,</div>
-<div class="line"><a name="l15958"></a><span class="lineno">15958</span>&#160;    <span class="keywordtype">bool</span> memoryBudgetExtensionEnabled,</div>
-<div class="line"><a name="l15959"></a><span class="lineno">15959</span>&#160;    <span class="keywordtype">bool</span> deviceCoherentMemoryExtensionEnabled)</div>
-<div class="line"><a name="l15960"></a><span class="lineno">15960</span>&#160;{</div>
-<div class="line"><a name="l15961"></a><span class="lineno">15961</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Config,Begin\n&quot;</span>);</div>
-<div class="line"><a name="l15962"></a><span class="lineno">15962</span>&#160; </div>
-<div class="line"><a name="l15963"></a><span class="lineno">15963</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;VulkanApiVersion,%u,%u\n&quot;</span>, VK_VERSION_MAJOR(vulkanApiVersion), VK_VERSION_MINOR(vulkanApiVersion));</div>
-<div class="line"><a name="l15964"></a><span class="lineno">15964</span>&#160; </div>
-<div class="line"><a name="l15965"></a><span class="lineno">15965</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,apiVersion,%u\n&quot;</span>, devProps.apiVersion);</div>
-<div class="line"><a name="l15966"></a><span class="lineno">15966</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,driverVersion,%u\n&quot;</span>, devProps.driverVersion);</div>
-<div class="line"><a name="l15967"></a><span class="lineno">15967</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,vendorID,%u\n&quot;</span>, devProps.vendorID);</div>
-<div class="line"><a name="l15968"></a><span class="lineno">15968</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,deviceID,%u\n&quot;</span>, devProps.deviceID);</div>
-<div class="line"><a name="l15969"></a><span class="lineno">15969</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,deviceType,%u\n&quot;</span>, devProps.deviceType);</div>
-<div class="line"><a name="l15970"></a><span class="lineno">15970</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,deviceName,%s\n&quot;</span>, devProps.deviceName);</div>
-<div class="line"><a name="l15971"></a><span class="lineno">15971</span>&#160; </div>
-<div class="line"><a name="l15972"></a><span class="lineno">15972</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceLimits,maxMemoryAllocationCount,%u\n&quot;</span>, devProps.limits.maxMemoryAllocationCount);</div>
-<div class="line"><a name="l15973"></a><span class="lineno">15973</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceLimits,bufferImageGranularity,%llu\n&quot;</span>, devProps.limits.bufferImageGranularity);</div>
-<div class="line"><a name="l15974"></a><span class="lineno">15974</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceLimits,nonCoherentAtomSize,%llu\n&quot;</span>, devProps.limits.nonCoherentAtomSize);</div>
-<div class="line"><a name="l15975"></a><span class="lineno">15975</span>&#160; </div>
-<div class="line"><a name="l15976"></a><span class="lineno">15976</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,HeapCount,%u\n&quot;</span>, memProps.memoryHeapCount);</div>
-<div class="line"><a name="l15977"></a><span class="lineno">15977</span>&#160;    <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; memProps.memoryHeapCount; ++i)</div>
-<div class="line"><a name="l15978"></a><span class="lineno">15978</span>&#160;    {</div>
-<div class="line"><a name="l15979"></a><span class="lineno">15979</span>&#160;        fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,Heap,%u,size,%llu\n&quot;</span>, i, memProps.memoryHeaps[i].size);</div>
-<div class="line"><a name="l15980"></a><span class="lineno">15980</span>&#160;        fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,Heap,%u,flags,%u\n&quot;</span>, i, memProps.memoryHeaps[i].flags);</div>
-<div class="line"><a name="l15981"></a><span class="lineno">15981</span>&#160;    }</div>
-<div class="line"><a name="l15982"></a><span class="lineno">15982</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,TypeCount,%u\n&quot;</span>, memProps.memoryTypeCount);</div>
-<div class="line"><a name="l15983"></a><span class="lineno">15983</span>&#160;    <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; memProps.memoryTypeCount; ++i)</div>
-<div class="line"><a name="l15984"></a><span class="lineno">15984</span>&#160;    {</div>
-<div class="line"><a name="l15985"></a><span class="lineno">15985</span>&#160;        fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,Type,%u,heapIndex,%u\n&quot;</span>, i, memProps.memoryTypes[i].heapIndex);</div>
-<div class="line"><a name="l15986"></a><span class="lineno">15986</span>&#160;        fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,Type,%u,propertyFlags,%u\n&quot;</span>, i, memProps.memoryTypes[i].propertyFlags);</div>
-<div class="line"><a name="l15987"></a><span class="lineno">15987</span>&#160;    }</div>
-<div class="line"><a name="l15988"></a><span class="lineno">15988</span>&#160; </div>
-<div class="line"><a name="l15989"></a><span class="lineno">15989</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Extension,VK_KHR_dedicated_allocation,%u\n&quot;</span>, dedicatedAllocationExtensionEnabled ? 1 : 0);</div>
-<div class="line"><a name="l15990"></a><span class="lineno">15990</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Extension,VK_KHR_bind_memory2,%u\n&quot;</span>, bindMemory2ExtensionEnabled ? 1 : 0);</div>
-<div class="line"><a name="l15991"></a><span class="lineno">15991</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Extension,VK_EXT_memory_budget,%u\n&quot;</span>, memoryBudgetExtensionEnabled ? 1 : 0);</div>
-<div class="line"><a name="l15992"></a><span class="lineno">15992</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Extension,VK_AMD_device_coherent_memory,%u\n&quot;</span>, deviceCoherentMemoryExtensionEnabled ? 1 : 0);</div>
-<div class="line"><a name="l15993"></a><span class="lineno">15993</span>&#160; </div>
-<div class="line"><a name="l15994"></a><span class="lineno">15994</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEBUG_ALWAYS_DEDICATED_MEMORY,%u\n&quot;</span>, VMA_DEBUG_ALWAYS_DEDICATED_MEMORY ? 1 : 0);</div>
-<div class="line"><a name="l15995"></a><span class="lineno">15995</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_MIN_ALIGNMENT,%llu\n&quot;</span>, (VkDeviceSize)VMA_MIN_ALIGNMENT);</div>
-<div class="line"><a name="l15996"></a><span class="lineno">15996</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEBUG_MARGIN,%llu\n&quot;</span>, (VkDeviceSize)VMA_DEBUG_MARGIN);</div>
-<div class="line"><a name="l15997"></a><span class="lineno">15997</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEBUG_INITIALIZE_ALLOCATIONS,%u\n&quot;</span>, VMA_DEBUG_INITIALIZE_ALLOCATIONS ? 1 : 0);</div>
-<div class="line"><a name="l15998"></a><span class="lineno">15998</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEBUG_DETECT_CORRUPTION,%u\n&quot;</span>, VMA_DEBUG_DETECT_CORRUPTION ? 1 : 0);</div>
-<div class="line"><a name="l15999"></a><span class="lineno">15999</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEBUG_GLOBAL_MUTEX,%u\n&quot;</span>, VMA_DEBUG_GLOBAL_MUTEX ? 1 : 0);</div>
-<div class="line"><a name="l16000"></a><span class="lineno">16000</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY,%llu\n&quot;</span>, (VkDeviceSize)VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY);</div>
-<div class="line"><a name="l16001"></a><span class="lineno">16001</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_SMALL_HEAP_MAX_SIZE,%llu\n&quot;</span>, (VkDeviceSize)VMA_SMALL_HEAP_MAX_SIZE);</div>
-<div class="line"><a name="l16002"></a><span class="lineno">16002</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE,%llu\n&quot;</span>, (VkDeviceSize)VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE);</div>
-<div class="line"><a name="l16003"></a><span class="lineno">16003</span>&#160; </div>
-<div class="line"><a name="l16004"></a><span class="lineno">16004</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Config,End\n&quot;</span>);</div>
-<div class="line"><a name="l16005"></a><span class="lineno">16005</span>&#160;}</div>
-<div class="line"><a name="l16006"></a><span class="lineno">16006</span>&#160; </div>
-<div class="line"><a name="l16007"></a><span class="lineno">16007</span>&#160;<span class="keywordtype">void</span> VmaRecorder::GetBasicParams(CallParams&amp; outParams)</div>
-<div class="line"><a name="l16008"></a><span class="lineno">16008</span>&#160;{</div>
-<div class="line"><a name="l16009"></a><span class="lineno">16009</span>&#160;<span class="preprocessor">    #if defined(_WIN32)</span></div>
-<div class="line"><a name="l16010"></a><span class="lineno">16010</span>&#160;        outParams.threadId = GetCurrentThreadId();</div>
-<div class="line"><a name="l16011"></a><span class="lineno">16011</span>&#160;<span class="preprocessor">    #else</span></div>
-<div class="line"><a name="l16012"></a><span class="lineno">16012</span>&#160;        <span class="comment">// Use C++11 features to get thread id and convert it to uint32_t.</span></div>
-<div class="line"><a name="l16013"></a><span class="lineno">16013</span>&#160;        <span class="comment">// There is room for optimization since sstream is quite slow.</span></div>
-<div class="line"><a name="l16014"></a><span class="lineno">16014</span>&#160;        <span class="comment">// Is there a better way to convert std::this_thread::get_id() to uint32_t?</span></div>
-<div class="line"><a name="l16015"></a><span class="lineno">16015</span>&#160;        std::thread::id thread_id = std::this_thread::get_id();</div>
-<div class="line"><a name="l16016"></a><span class="lineno">16016</span>&#160;        std::stringstream thread_id_to_string_converter;</div>
-<div class="line"><a name="l16017"></a><span class="lineno">16017</span>&#160;        thread_id_to_string_converter &lt;&lt; thread_id;</div>
-<div class="line"><a name="l16018"></a><span class="lineno">16018</span>&#160;        std::string thread_id_as_string = thread_id_to_string_converter.str();</div>
-<div class="line"><a name="l16019"></a><span class="lineno">16019</span>&#160;        outParams.threadId = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(std::stoi(thread_id_as_string.c_str()));</div>
-<div class="line"><a name="l16020"></a><span class="lineno">16020</span>&#160;<span class="preprocessor">    #endif</span></div>
-<div class="line"><a name="l16021"></a><span class="lineno">16021</span>&#160; </div>
-<div class="line"><a name="l16022"></a><span class="lineno">16022</span>&#160;    <span class="keyword">auto</span> current_time = std::chrono::high_resolution_clock::now();</div>
-<div class="line"><a name="l16023"></a><span class="lineno">16023</span>&#160; </div>
-<div class="line"><a name="l16024"></a><span class="lineno">16024</span>&#160;    outParams.time = std::chrono::duration&lt;double, std::chrono::seconds::period&gt;(current_time - m_RecordingStartTime).count();</div>
-<div class="line"><a name="l16025"></a><span class="lineno">16025</span>&#160;}</div>
-<div class="line"><a name="l16026"></a><span class="lineno">16026</span>&#160; </div>
-<div class="line"><a name="l16027"></a><span class="lineno">16027</span>&#160;<span class="keywordtype">void</span> VmaRecorder::PrintPointerList(uint64_t count, <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pItems)</div>
-<div class="line"><a name="l16028"></a><span class="lineno">16028</span>&#160;{</div>
-<div class="line"><a name="l16029"></a><span class="lineno">16029</span>&#160;    <span class="keywordflow">if</span>(count)</div>
-<div class="line"><a name="l16030"></a><span class="lineno">16030</span>&#160;    {</div>
-<div class="line"><a name="l16031"></a><span class="lineno">16031</span>&#160;        fprintf(m_File, <span class="stringliteral">&quot;%p&quot;</span>, pItems[0]);</div>
-<div class="line"><a name="l16032"></a><span class="lineno">16032</span>&#160;        <span class="keywordflow">for</span>(uint64_t i = 1; i &lt; count; ++i)</div>
-<div class="line"><a name="l16033"></a><span class="lineno">16033</span>&#160;        {</div>
-<div class="line"><a name="l16034"></a><span class="lineno">16034</span>&#160;            fprintf(m_File, <span class="stringliteral">&quot; %p&quot;</span>, pItems[i]);</div>
-<div class="line"><a name="l16035"></a><span class="lineno">16035</span>&#160;        }</div>
-<div class="line"><a name="l16036"></a><span class="lineno">16036</span>&#160;    }</div>
-<div class="line"><a name="l16037"></a><span class="lineno">16037</span>&#160;}</div>
-<div class="line"><a name="l16038"></a><span class="lineno">16038</span>&#160; </div>
-<div class="line"><a name="l16039"></a><span class="lineno">16039</span>&#160;<span class="keywordtype">void</span> VmaRecorder::Flush()</div>
-<div class="line"><a name="l16040"></a><span class="lineno">16040</span>&#160;{</div>
-<div class="line"><a name="l16041"></a><span class="lineno">16041</span>&#160;    <span class="keywordflow">if</span>((m_Flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7">VMA_RECORD_FLUSH_AFTER_CALL_BIT</a>) != 0)</div>
-<div class="line"><a name="l16042"></a><span class="lineno">16042</span>&#160;    {</div>
-<div class="line"><a name="l16043"></a><span class="lineno">16043</span>&#160;        fflush(m_File);</div>
-<div class="line"><a name="l16044"></a><span class="lineno">16044</span>&#160;    }</div>
-<div class="line"><a name="l16045"></a><span class="lineno">16045</span>&#160;}</div>
-<div class="line"><a name="l16046"></a><span class="lineno">16046</span>&#160; </div>
-<div class="line"><a name="l16047"></a><span class="lineno">16047</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l16048"></a><span class="lineno">16048</span>&#160; </div>
-<div class="line"><a name="l16050"></a><span class="lineno">16050</span>&#160;<span class="comment">// VmaAllocationObjectAllocator</span></div>
-<div class="line"><a name="l16051"></a><span class="lineno">16051</span>&#160; </div>
-<div class="line"><a name="l16052"></a><span class="lineno">16052</span>&#160;VmaAllocationObjectAllocator::VmaAllocationObjectAllocator(<span class="keyword">const</span> VkAllocationCallbacks* pAllocationCallbacks) :</div>
-<div class="line"><a name="l16053"></a><span class="lineno">16053</span>&#160;    m_Allocator(pAllocationCallbacks, 1024)</div>
-<div class="line"><a name="l16054"></a><span class="lineno">16054</span>&#160;{</div>
-<div class="line"><a name="l16055"></a><span class="lineno">16055</span>&#160;}</div>
-<div class="line"><a name="l16056"></a><span class="lineno">16056</span>&#160; </div>
-<div class="line"><a name="l16057"></a><span class="lineno">16057</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Types&gt; <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VmaAllocationObjectAllocator::Allocate(Types... args)</div>
-<div class="line"><a name="l16058"></a><span class="lineno">16058</span>&#160;{</div>
-<div class="line"><a name="l16059"></a><span class="lineno">16059</span>&#160;    VmaMutexLock mutexLock(m_Mutex);</div>
-<div class="line"><a name="l16060"></a><span class="lineno">16060</span>&#160;    <span class="keywordflow">return</span> m_Allocator.Alloc&lt;Types...&gt;(std::forward&lt;Types&gt;(args)...);</div>
-<div class="line"><a name="l16061"></a><span class="lineno">16061</span>&#160;}</div>
-<div class="line"><a name="l16062"></a><span class="lineno">16062</span>&#160; </div>
-<div class="line"><a name="l16063"></a><span class="lineno">16063</span>&#160;<span class="keywordtype">void</span> VmaAllocationObjectAllocator::Free(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAlloc)</div>
-<div class="line"><a name="l16064"></a><span class="lineno">16064</span>&#160;{</div>
-<div class="line"><a name="l16065"></a><span class="lineno">16065</span>&#160;    VmaMutexLock mutexLock(m_Mutex);</div>
-<div class="line"><a name="l16066"></a><span class="lineno">16066</span>&#160;    m_Allocator.Free(hAlloc);</div>
-<div class="line"><a name="l16067"></a><span class="lineno">16067</span>&#160;}</div>
-<div class="line"><a name="l16068"></a><span class="lineno">16068</span>&#160; </div>
-<div class="line"><a name="l16070"></a><span class="lineno">16070</span>&#160;<span class="comment">// VmaAllocator_T</span></div>
-<div class="line"><a name="l16071"></a><span class="lineno">16071</span>&#160; </div>
-<div class="line"><a name="l16072"></a><span class="lineno">16072</span>&#160;VmaAllocator_T::VmaAllocator_T(<span class="keyword">const</span> <a class="code" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a>* pCreateInfo) :</div>
-<div class="line"><a name="l16073"></a><span class="lineno">16073</span>&#160;    m_UseMutex((pCreateInfo-&gt;flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</a>) == 0),</div>
-<div class="line"><a name="l16074"></a><span class="lineno">16074</span>&#160;    m_VulkanApiVersion(pCreateInfo-&gt;vulkanApiVersion != 0 ? pCreateInfo-&gt;vulkanApiVersion : VK_API_VERSION_1_0),</div>
-<div class="line"><a name="l16075"></a><span class="lineno">16075</span>&#160;    m_UseKhrDedicatedAllocation((pCreateInfo-&gt;flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a>) != 0),</div>
-<div class="line"><a name="l16076"></a><span class="lineno">16076</span>&#160;    m_UseKhrBindMemory2((pCreateInfo-&gt;flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a>) != 0),</div>
-<div class="line"><a name="l16077"></a><span class="lineno">16077</span>&#160;    m_UseExtMemoryBudget((pCreateInfo-&gt;flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</a>) != 0),</div>
-<div class="line"><a name="l16078"></a><span class="lineno">16078</span>&#160;    m_UseAmdDeviceCoherentMemory((pCreateInfo-&gt;flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT</a>) != 0),</div>
-<div class="line"><a name="l16079"></a><span class="lineno">16079</span>&#160;    m_UseKhrBufferDeviceAddress((pCreateInfo-&gt;flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</a>) != 0),</div>
-<div class="line"><a name="l16080"></a><span class="lineno">16080</span>&#160;    m_UseExtMemoryPriority((pCreateInfo-&gt;flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</a>) != 0),</div>
-<div class="line"><a name="l16081"></a><span class="lineno">16081</span>&#160;    m_hDevice(pCreateInfo-&gt;device),</div>
-<div class="line"><a name="l16082"></a><span class="lineno">16082</span>&#160;    m_hInstance(pCreateInfo-&gt;instance),</div>
-<div class="line"><a name="l16083"></a><span class="lineno">16083</span>&#160;    m_AllocationCallbacksSpecified(pCreateInfo-&gt;pAllocationCallbacks != VMA_NULL),</div>
-<div class="line"><a name="l16084"></a><span class="lineno">16084</span>&#160;    m_AllocationCallbacks(pCreateInfo-&gt;pAllocationCallbacks ?</div>
-<div class="line"><a name="l16085"></a><span class="lineno">16085</span>&#160;        *pCreateInfo-&gt;pAllocationCallbacks : VmaEmptyAllocationCallbacks),</div>
-<div class="line"><a name="l16086"></a><span class="lineno">16086</span>&#160;    m_AllocationObjectAllocator(&amp;m_AllocationCallbacks),</div>
-<div class="line"><a name="l16087"></a><span class="lineno">16087</span>&#160;    m_HeapSizeLimitMask(0),</div>
-<div class="line"><a name="l16088"></a><span class="lineno">16088</span>&#160;    m_DeviceMemoryCount(0),</div>
-<div class="line"><a name="l16089"></a><span class="lineno">16089</span>&#160;    m_PreferredLargeHeapBlockSize(0),</div>
-<div class="line"><a name="l16090"></a><span class="lineno">16090</span>&#160;    m_PhysicalDevice(pCreateInfo-&gt;physicalDevice),</div>
-<div class="line"><a name="l16091"></a><span class="lineno">16091</span>&#160;    m_CurrentFrameIndex(0),</div>
-<div class="line"><a name="l16092"></a><span class="lineno">16092</span>&#160;    m_GpuDefragmentationMemoryTypeBits(UINT32_MAX),</div>
-<div class="line"><a name="l16093"></a><span class="lineno">16093</span>&#160;    m_NextPoolId(0),</div>
-<div class="line"><a name="l16094"></a><span class="lineno">16094</span>&#160;    m_GlobalMemoryTypeBits(UINT32_MAX)</div>
-<div class="line"><a name="l16095"></a><span class="lineno">16095</span>&#160;#if <a class="code" href="vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c">VMA_RECORDING_ENABLED</a></div>
-<div class="line"><a name="l16096"></a><span class="lineno">16096</span>&#160;    ,m_pRecorder(VMA_NULL)</div>
-<div class="line"><a name="l16097"></a><span class="lineno">16097</span>&#160;#endif</div>
-<div class="line"><a name="l16098"></a><span class="lineno">16098</span>&#160;{</div>
-<div class="line"><a name="l16099"></a><span class="lineno">16099</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
-<div class="line"><a name="l16100"></a><span class="lineno">16100</span>&#160;    {</div>
-<div class="line"><a name="l16101"></a><span class="lineno">16101</span>&#160;        m_UseKhrDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l16102"></a><span class="lineno">16102</span>&#160;        m_UseKhrBindMemory2 = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l16103"></a><span class="lineno">16103</span>&#160;    }</div>
-<div class="line"><a name="l16104"></a><span class="lineno">16104</span>&#160; </div>
-<div class="line"><a name="l16105"></a><span class="lineno">16105</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_DETECT_CORRUPTION)</div>
-<div class="line"><a name="l16106"></a><span class="lineno">16106</span>&#160;    {</div>
-<div class="line"><a name="l16107"></a><span class="lineno">16107</span>&#160;        <span class="comment">// Needs to be multiply of uint32_t size because we are going to write VMA_CORRUPTION_DETECTION_MAGIC_VALUE to it.</span></div>
-<div class="line"><a name="l16108"></a><span class="lineno">16108</span>&#160;        VMA_ASSERT(VMA_DEBUG_MARGIN % <span class="keyword">sizeof</span>(uint32_t) == 0);</div>
-<div class="line"><a name="l16109"></a><span class="lineno">16109</span>&#160;    }</div>
-<div class="line"><a name="l16110"></a><span class="lineno">16110</span>&#160; </div>
-<div class="line"><a name="l16111"></a><span class="lineno">16111</span>&#160;    VMA_ASSERT(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156">physicalDevice</a> &amp;&amp; pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500">device</a> &amp;&amp; pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a70dd42e29b1df1d1b9b61532ae0b370b">instance</a>);</div>
-<div class="line"><a name="l16112"></a><span class="lineno">16112</span>&#160; </div>
-<div class="line"><a name="l16113"></a><span class="lineno">16113</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &lt; VK_MAKE_VERSION(1, 1, 0))</div>
-<div class="line"><a name="l16114"></a><span class="lineno">16114</span>&#160;    {</div>
-<div class="line"><a name="l16115"></a><span class="lineno">16115</span>&#160;<span class="preprocessor">#if !(VMA_DEDICATED_ALLOCATION)</span></div>
-<div class="line"><a name="l16116"></a><span class="lineno">16116</span>&#160;        <span class="keywordflow">if</span>((pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a>) != 0)</div>
-<div class="line"><a name="l16117"></a><span class="lineno">16117</span>&#160;        {</div>
-<div class="line"><a name="l16118"></a><span class="lineno">16118</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT set but required extensions are disabled by preprocessor macros.&quot;</span>);</div>
-<div class="line"><a name="l16119"></a><span class="lineno">16119</span>&#160;        }</div>
-<div class="line"><a name="l16120"></a><span class="lineno">16120</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16121"></a><span class="lineno">16121</span>&#160;<span class="preprocessor">#if !(VMA_BIND_MEMORY2)</span></div>
-<div class="line"><a name="l16122"></a><span class="lineno">16122</span>&#160;        <span class="keywordflow">if</span>((pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a>) != 0)</div>
-<div class="line"><a name="l16123"></a><span class="lineno">16123</span>&#160;        {</div>
-<div class="line"><a name="l16124"></a><span class="lineno">16124</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT set but required extension is disabled by preprocessor macros.&quot;</span>);</div>
-<div class="line"><a name="l16125"></a><span class="lineno">16125</span>&#160;        }</div>
-<div class="line"><a name="l16126"></a><span class="lineno">16126</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16127"></a><span class="lineno">16127</span>&#160;    }</div>
-<div class="line"><a name="l16128"></a><span class="lineno">16128</span>&#160;<span class="preprocessor">#if !(VMA_MEMORY_BUDGET)</span></div>
-<div class="line"><a name="l16129"></a><span class="lineno">16129</span>&#160;    <span class="keywordflow">if</span>((pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</a>) != 0)</div>
-<div class="line"><a name="l16130"></a><span class="lineno">16130</span>&#160;    {</div>
-<div class="line"><a name="l16131"></a><span class="lineno">16131</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT set but required extension is disabled by preprocessor macros.&quot;</span>);</div>
-<div class="line"><a name="l16132"></a><span class="lineno">16132</span>&#160;    }</div>
-<div class="line"><a name="l16133"></a><span class="lineno">16133</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16134"></a><span class="lineno">16134</span>&#160;<span class="preprocessor">#if !(VMA_BUFFER_DEVICE_ADDRESS)</span></div>
-<div class="line"><a name="l16135"></a><span class="lineno">16135</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrBufferDeviceAddress)</div>
-<div class="line"><a name="l16136"></a><span class="lineno">16136</span>&#160;    {</div>
-<div class="line"><a name="l16137"></a><span class="lineno">16137</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT is set but required extension or Vulkan 1.2 is not available in your Vulkan header or its support in VMA has been disabled by a preprocessor macro.&quot;</span>);</div>
-<div class="line"><a name="l16138"></a><span class="lineno">16138</span>&#160;    }</div>
-<div class="line"><a name="l16139"></a><span class="lineno">16139</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16140"></a><span class="lineno">16140</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &lt; 1002000</span></div>
-<div class="line"><a name="l16141"></a><span class="lineno">16141</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 2, 0))</div>
-<div class="line"><a name="l16142"></a><span class="lineno">16142</span>&#160;    {</div>
-<div class="line"><a name="l16143"></a><span class="lineno">16143</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;vulkanApiVersion &gt;= VK_API_VERSION_1_2 but required Vulkan version is disabled by preprocessor macros.&quot;</span>);</div>
-<div class="line"><a name="l16144"></a><span class="lineno">16144</span>&#160;    }</div>
-<div class="line"><a name="l16145"></a><span class="lineno">16145</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16146"></a><span class="lineno">16146</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &lt; 1001000</span></div>
-<div class="line"><a name="l16147"></a><span class="lineno">16147</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
-<div class="line"><a name="l16148"></a><span class="lineno">16148</span>&#160;    {</div>
-<div class="line"><a name="l16149"></a><span class="lineno">16149</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;vulkanApiVersion &gt;= VK_API_VERSION_1_1 but required Vulkan version is disabled by preprocessor macros.&quot;</span>);</div>
-<div class="line"><a name="l16150"></a><span class="lineno">16150</span>&#160;    }</div>
-<div class="line"><a name="l16151"></a><span class="lineno">16151</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16152"></a><span class="lineno">16152</span>&#160;<span class="preprocessor">#if !(VMA_MEMORY_PRIORITY)</span></div>
-<div class="line"><a name="l16153"></a><span class="lineno">16153</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryPriority)</div>
-<div class="line"><a name="l16154"></a><span class="lineno">16154</span>&#160;    {</div>
-<div class="line"><a name="l16155"></a><span class="lineno">16155</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT is set but required extension is not available in your Vulkan header or its support in VMA has been disabled by a preprocessor macro.&quot;</span>);</div>
-<div class="line"><a name="l16156"></a><span class="lineno">16156</span>&#160;    }</div>
-<div class="line"><a name="l16157"></a><span class="lineno">16157</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16158"></a><span class="lineno">16158</span>&#160; </div>
-<div class="line"><a name="l16159"></a><span class="lineno">16159</span>&#160;    memset(&amp;m_DeviceMemoryCallbacks, 0 ,<span class="keyword">sizeof</span>(m_DeviceMemoryCallbacks));</div>
-<div class="line"><a name="l16160"></a><span class="lineno">16160</span>&#160;    memset(&amp;m_PhysicalDeviceProperties, 0, <span class="keyword">sizeof</span>(m_PhysicalDeviceProperties));</div>
-<div class="line"><a name="l16161"></a><span class="lineno">16161</span>&#160;    memset(&amp;m_MemProps, 0, <span class="keyword">sizeof</span>(m_MemProps));</div>
-<div class="line"><a name="l16162"></a><span class="lineno">16162</span>&#160; </div>
-<div class="line"><a name="l16163"></a><span class="lineno">16163</span>&#160;    memset(&amp;m_pBlockVectors, 0, <span class="keyword">sizeof</span>(m_pBlockVectors));</div>
-<div class="line"><a name="l16164"></a><span class="lineno">16164</span>&#160;    memset(&amp;m_VulkanFunctions, 0, <span class="keyword">sizeof</span>(m_VulkanFunctions));</div>
-<div class="line"><a name="l16165"></a><span class="lineno">16165</span>&#160; </div>
-<div class="line"><a name="l16166"></a><span class="lineno">16166</span>&#160;<span class="preprocessor">#if VMA_EXTERNAL_MEMORY</span></div>
-<div class="line"><a name="l16167"></a><span class="lineno">16167</span>&#160;    memset(&amp;m_TypeExternalMemoryHandleTypes, 0, <span class="keyword">sizeof</span>(m_TypeExternalMemoryHandleTypes));</div>
-<div class="line"><a name="l16168"></a><span class="lineno">16168</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_EXTERNAL_MEMORY</span></div>
-<div class="line"><a name="l16169"></a><span class="lineno">16169</span>&#160; </div>
-<div class="line"><a name="l16170"></a><span class="lineno">16170</span>&#160;    <span class="keywordflow">if</span>(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e">pDeviceMemoryCallbacks</a> != VMA_NULL)</div>
-<div class="line"><a name="l16171"></a><span class="lineno">16171</span>&#160;    {</div>
-<div class="line"><a name="l16172"></a><span class="lineno">16172</span>&#160;        m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6">pUserData</a> = pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e">pDeviceMemoryCallbacks</a>-&gt;<a class="code" href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6">pUserData</a>;</div>
-<div class="line"><a name="l16173"></a><span class="lineno">16173</span>&#160;        m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">pfnAllocate</a> = pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e">pDeviceMemoryCallbacks</a>-&gt;<a class="code" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">pfnAllocate</a>;</div>
-<div class="line"><a name="l16174"></a><span class="lineno">16174</span>&#160;        m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">pfnFree</a> = pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e">pDeviceMemoryCallbacks</a>-&gt;<a class="code" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">pfnFree</a>;</div>
-<div class="line"><a name="l16175"></a><span class="lineno">16175</span>&#160;    }</div>
-<div class="line"><a name="l16176"></a><span class="lineno">16176</span>&#160; </div>
-<div class="line"><a name="l16177"></a><span class="lineno">16177</span>&#160;    ImportVulkanFunctions(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd">pVulkanFunctions</a>);</div>
-<div class="line"><a name="l16178"></a><span class="lineno">16178</span>&#160; </div>
-<div class="line"><a name="l16179"></a><span class="lineno">16179</span>&#160;    (*m_VulkanFunctions.vkGetPhysicalDeviceProperties)(m_PhysicalDevice, &amp;m_PhysicalDeviceProperties);</div>
-<div class="line"><a name="l16180"></a><span class="lineno">16180</span>&#160;    (*m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties)(m_PhysicalDevice, &amp;m_MemProps);</div>
-<div class="line"><a name="l16181"></a><span class="lineno">16181</span>&#160; </div>
-<div class="line"><a name="l16182"></a><span class="lineno">16182</span>&#160;    VMA_ASSERT(VmaIsPow2(VMA_MIN_ALIGNMENT));</div>
-<div class="line"><a name="l16183"></a><span class="lineno">16183</span>&#160;    VMA_ASSERT(VmaIsPow2(VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY));</div>
-<div class="line"><a name="l16184"></a><span class="lineno">16184</span>&#160;    VMA_ASSERT(VmaIsPow2(m_PhysicalDeviceProperties.limits.bufferImageGranularity));</div>
-<div class="line"><a name="l16185"></a><span class="lineno">16185</span>&#160;    VMA_ASSERT(VmaIsPow2(m_PhysicalDeviceProperties.limits.nonCoherentAtomSize));</div>
-<div class="line"><a name="l16186"></a><span class="lineno">16186</span>&#160; </div>
-<div class="line"><a name="l16187"></a><span class="lineno">16187</span>&#160;    m_PreferredLargeHeapBlockSize = (pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a">preferredLargeHeapBlockSize</a> != 0) ?</div>
-<div class="line"><a name="l16188"></a><span class="lineno">16188</span>&#160;        pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a">preferredLargeHeapBlockSize</a> : <span class="keyword">static_cast&lt;</span>VkDeviceSize<span class="keyword">&gt;</span>(VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE);</div>
-<div class="line"><a name="l16189"></a><span class="lineno">16189</span>&#160; </div>
-<div class="line"><a name="l16190"></a><span class="lineno">16190</span>&#160;    m_GlobalMemoryTypeBits = CalculateGlobalMemoryTypeBits();</div>
-<div class="line"><a name="l16191"></a><span class="lineno">16191</span>&#160; </div>
-<div class="line"><a name="l16192"></a><span class="lineno">16192</span>&#160;<span class="preprocessor">#if VMA_EXTERNAL_MEMORY</span></div>
-<div class="line"><a name="l16193"></a><span class="lineno">16193</span>&#160;    <span class="keywordflow">if</span>(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ae8f0db05e5cb4c43d7713bf4a49a736b">pTypeExternalMemoryHandleTypes</a> != VMA_NULL)</div>
-<div class="line"><a name="l16194"></a><span class="lineno">16194</span>&#160;    {</div>
-<div class="line"><a name="l16195"></a><span class="lineno">16195</span>&#160;        memcpy(m_TypeExternalMemoryHandleTypes, pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ae8f0db05e5cb4c43d7713bf4a49a736b">pTypeExternalMemoryHandleTypes</a>,</div>
-<div class="line"><a name="l16196"></a><span class="lineno">16196</span>&#160;            <span class="keyword">sizeof</span>(VkExternalMemoryHandleTypeFlagsKHR) * GetMemoryTypeCount());</div>
-<div class="line"><a name="l16197"></a><span class="lineno">16197</span>&#160;    }</div>
-<div class="line"><a name="l16198"></a><span class="lineno">16198</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_EXTERNAL_MEMORY</span></div>
-<div class="line"><a name="l16199"></a><span class="lineno">16199</span>&#160; </div>
-<div class="line"><a name="l16200"></a><span class="lineno">16200</span>&#160;    <span class="keywordflow">if</span>(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b">pHeapSizeLimit</a> != VMA_NULL)</div>
-<div class="line"><a name="l16201"></a><span class="lineno">16201</span>&#160;    {</div>
-<div class="line"><a name="l16202"></a><span class="lineno">16202</span>&#160;        <span class="keywordflow">for</span>(uint32_t heapIndex = 0; heapIndex &lt; GetMemoryHeapCount(); ++heapIndex)</div>
-<div class="line"><a name="l16203"></a><span class="lineno">16203</span>&#160;        {</div>
-<div class="line"><a name="l16204"></a><span class="lineno">16204</span>&#160;            <span class="keyword">const</span> VkDeviceSize limit = pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b">pHeapSizeLimit</a>[heapIndex];</div>
-<div class="line"><a name="l16205"></a><span class="lineno">16205</span>&#160;            <span class="keywordflow">if</span>(limit != VK_WHOLE_SIZE)</div>
-<div class="line"><a name="l16206"></a><span class="lineno">16206</span>&#160;            {</div>
-<div class="line"><a name="l16207"></a><span class="lineno">16207</span>&#160;                m_HeapSizeLimitMask |= 1u &lt;&lt; heapIndex;</div>
-<div class="line"><a name="l16208"></a><span class="lineno">16208</span>&#160;                <span class="keywordflow">if</span>(limit &lt; m_MemProps.memoryHeaps[heapIndex].size)</div>
-<div class="line"><a name="l16209"></a><span class="lineno">16209</span>&#160;                {</div>
-<div class="line"><a name="l16210"></a><span class="lineno">16210</span>&#160;                    m_MemProps.memoryHeaps[heapIndex].size = limit;</div>
-<div class="line"><a name="l16211"></a><span class="lineno">16211</span>&#160;                }</div>
-<div class="line"><a name="l16212"></a><span class="lineno">16212</span>&#160;            }</div>
-<div class="line"><a name="l16213"></a><span class="lineno">16213</span>&#160;        }</div>
-<div class="line"><a name="l16214"></a><span class="lineno">16214</span>&#160;    }</div>
-<div class="line"><a name="l16215"></a><span class="lineno">16215</span>&#160; </div>
-<div class="line"><a name="l16216"></a><span class="lineno">16216</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
-<div class="line"><a name="l16217"></a><span class="lineno">16217</span>&#160;    {</div>
-<div class="line"><a name="l16218"></a><span class="lineno">16218</span>&#160;        <span class="keyword">const</span> VkDeviceSize preferredBlockSize = CalcPreferredBlockSize(memTypeIndex);</div>
-<div class="line"><a name="l16219"></a><span class="lineno">16219</span>&#160; </div>
-<div class="line"><a name="l16220"></a><span class="lineno">16220</span>&#160;        m_pBlockVectors[memTypeIndex] = vma_new(<span class="keyword">this</span>, VmaBlockVector)(</div>
-<div class="line"><a name="l16221"></a><span class="lineno">16221</span>&#160;            <span class="keyword">this</span>,</div>
-<div class="line"><a name="l16222"></a><span class="lineno">16222</span>&#160;            VK_NULL_HANDLE, <span class="comment">// hParentPool</span></div>
-<div class="line"><a name="l16223"></a><span class="lineno">16223</span>&#160;            memTypeIndex,</div>
-<div class="line"><a name="l16224"></a><span class="lineno">16224</span>&#160;            preferredBlockSize,</div>
-<div class="line"><a name="l16225"></a><span class="lineno">16225</span>&#160;            0,</div>
-<div class="line"><a name="l16226"></a><span class="lineno">16226</span>&#160;            SIZE_MAX,</div>
-<div class="line"><a name="l16227"></a><span class="lineno">16227</span>&#160;            GetBufferImageGranularity(),</div>
-<div class="line"><a name="l16228"></a><span class="lineno">16228</span>&#160;            pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a21ea188dd212b8171cb9ecbed4a2a3a7">frameInUseCount</a>,</div>
-<div class="line"><a name="l16229"></a><span class="lineno">16229</span>&#160;            <span class="keyword">false</span>, <span class="comment">// explicitBlockSize</span></div>
-<div class="line"><a name="l16230"></a><span class="lineno">16230</span>&#160;            <span class="keyword">false</span>, <span class="comment">// linearAlgorithm</span></div>
-<div class="line"><a name="l16231"></a><span class="lineno">16231</span>&#160;            0.5f, <span class="comment">// priority (0.5 is the default per Vulkan spec)</span></div>
-<div class="line"><a name="l16232"></a><span class="lineno">16232</span>&#160;            GetMemoryTypeMinAlignment(memTypeIndex), <span class="comment">// minAllocationAlignment</span></div>
-<div class="line"><a name="l16233"></a><span class="lineno">16233</span>&#160;            VMA_NULL); <span class="comment">// // pMemoryAllocateNext</span></div>
-<div class="line"><a name="l16234"></a><span class="lineno">16234</span>&#160;        <span class="comment">// No need to call m_pBlockVectors[memTypeIndex][blockVectorTypeIndex]-&gt;CreateMinBlocks here,</span></div>
-<div class="line"><a name="l16235"></a><span class="lineno">16235</span>&#160;        <span class="comment">// becase minBlockCount is 0.</span></div>
-<div class="line"><a name="l16236"></a><span class="lineno">16236</span>&#160;    }</div>
-<div class="line"><a name="l16237"></a><span class="lineno">16237</span>&#160;}</div>
-<div class="line"><a name="l16238"></a><span class="lineno">16238</span>&#160; </div>
-<div class="line"><a name="l16239"></a><span class="lineno">16239</span>&#160;VkResult VmaAllocator_T::Init(<span class="keyword">const</span> <a class="code" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a>* pCreateInfo)</div>
-<div class="line"><a name="l16240"></a><span class="lineno">16240</span>&#160;{</div>
-<div class="line"><a name="l16241"></a><span class="lineno">16241</span>&#160;    VkResult res = VK_SUCCESS;</div>
-<div class="line"><a name="l16242"></a><span class="lineno">16242</span>&#160; </div>
-<div class="line"><a name="l16243"></a><span class="lineno">16243</span>&#160;    <span class="keywordflow">if</span>(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee">pRecordSettings</a> != VMA_NULL &amp;&amp;</div>
-<div class="line"><a name="l16244"></a><span class="lineno">16244</span>&#160;        !VmaStrIsEmpty(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee">pRecordSettings</a>-&gt;<a class="code" href="struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d">pFilePath</a>))</div>
-<div class="line"><a name="l16245"></a><span class="lineno">16245</span>&#160;    {</div>
-<div class="line"><a name="l16246"></a><span class="lineno">16246</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l16247"></a><span class="lineno">16247</span>&#160;        m_pRecorder = vma_new(<span class="keyword">this</span>, VmaRecorder)();</div>
-<div class="line"><a name="l16248"></a><span class="lineno">16248</span>&#160;        res = m_pRecorder-&gt;Init(*pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee">pRecordSettings</a>, m_UseMutex);</div>
-<div class="line"><a name="l16249"></a><span class="lineno">16249</span>&#160;        <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l16250"></a><span class="lineno">16250</span>&#160;        {</div>
-<div class="line"><a name="l16251"></a><span class="lineno">16251</span>&#160;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l16252"></a><span class="lineno">16252</span>&#160;        }</div>
-<div class="line"><a name="l16253"></a><span class="lineno">16253</span>&#160;        m_pRecorder-&gt;WriteConfiguration(</div>
-<div class="line"><a name="l16254"></a><span class="lineno">16254</span>&#160;            m_PhysicalDeviceProperties,</div>
-<div class="line"><a name="l16255"></a><span class="lineno">16255</span>&#160;            m_MemProps,</div>
-<div class="line"><a name="l16256"></a><span class="lineno">16256</span>&#160;            m_VulkanApiVersion,</div>
-<div class="line"><a name="l16257"></a><span class="lineno">16257</span>&#160;            m_UseKhrDedicatedAllocation,</div>
-<div class="line"><a name="l16258"></a><span class="lineno">16258</span>&#160;            m_UseKhrBindMemory2,</div>
-<div class="line"><a name="l16259"></a><span class="lineno">16259</span>&#160;            m_UseExtMemoryBudget,</div>
-<div class="line"><a name="l16260"></a><span class="lineno">16260</span>&#160;            m_UseAmdDeviceCoherentMemory);</div>
-<div class="line"><a name="l16261"></a><span class="lineno">16261</span>&#160;        m_pRecorder-&gt;RecordCreateAllocator(GetCurrentFrameIndex());</div>
-<div class="line"><a name="l16262"></a><span class="lineno">16262</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l16263"></a><span class="lineno">16263</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VmaAllocatorCreateInfo::pRecordSettings used, but not supported due to VMA_RECORDING_ENABLED not defined to 1.&quot;</span>);</div>
-<div class="line"><a name="l16264"></a><span class="lineno">16264</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</div>
-<div class="line"><a name="l16265"></a><span class="lineno">16265</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16266"></a><span class="lineno">16266</span>&#160;    }</div>
-<div class="line"><a name="l16267"></a><span class="lineno">16267</span>&#160; </div>
-<div class="line"><a name="l16268"></a><span class="lineno">16268</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l16269"></a><span class="lineno">16269</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget)</div>
-<div class="line"><a name="l16270"></a><span class="lineno">16270</span>&#160;    {</div>
-<div class="line"><a name="l16271"></a><span class="lineno">16271</span>&#160;        UpdateVulkanBudget();</div>
-<div class="line"><a name="l16272"></a><span class="lineno">16272</span>&#160;    }</div>
-<div class="line"><a name="l16273"></a><span class="lineno">16273</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l16274"></a><span class="lineno">16274</span>&#160; </div>
-<div class="line"><a name="l16275"></a><span class="lineno">16275</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l16276"></a><span class="lineno">16276</span>&#160;}</div>
-<div class="line"><a name="l16277"></a><span class="lineno">16277</span>&#160; </div>
-<div class="line"><a name="l16278"></a><span class="lineno">16278</span>&#160;VmaAllocator_T::~VmaAllocator_T()</div>
-<div class="line"><a name="l16279"></a><span class="lineno">16279</span>&#160;{</div>
-<div class="line"><a name="l16280"></a><span class="lineno">16280</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l16281"></a><span class="lineno">16281</span>&#160;    <span class="keywordflow">if</span>(m_pRecorder != VMA_NULL)</div>
-<div class="line"><a name="l16282"></a><span class="lineno">16282</span>&#160;    {</div>
-<div class="line"><a name="l16283"></a><span class="lineno">16283</span>&#160;        m_pRecorder-&gt;RecordDestroyAllocator(GetCurrentFrameIndex());</div>
-<div class="line"><a name="l16284"></a><span class="lineno">16284</span>&#160;        vma_delete(<span class="keyword">this</span>, m_pRecorder);</div>
-<div class="line"><a name="l16285"></a><span class="lineno">16285</span>&#160;    }</div>
-<div class="line"><a name="l16286"></a><span class="lineno">16286</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16287"></a><span class="lineno">16287</span>&#160; </div>
-<div class="line"><a name="l16288"></a><span class="lineno">16288</span>&#160;    VMA_ASSERT(m_Pools.IsEmpty());</div>
-<div class="line"><a name="l16289"></a><span class="lineno">16289</span>&#160; </div>
-<div class="line"><a name="l16290"></a><span class="lineno">16290</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> memTypeIndex = GetMemoryTypeCount(); memTypeIndex--; )</div>
-<div class="line"><a name="l16291"></a><span class="lineno">16291</span>&#160;    {</div>
-<div class="line"><a name="l16292"></a><span class="lineno">16292</span>&#160;        <span class="keywordflow">if</span>(!m_DedicatedAllocations[memTypeIndex].IsEmpty())</div>
-<div class="line"><a name="l16293"></a><span class="lineno">16293</span>&#160;        {</div>
-<div class="line"><a name="l16294"></a><span class="lineno">16294</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Unfreed dedicated allocations found.&quot;</span>);</div>
-<div class="line"><a name="l16295"></a><span class="lineno">16295</span>&#160;        }</div>
-<div class="line"><a name="l16296"></a><span class="lineno">16296</span>&#160; </div>
-<div class="line"><a name="l16297"></a><span class="lineno">16297</span>&#160;        vma_delete(<span class="keyword">this</span>, m_pBlockVectors[memTypeIndex]);</div>
-<div class="line"><a name="l16298"></a><span class="lineno">16298</span>&#160;    }</div>
-<div class="line"><a name="l16299"></a><span class="lineno">16299</span>&#160;}</div>
-<div class="line"><a name="l16300"></a><span class="lineno">16300</span>&#160; </div>
-<div class="line"><a name="l16301"></a><span class="lineno">16301</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::ImportVulkanFunctions(<span class="keyword">const</span> <a class="code" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a>* pVulkanFunctions)</div>
-<div class="line"><a name="l16302"></a><span class="lineno">16302</span>&#160;{</div>
-<div class="line"><a name="l16303"></a><span class="lineno">16303</span>&#160;<span class="preprocessor">#if VMA_STATIC_VULKAN_FUNCTIONS == 1</span></div>
-<div class="line"><a name="l16304"></a><span class="lineno">16304</span>&#160;    ImportVulkanFunctions_Static();</div>
-<div class="line"><a name="l16305"></a><span class="lineno">16305</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16306"></a><span class="lineno">16306</span>&#160; </div>
-<div class="line"><a name="l16307"></a><span class="lineno">16307</span>&#160;    <span class="keywordflow">if</span>(pVulkanFunctions != VMA_NULL)</div>
-<div class="line"><a name="l16308"></a><span class="lineno">16308</span>&#160;    {</div>
-<div class="line"><a name="l16309"></a><span class="lineno">16309</span>&#160;        ImportVulkanFunctions_Custom(pVulkanFunctions);</div>
-<div class="line"><a name="l16310"></a><span class="lineno">16310</span>&#160;    }</div>
-<div class="line"><a name="l16311"></a><span class="lineno">16311</span>&#160; </div>
-<div class="line"><a name="l16312"></a><span class="lineno">16312</span>&#160;<span class="preprocessor">#if VMA_DYNAMIC_VULKAN_FUNCTIONS == 1</span></div>
-<div class="line"><a name="l16313"></a><span class="lineno">16313</span>&#160;    ImportVulkanFunctions_Dynamic();</div>
-<div class="line"><a name="l16314"></a><span class="lineno">16314</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16315"></a><span class="lineno">16315</span>&#160; </div>
-<div class="line"><a name="l16316"></a><span class="lineno">16316</span>&#160;    ValidateVulkanFunctions();</div>
-<div class="line"><a name="l16317"></a><span class="lineno">16317</span>&#160;}</div>
-<div class="line"><a name="l16318"></a><span class="lineno">16318</span>&#160; </div>
-<div class="line"><a name="l16319"></a><span class="lineno">16319</span>&#160;<span class="preprocessor">#if VMA_STATIC_VULKAN_FUNCTIONS == 1</span></div>
-<div class="line"><a name="l16320"></a><span class="lineno">16320</span>&#160; </div>
-<div class="line"><a name="l16321"></a><span class="lineno">16321</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::ImportVulkanFunctions_Static()</div>
-<div class="line"><a name="l16322"></a><span class="lineno">16322</span>&#160;{</div>
-<div class="line"><a name="l16323"></a><span class="lineno">16323</span>&#160;    <span class="comment">// Vulkan 1.0</span></div>
-<div class="line"><a name="l16324"></a><span class="lineno">16324</span>&#160;    m_VulkanFunctions.vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)vkGetPhysicalDeviceProperties;</div>
-<div class="line"><a name="l16325"></a><span class="lineno">16325</span>&#160;    m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)vkGetPhysicalDeviceMemoryProperties;</div>
-<div class="line"><a name="l16326"></a><span class="lineno">16326</span>&#160;    m_VulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkAllocateMemory;</div>
-<div class="line"><a name="l16327"></a><span class="lineno">16327</span>&#160;    m_VulkanFunctions.vkFreeMemory = (PFN_vkFreeMemory)vkFreeMemory;</div>
-<div class="line"><a name="l16328"></a><span class="lineno">16328</span>&#160;    m_VulkanFunctions.vkMapMemory = (PFN_vkMapMemory)vkMapMemory;</div>
-<div class="line"><a name="l16329"></a><span class="lineno">16329</span>&#160;    m_VulkanFunctions.vkUnmapMemory = (PFN_vkUnmapMemory)vkUnmapMemory;</div>
-<div class="line"><a name="l16330"></a><span class="lineno">16330</span>&#160;    m_VulkanFunctions.vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)vkFlushMappedMemoryRanges;</div>
-<div class="line"><a name="l16331"></a><span class="lineno">16331</span>&#160;    m_VulkanFunctions.vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)vkInvalidateMappedMemoryRanges;</div>
-<div class="line"><a name="l16332"></a><span class="lineno">16332</span>&#160;    m_VulkanFunctions.vkBindBufferMemory = (PFN_vkBindBufferMemory)vkBindBufferMemory;</div>
-<div class="line"><a name="l16333"></a><span class="lineno">16333</span>&#160;    m_VulkanFunctions.vkBindImageMemory = (PFN_vkBindImageMemory)vkBindImageMemory;</div>
-<div class="line"><a name="l16334"></a><span class="lineno">16334</span>&#160;    m_VulkanFunctions.vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)vkGetBufferMemoryRequirements;</div>
-<div class="line"><a name="l16335"></a><span class="lineno">16335</span>&#160;    m_VulkanFunctions.vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)vkGetImageMemoryRequirements;</div>
-<div class="line"><a name="l16336"></a><span class="lineno">16336</span>&#160;    m_VulkanFunctions.vkCreateBuffer = (PFN_vkCreateBuffer)vkCreateBuffer;</div>
-<div class="line"><a name="l16337"></a><span class="lineno">16337</span>&#160;    m_VulkanFunctions.vkDestroyBuffer = (PFN_vkDestroyBuffer)vkDestroyBuffer;</div>
-<div class="line"><a name="l16338"></a><span class="lineno">16338</span>&#160;    m_VulkanFunctions.vkCreateImage = (PFN_vkCreateImage)vkCreateImage;</div>
-<div class="line"><a name="l16339"></a><span class="lineno">16339</span>&#160;    m_VulkanFunctions.vkDestroyImage = (PFN_vkDestroyImage)vkDestroyImage;</div>
-<div class="line"><a name="l16340"></a><span class="lineno">16340</span>&#160;    m_VulkanFunctions.vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer)vkCmdCopyBuffer;</div>
-<div class="line"><a name="l16341"></a><span class="lineno">16341</span>&#160; </div>
-<div class="line"><a name="l16342"></a><span class="lineno">16342</span>&#160;    <span class="comment">// Vulkan 1.1</span></div>
-<div class="line"><a name="l16343"></a><span class="lineno">16343</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l16344"></a><span class="lineno">16344</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
-<div class="line"><a name="l16345"></a><span class="lineno">16345</span>&#160;    {</div>
-<div class="line"><a name="l16346"></a><span class="lineno">16346</span>&#160;        m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2)vkGetBufferMemoryRequirements2;</div>
-<div class="line"><a name="l16347"></a><span class="lineno">16347</span>&#160;        m_VulkanFunctions.vkGetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2)vkGetImageMemoryRequirements2;</div>
-<div class="line"><a name="l16348"></a><span class="lineno">16348</span>&#160;        m_VulkanFunctions.vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2)vkBindBufferMemory2;</div>
-<div class="line"><a name="l16349"></a><span class="lineno">16349</span>&#160;        m_VulkanFunctions.vkBindImageMemory2KHR = (PFN_vkBindImageMemory2)vkBindImageMemory2;</div>
-<div class="line"><a name="l16350"></a><span class="lineno">16350</span>&#160;        m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2)vkGetPhysicalDeviceMemoryProperties2;</div>
-<div class="line"><a name="l16351"></a><span class="lineno">16351</span>&#160;    }</div>
-<div class="line"><a name="l16352"></a><span class="lineno">16352</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16353"></a><span class="lineno">16353</span>&#160;}</div>
-<div class="line"><a name="l16354"></a><span class="lineno">16354</span>&#160; </div>
-<div class="line"><a name="l16355"></a><span class="lineno">16355</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATIC_VULKAN_FUNCTIONS == 1</span></div>
-<div class="line"><a name="l16356"></a><span class="lineno">16356</span>&#160; </div>
-<div class="line"><a name="l16357"></a><span class="lineno">16357</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::ImportVulkanFunctions_Custom(<span class="keyword">const</span> <a class="code" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a>* pVulkanFunctions)</div>
-<div class="line"><a name="l16358"></a><span class="lineno">16358</span>&#160;{</div>
-<div class="line"><a name="l16359"></a><span class="lineno">16359</span>&#160;    VMA_ASSERT(pVulkanFunctions != VMA_NULL);</div>
-<div class="line"><a name="l16360"></a><span class="lineno">16360</span>&#160; </div>
-<div class="line"><a name="l16361"></a><span class="lineno">16361</span>&#160;<span class="preprocessor">#define VMA_COPY_IF_NOT_NULL(funcName) \</span></div>
-<div class="line"><a name="l16362"></a><span class="lineno">16362</span>&#160;<span class="preprocessor">    if(pVulkanFunctions-&gt;funcName != VMA_NULL) m_VulkanFunctions.funcName = pVulkanFunctions-&gt;funcName;</span></div>
-<div class="line"><a name="l16363"></a><span class="lineno">16363</span>&#160; </div>
-<div class="line"><a name="l16364"></a><span class="lineno">16364</span>&#160;    VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceProperties);</div>
-<div class="line"><a name="l16365"></a><span class="lineno">16365</span>&#160;    VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceMemoryProperties);</div>
-<div class="line"><a name="l16366"></a><span class="lineno">16366</span>&#160;    VMA_COPY_IF_NOT_NULL(vkAllocateMemory);</div>
-<div class="line"><a name="l16367"></a><span class="lineno">16367</span>&#160;    VMA_COPY_IF_NOT_NULL(vkFreeMemory);</div>
-<div class="line"><a name="l16368"></a><span class="lineno">16368</span>&#160;    VMA_COPY_IF_NOT_NULL(vkMapMemory);</div>
-<div class="line"><a name="l16369"></a><span class="lineno">16369</span>&#160;    VMA_COPY_IF_NOT_NULL(vkUnmapMemory);</div>
-<div class="line"><a name="l16370"></a><span class="lineno">16370</span>&#160;    VMA_COPY_IF_NOT_NULL(vkFlushMappedMemoryRanges);</div>
-<div class="line"><a name="l16371"></a><span class="lineno">16371</span>&#160;    VMA_COPY_IF_NOT_NULL(vkInvalidateMappedMemoryRanges);</div>
-<div class="line"><a name="l16372"></a><span class="lineno">16372</span>&#160;    VMA_COPY_IF_NOT_NULL(vkBindBufferMemory);</div>
-<div class="line"><a name="l16373"></a><span class="lineno">16373</span>&#160;    VMA_COPY_IF_NOT_NULL(vkBindImageMemory);</div>
-<div class="line"><a name="l16374"></a><span class="lineno">16374</span>&#160;    VMA_COPY_IF_NOT_NULL(vkGetBufferMemoryRequirements);</div>
-<div class="line"><a name="l16375"></a><span class="lineno">16375</span>&#160;    VMA_COPY_IF_NOT_NULL(vkGetImageMemoryRequirements);</div>
-<div class="line"><a name="l16376"></a><span class="lineno">16376</span>&#160;    VMA_COPY_IF_NOT_NULL(vkCreateBuffer);</div>
-<div class="line"><a name="l16377"></a><span class="lineno">16377</span>&#160;    VMA_COPY_IF_NOT_NULL(vkDestroyBuffer);</div>
-<div class="line"><a name="l16378"></a><span class="lineno">16378</span>&#160;    VMA_COPY_IF_NOT_NULL(vkCreateImage);</div>
-<div class="line"><a name="l16379"></a><span class="lineno">16379</span>&#160;    VMA_COPY_IF_NOT_NULL(vkDestroyImage);</div>
-<div class="line"><a name="l16380"></a><span class="lineno">16380</span>&#160;    VMA_COPY_IF_NOT_NULL(vkCmdCopyBuffer);</div>
-<div class="line"><a name="l16381"></a><span class="lineno">16381</span>&#160; </div>
-<div class="line"><a name="l16382"></a><span class="lineno">16382</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l16383"></a><span class="lineno">16383</span>&#160;    VMA_COPY_IF_NOT_NULL(vkGetBufferMemoryRequirements2KHR);</div>
-<div class="line"><a name="l16384"></a><span class="lineno">16384</span>&#160;    VMA_COPY_IF_NOT_NULL(vkGetImageMemoryRequirements2KHR);</div>
-<div class="line"><a name="l16385"></a><span class="lineno">16385</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16386"></a><span class="lineno">16386</span>&#160; </div>
-<div class="line"><a name="l16387"></a><span class="lineno">16387</span>&#160;<span class="preprocessor">#if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l16388"></a><span class="lineno">16388</span>&#160;    VMA_COPY_IF_NOT_NULL(vkBindBufferMemory2KHR);</div>
-<div class="line"><a name="l16389"></a><span class="lineno">16389</span>&#160;    VMA_COPY_IF_NOT_NULL(vkBindImageMemory2KHR);</div>
-<div class="line"><a name="l16390"></a><span class="lineno">16390</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16391"></a><span class="lineno">16391</span>&#160; </div>
-<div class="line"><a name="l16392"></a><span class="lineno">16392</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l16393"></a><span class="lineno">16393</span>&#160;    VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceMemoryProperties2KHR);</div>
-<div class="line"><a name="l16394"></a><span class="lineno">16394</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16395"></a><span class="lineno">16395</span>&#160; </div>
-<div class="line"><a name="l16396"></a><span class="lineno">16396</span>&#160;<span class="preprocessor">#undef VMA_COPY_IF_NOT_NULL</span></div>
-<div class="line"><a name="l16397"></a><span class="lineno">16397</span>&#160;}</div>
-<div class="line"><a name="l16398"></a><span class="lineno">16398</span>&#160; </div>
-<div class="line"><a name="l16399"></a><span class="lineno">16399</span>&#160;<span class="preprocessor">#if VMA_DYNAMIC_VULKAN_FUNCTIONS == 1</span></div>
-<div class="line"><a name="l16400"></a><span class="lineno">16400</span>&#160; </div>
-<div class="line"><a name="l16401"></a><span class="lineno">16401</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::ImportVulkanFunctions_Dynamic()</div>
-<div class="line"><a name="l16402"></a><span class="lineno">16402</span>&#160;{</div>
-<div class="line"><a name="l16403"></a><span class="lineno">16403</span>&#160;<span class="preprocessor">#define VMA_FETCH_INSTANCE_FUNC(memberName, functionPointerType, functionNameString) \</span></div>
-<div class="line"><a name="l16404"></a><span class="lineno">16404</span>&#160;<span class="preprocessor">    if(m_VulkanFunctions.memberName == VMA_NULL) \</span></div>
-<div class="line"><a name="l16405"></a><span class="lineno">16405</span>&#160;<span class="preprocessor">        m_VulkanFunctions.memberName = \</span></div>
-<div class="line"><a name="l16406"></a><span class="lineno">16406</span>&#160;<span class="preprocessor">            (functionPointerType)vkGetInstanceProcAddr(m_hInstance, functionNameString);</span></div>
-<div class="line"><a name="l16407"></a><span class="lineno">16407</span>&#160;<span class="preprocessor">#define VMA_FETCH_DEVICE_FUNC(memberName, functionPointerType, functionNameString) \</span></div>
-<div class="line"><a name="l16408"></a><span class="lineno">16408</span>&#160;<span class="preprocessor">    if(m_VulkanFunctions.memberName == VMA_NULL) \</span></div>
-<div class="line"><a name="l16409"></a><span class="lineno">16409</span>&#160;<span class="preprocessor">        m_VulkanFunctions.memberName = \</span></div>
-<div class="line"><a name="l16410"></a><span class="lineno">16410</span>&#160;<span class="preprocessor">            (functionPointerType)vkGetDeviceProcAddr(m_hDevice, functionNameString);</span></div>
-<div class="line"><a name="l16411"></a><span class="lineno">16411</span>&#160; </div>
-<div class="line"><a name="l16412"></a><span class="lineno">16412</span>&#160;    VMA_FETCH_INSTANCE_FUNC(vkGetPhysicalDeviceProperties, PFN_vkGetPhysicalDeviceProperties, <span class="stringliteral">&quot;vkGetPhysicalDeviceProperties&quot;</span>);</div>
-<div class="line"><a name="l16413"></a><span class="lineno">16413</span>&#160;    VMA_FETCH_INSTANCE_FUNC(vkGetPhysicalDeviceMemoryProperties, PFN_vkGetPhysicalDeviceMemoryProperties, <span class="stringliteral">&quot;vkGetPhysicalDeviceMemoryProperties&quot;</span>);</div>
-<div class="line"><a name="l16414"></a><span class="lineno">16414</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkAllocateMemory, PFN_vkAllocateMemory, <span class="stringliteral">&quot;vkAllocateMemory&quot;</span>);</div>
-<div class="line"><a name="l16415"></a><span class="lineno">16415</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkFreeMemory, PFN_vkFreeMemory, <span class="stringliteral">&quot;vkFreeMemory&quot;</span>);</div>
-<div class="line"><a name="l16416"></a><span class="lineno">16416</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkMapMemory, PFN_vkMapMemory, <span class="stringliteral">&quot;vkMapMemory&quot;</span>);</div>
-<div class="line"><a name="l16417"></a><span class="lineno">16417</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkUnmapMemory, PFN_vkUnmapMemory, <span class="stringliteral">&quot;vkUnmapMemory&quot;</span>);</div>
-<div class="line"><a name="l16418"></a><span class="lineno">16418</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkFlushMappedMemoryRanges, PFN_vkFlushMappedMemoryRanges, <span class="stringliteral">&quot;vkFlushMappedMemoryRanges&quot;</span>);</div>
-<div class="line"><a name="l16419"></a><span class="lineno">16419</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkInvalidateMappedMemoryRanges, PFN_vkInvalidateMappedMemoryRanges, <span class="stringliteral">&quot;vkInvalidateMappedMemoryRanges&quot;</span>);</div>
-<div class="line"><a name="l16420"></a><span class="lineno">16420</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkBindBufferMemory, PFN_vkBindBufferMemory, <span class="stringliteral">&quot;vkBindBufferMemory&quot;</span>);</div>
-<div class="line"><a name="l16421"></a><span class="lineno">16421</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkBindImageMemory, PFN_vkBindImageMemory, <span class="stringliteral">&quot;vkBindImageMemory&quot;</span>);</div>
-<div class="line"><a name="l16422"></a><span class="lineno">16422</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkGetBufferMemoryRequirements, PFN_vkGetBufferMemoryRequirements, <span class="stringliteral">&quot;vkGetBufferMemoryRequirements&quot;</span>);</div>
-<div class="line"><a name="l16423"></a><span class="lineno">16423</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkGetImageMemoryRequirements, PFN_vkGetImageMemoryRequirements, <span class="stringliteral">&quot;vkGetImageMemoryRequirements&quot;</span>);</div>
-<div class="line"><a name="l16424"></a><span class="lineno">16424</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkCreateBuffer, PFN_vkCreateBuffer, <span class="stringliteral">&quot;vkCreateBuffer&quot;</span>);</div>
-<div class="line"><a name="l16425"></a><span class="lineno">16425</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkDestroyBuffer, PFN_vkDestroyBuffer, <span class="stringliteral">&quot;vkDestroyBuffer&quot;</span>);</div>
-<div class="line"><a name="l16426"></a><span class="lineno">16426</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkCreateImage, PFN_vkCreateImage, <span class="stringliteral">&quot;vkCreateImage&quot;</span>);</div>
-<div class="line"><a name="l16427"></a><span class="lineno">16427</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkDestroyImage, PFN_vkDestroyImage, <span class="stringliteral">&quot;vkDestroyImage&quot;</span>);</div>
-<div class="line"><a name="l16428"></a><span class="lineno">16428</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkCmdCopyBuffer, PFN_vkCmdCopyBuffer, <span class="stringliteral">&quot;vkCmdCopyBuffer&quot;</span>);</div>
-<div class="line"><a name="l16429"></a><span class="lineno">16429</span>&#160; </div>
-<div class="line"><a name="l16430"></a><span class="lineno">16430</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l16431"></a><span class="lineno">16431</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
-<div class="line"><a name="l16432"></a><span class="lineno">16432</span>&#160;    {</div>
-<div class="line"><a name="l16433"></a><span class="lineno">16433</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkGetBufferMemoryRequirements2KHR, PFN_vkGetBufferMemoryRequirements2, <span class="stringliteral">&quot;vkGetBufferMemoryRequirements2&quot;</span>);</div>
-<div class="line"><a name="l16434"></a><span class="lineno">16434</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkGetImageMemoryRequirements2KHR, PFN_vkGetImageMemoryRequirements2, <span class="stringliteral">&quot;vkGetImageMemoryRequirements2&quot;</span>);</div>
-<div class="line"><a name="l16435"></a><span class="lineno">16435</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkBindBufferMemory2KHR, PFN_vkBindBufferMemory2, <span class="stringliteral">&quot;vkBindBufferMemory2&quot;</span>);</div>
-<div class="line"><a name="l16436"></a><span class="lineno">16436</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkBindImageMemory2KHR, PFN_vkBindImageMemory2, <span class="stringliteral">&quot;vkBindImageMemory2&quot;</span>);</div>
-<div class="line"><a name="l16437"></a><span class="lineno">16437</span>&#160;        VMA_FETCH_INSTANCE_FUNC(vkGetPhysicalDeviceMemoryProperties2KHR, PFN_vkGetPhysicalDeviceMemoryProperties2, <span class="stringliteral">&quot;vkGetPhysicalDeviceMemoryProperties2&quot;</span>);</div>
-<div class="line"><a name="l16438"></a><span class="lineno">16438</span>&#160;    }</div>
-<div class="line"><a name="l16439"></a><span class="lineno">16439</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16440"></a><span class="lineno">16440</span>&#160; </div>
-<div class="line"><a name="l16441"></a><span class="lineno">16441</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION</span></div>
-<div class="line"><a name="l16442"></a><span class="lineno">16442</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation)</div>
-<div class="line"><a name="l16443"></a><span class="lineno">16443</span>&#160;    {</div>
-<div class="line"><a name="l16444"></a><span class="lineno">16444</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkGetBufferMemoryRequirements2KHR, PFN_vkGetBufferMemoryRequirements2KHR, <span class="stringliteral">&quot;vkGetBufferMemoryRequirements2KHR&quot;</span>);</div>
-<div class="line"><a name="l16445"></a><span class="lineno">16445</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkGetImageMemoryRequirements2KHR, PFN_vkGetImageMemoryRequirements2KHR, <span class="stringliteral">&quot;vkGetImageMemoryRequirements2KHR&quot;</span>);</div>
-<div class="line"><a name="l16446"></a><span class="lineno">16446</span>&#160;    }</div>
-<div class="line"><a name="l16447"></a><span class="lineno">16447</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16448"></a><span class="lineno">16448</span>&#160; </div>
-<div class="line"><a name="l16449"></a><span class="lineno">16449</span>&#160;<span class="preprocessor">#if VMA_BIND_MEMORY2</span></div>
-<div class="line"><a name="l16450"></a><span class="lineno">16450</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrBindMemory2)</div>
-<div class="line"><a name="l16451"></a><span class="lineno">16451</span>&#160;    {</div>
-<div class="line"><a name="l16452"></a><span class="lineno">16452</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkBindBufferMemory2KHR, PFN_vkBindBufferMemory2KHR, <span class="stringliteral">&quot;vkBindBufferMemory2KHR&quot;</span>);</div>
-<div class="line"><a name="l16453"></a><span class="lineno">16453</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkBindImageMemory2KHR, PFN_vkBindImageMemory2KHR, <span class="stringliteral">&quot;vkBindImageMemory2KHR&quot;</span>);</div>
-<div class="line"><a name="l16454"></a><span class="lineno">16454</span>&#160;    }</div>
-<div class="line"><a name="l16455"></a><span class="lineno">16455</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_BIND_MEMORY2</span></div>
-<div class="line"><a name="l16456"></a><span class="lineno">16456</span>&#160; </div>
-<div class="line"><a name="l16457"></a><span class="lineno">16457</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l16458"></a><span class="lineno">16458</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget)</div>
-<div class="line"><a name="l16459"></a><span class="lineno">16459</span>&#160;    {</div>
-<div class="line"><a name="l16460"></a><span class="lineno">16460</span>&#160;        VMA_FETCH_INSTANCE_FUNC(vkGetPhysicalDeviceMemoryProperties2KHR, PFN_vkGetPhysicalDeviceMemoryProperties2KHR, <span class="stringliteral">&quot;vkGetPhysicalDeviceMemoryProperties2KHR&quot;</span>);</div>
-<div class="line"><a name="l16461"></a><span class="lineno">16461</span>&#160;    }</div>
-<div class="line"><a name="l16462"></a><span class="lineno">16462</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l16463"></a><span class="lineno">16463</span>&#160; </div>
-<div class="line"><a name="l16464"></a><span class="lineno">16464</span>&#160;<span class="preprocessor">#undef VMA_FETCH_DEVICE_FUNC</span></div>
-<div class="line"><a name="l16465"></a><span class="lineno">16465</span>&#160;<span class="preprocessor">#undef VMA_FETCH_INSTANCE_FUNC</span></div>
-<div class="line"><a name="l16466"></a><span class="lineno">16466</span>&#160;}</div>
-<div class="line"><a name="l16467"></a><span class="lineno">16467</span>&#160; </div>
-<div class="line"><a name="l16468"></a><span class="lineno">16468</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_DYNAMIC_VULKAN_FUNCTIONS == 1</span></div>
-<div class="line"><a name="l16469"></a><span class="lineno">16469</span>&#160; </div>
-<div class="line"><a name="l16470"></a><span class="lineno">16470</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::ValidateVulkanFunctions()</div>
-<div class="line"><a name="l16471"></a><span class="lineno">16471</span>&#160;{</div>
-<div class="line"><a name="l16472"></a><span class="lineno">16472</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceProperties != VMA_NULL);</div>
-<div class="line"><a name="l16473"></a><span class="lineno">16473</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties != VMA_NULL);</div>
-<div class="line"><a name="l16474"></a><span class="lineno">16474</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkAllocateMemory != VMA_NULL);</div>
-<div class="line"><a name="l16475"></a><span class="lineno">16475</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkFreeMemory != VMA_NULL);</div>
-<div class="line"><a name="l16476"></a><span class="lineno">16476</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkMapMemory != VMA_NULL);</div>
-<div class="line"><a name="l16477"></a><span class="lineno">16477</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkUnmapMemory != VMA_NULL);</div>
-<div class="line"><a name="l16478"></a><span class="lineno">16478</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkFlushMappedMemoryRanges != VMA_NULL);</div>
-<div class="line"><a name="l16479"></a><span class="lineno">16479</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkInvalidateMappedMemoryRanges != VMA_NULL);</div>
-<div class="line"><a name="l16480"></a><span class="lineno">16480</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkBindBufferMemory != VMA_NULL);</div>
-<div class="line"><a name="l16481"></a><span class="lineno">16481</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkBindImageMemory != VMA_NULL);</div>
-<div class="line"><a name="l16482"></a><span class="lineno">16482</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetBufferMemoryRequirements != VMA_NULL);</div>
-<div class="line"><a name="l16483"></a><span class="lineno">16483</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetImageMemoryRequirements != VMA_NULL);</div>
-<div class="line"><a name="l16484"></a><span class="lineno">16484</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkCreateBuffer != VMA_NULL);</div>
-<div class="line"><a name="l16485"></a><span class="lineno">16485</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkDestroyBuffer != VMA_NULL);</div>
-<div class="line"><a name="l16486"></a><span class="lineno">16486</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkCreateImage != VMA_NULL);</div>
-<div class="line"><a name="l16487"></a><span class="lineno">16487</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkDestroyImage != VMA_NULL);</div>
-<div class="line"><a name="l16488"></a><span class="lineno">16488</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkCmdCopyBuffer != VMA_NULL);</div>
-<div class="line"><a name="l16489"></a><span class="lineno">16489</span>&#160; </div>
-<div class="line"><a name="l16490"></a><span class="lineno">16490</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l16491"></a><span class="lineno">16491</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0) || m_UseKhrDedicatedAllocation)</div>
-<div class="line"><a name="l16492"></a><span class="lineno">16492</span>&#160;    {</div>
-<div class="line"><a name="l16493"></a><span class="lineno">16493</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR != VMA_NULL);</div>
-<div class="line"><a name="l16494"></a><span class="lineno">16494</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkGetImageMemoryRequirements2KHR != VMA_NULL);</div>
-<div class="line"><a name="l16495"></a><span class="lineno">16495</span>&#160;    }</div>
-<div class="line"><a name="l16496"></a><span class="lineno">16496</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16497"></a><span class="lineno">16497</span>&#160; </div>
-<div class="line"><a name="l16498"></a><span class="lineno">16498</span>&#160;<span class="preprocessor">#if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l16499"></a><span class="lineno">16499</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0) || m_UseKhrBindMemory2)</div>
-<div class="line"><a name="l16500"></a><span class="lineno">16500</span>&#160;    {</div>
-<div class="line"><a name="l16501"></a><span class="lineno">16501</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkBindBufferMemory2KHR != VMA_NULL);</div>
-<div class="line"><a name="l16502"></a><span class="lineno">16502</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkBindImageMemory2KHR != VMA_NULL);</div>
-<div class="line"><a name="l16503"></a><span class="lineno">16503</span>&#160;    }</div>
-<div class="line"><a name="l16504"></a><span class="lineno">16504</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16505"></a><span class="lineno">16505</span>&#160; </div>
-<div class="line"><a name="l16506"></a><span class="lineno">16506</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l16507"></a><span class="lineno">16507</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
-<div class="line"><a name="l16508"></a><span class="lineno">16508</span>&#160;    {</div>
-<div class="line"><a name="l16509"></a><span class="lineno">16509</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR != VMA_NULL);</div>
-<div class="line"><a name="l16510"></a><span class="lineno">16510</span>&#160;    }</div>
-<div class="line"><a name="l16511"></a><span class="lineno">16511</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16512"></a><span class="lineno">16512</span>&#160;}</div>
-<div class="line"><a name="l16513"></a><span class="lineno">16513</span>&#160; </div>
-<div class="line"><a name="l16514"></a><span class="lineno">16514</span>&#160;VkDeviceSize VmaAllocator_T::CalcPreferredBlockSize(uint32_t memTypeIndex)</div>
-<div class="line"><a name="l16515"></a><span class="lineno">16515</span>&#160;{</div>
-<div class="line"><a name="l16516"></a><span class="lineno">16516</span>&#160;    <span class="keyword">const</span> uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
-<div class="line"><a name="l16517"></a><span class="lineno">16517</span>&#160;    <span class="keyword">const</span> VkDeviceSize heapSize = m_MemProps.memoryHeaps[heapIndex].size;</div>
-<div class="line"><a name="l16518"></a><span class="lineno">16518</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> isSmallHeap = heapSize &lt;= VMA_SMALL_HEAP_MAX_SIZE;</div>
-<div class="line"><a name="l16519"></a><span class="lineno">16519</span>&#160;    <span class="keywordflow">return</span> VmaAlignUp(isSmallHeap ? (heapSize / 8) : m_PreferredLargeHeapBlockSize, (VkDeviceSize)32);</div>
-<div class="line"><a name="l16520"></a><span class="lineno">16520</span>&#160;}</div>
-<div class="line"><a name="l16521"></a><span class="lineno">16521</span>&#160; </div>
-<div class="line"><a name="l16522"></a><span class="lineno">16522</span>&#160;VkResult VmaAllocator_T::AllocateMemoryOfType(</div>
-<div class="line"><a name="l16523"></a><span class="lineno">16523</span>&#160;    VkDeviceSize size,</div>
-<div class="line"><a name="l16524"></a><span class="lineno">16524</span>&#160;    VkDeviceSize alignment,</div>
-<div class="line"><a name="l16525"></a><span class="lineno">16525</span>&#160;    <span class="keywordtype">bool</span> dedicatedAllocation,</div>
-<div class="line"><a name="l16526"></a><span class="lineno">16526</span>&#160;    VkBuffer dedicatedBuffer,</div>
-<div class="line"><a name="l16527"></a><span class="lineno">16527</span>&#160;    VkBufferUsageFlags dedicatedBufferUsage,</div>
-<div class="line"><a name="l16528"></a><span class="lineno">16528</span>&#160;    VkImage dedicatedImage,</div>
-<div class="line"><a name="l16529"></a><span class="lineno">16529</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
-<div class="line"><a name="l16530"></a><span class="lineno">16530</span>&#160;    uint32_t memTypeIndex,</div>
-<div class="line"><a name="l16531"></a><span class="lineno">16531</span>&#160;    VmaSuballocationType suballocType,</div>
-<div class="line"><a name="l16532"></a><span class="lineno">16532</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l16533"></a><span class="lineno">16533</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
-<div class="line"><a name="l16534"></a><span class="lineno">16534</span>&#160;{</div>
-<div class="line"><a name="l16535"></a><span class="lineno">16535</span>&#160;    VMA_ASSERT(pAllocations != VMA_NULL);</div>
-<div class="line"><a name="l16536"></a><span class="lineno">16536</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;  AllocateMemory: MemoryTypeIndex=%u, AllocationCount=%zu, Size=%llu&quot;</span>, memTypeIndex, allocationCount, size);</div>
-<div class="line"><a name="l16537"></a><span class="lineno">16537</span>&#160; </div>
-<div class="line"><a name="l16538"></a><span class="lineno">16538</span>&#160;    <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> finalCreateInfo = createInfo;</div>
-<div class="line"><a name="l16539"></a><span class="lineno">16539</span>&#160; </div>
-<div class="line"><a name="l16540"></a><span class="lineno">16540</span>&#160;    <span class="comment">// If memory type is not HOST_VISIBLE, disable MAPPED.</span></div>
-<div class="line"><a name="l16541"></a><span class="lineno">16541</span>&#160;    <span class="keywordflow">if</span>((finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0 &amp;&amp;</div>
-<div class="line"><a name="l16542"></a><span class="lineno">16542</span>&#160;        (m_MemProps.memoryTypes[memTypeIndex].propertyFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)</div>
-<div class="line"><a name="l16543"></a><span class="lineno">16543</span>&#160;    {</div>
-<div class="line"><a name="l16544"></a><span class="lineno">16544</span>&#160;        finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp;= ~<a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>;</div>
-<div class="line"><a name="l16545"></a><span class="lineno">16545</span>&#160;    }</div>
-<div class="line"><a name="l16546"></a><span class="lineno">16546</span>&#160;    <span class="comment">// If memory is lazily allocated, it should be always dedicated.</span></div>
-<div class="line"><a name="l16547"></a><span class="lineno">16547</span>&#160;    <span class="keywordflow">if</span>(finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> == <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED</a>)</div>
-<div class="line"><a name="l16548"></a><span class="lineno">16548</span>&#160;    {</div>
-<div class="line"><a name="l16549"></a><span class="lineno">16549</span>&#160;        finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> |= <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>;</div>
-<div class="line"><a name="l16550"></a><span class="lineno">16550</span>&#160;    }</div>
-<div class="line"><a name="l16551"></a><span class="lineno">16551</span>&#160; </div>
-<div class="line"><a name="l16552"></a><span class="lineno">16552</span>&#160;    VmaBlockVector* <span class="keyword">const</span> blockVector = m_pBlockVectors[memTypeIndex];</div>
-<div class="line"><a name="l16553"></a><span class="lineno">16553</span>&#160;    VMA_ASSERT(blockVector);</div>
-<div class="line"><a name="l16554"></a><span class="lineno">16554</span>&#160; </div>
-<div class="line"><a name="l16555"></a><span class="lineno">16555</span>&#160;    <span class="keyword">const</span> VkDeviceSize preferredBlockSize = blockVector-&gt;GetPreferredBlockSize();</div>
-<div class="line"><a name="l16556"></a><span class="lineno">16556</span>&#160;    <span class="keywordtype">bool</span> preferDedicatedMemory =</div>
-<div class="line"><a name="l16557"></a><span class="lineno">16557</span>&#160;        VMA_DEBUG_ALWAYS_DEDICATED_MEMORY ||</div>
-<div class="line"><a name="l16558"></a><span class="lineno">16558</span>&#160;        dedicatedAllocation ||</div>
-<div class="line"><a name="l16559"></a><span class="lineno">16559</span>&#160;        <span class="comment">// Heuristics: Allocate dedicated memory if requested size if greater than half of preferred block size.</span></div>
-<div class="line"><a name="l16560"></a><span class="lineno">16560</span>&#160;        size &gt; preferredBlockSize / 2;</div>
-<div class="line"><a name="l16561"></a><span class="lineno">16561</span>&#160; </div>
-<div class="line"><a name="l16562"></a><span class="lineno">16562</span>&#160;    <span class="keywordflow">if</span>(preferDedicatedMemory &amp;&amp;</div>
-<div class="line"><a name="l16563"></a><span class="lineno">16563</span>&#160;        (finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a>) == 0 &amp;&amp;</div>
-<div class="line"><a name="l16564"></a><span class="lineno">16564</span>&#160;        finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a> == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l16565"></a><span class="lineno">16565</span>&#160;    {</div>
-<div class="line"><a name="l16566"></a><span class="lineno">16566</span>&#160;        finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> |= <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>;</div>
-<div class="line"><a name="l16567"></a><span class="lineno">16567</span>&#160;    }</div>
-<div class="line"><a name="l16568"></a><span class="lineno">16568</span>&#160; </div>
-<div class="line"><a name="l16569"></a><span class="lineno">16569</span>&#160;    <span class="keywordflow">if</span>((finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>) != 0)</div>
-<div class="line"><a name="l16570"></a><span class="lineno">16570</span>&#160;    {</div>
-<div class="line"><a name="l16571"></a><span class="lineno">16571</span>&#160;        <span class="keywordflow">if</span>((finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a>) != 0)</div>
-<div class="line"><a name="l16572"></a><span class="lineno">16572</span>&#160;        {</div>
-<div class="line"><a name="l16573"></a><span class="lineno">16573</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l16574"></a><span class="lineno">16574</span>&#160;        }</div>
-<div class="line"><a name="l16575"></a><span class="lineno">16575</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l16576"></a><span class="lineno">16576</span>&#160;        {</div>
-<div class="line"><a name="l16577"></a><span class="lineno">16577</span>&#160;            <span class="keywordflow">return</span> AllocateDedicatedMemory(</div>
-<div class="line"><a name="l16578"></a><span class="lineno">16578</span>&#160;                size,</div>
-<div class="line"><a name="l16579"></a><span class="lineno">16579</span>&#160;                suballocType,</div>
-<div class="line"><a name="l16580"></a><span class="lineno">16580</span>&#160;                memTypeIndex,</div>
-<div class="line"><a name="l16581"></a><span class="lineno">16581</span>&#160;                (finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a>) != 0,</div>
-<div class="line"><a name="l16582"></a><span class="lineno">16582</span>&#160;                (finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0,</div>
-<div class="line"><a name="l16583"></a><span class="lineno">16583</span>&#160;                (finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a>) != 0,</div>
-<div class="line"><a name="l16584"></a><span class="lineno">16584</span>&#160;                finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
-<div class="line"><a name="l16585"></a><span class="lineno">16585</span>&#160;                finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7">priority</a>,</div>
-<div class="line"><a name="l16586"></a><span class="lineno">16586</span>&#160;                dedicatedBuffer,</div>
-<div class="line"><a name="l16587"></a><span class="lineno">16587</span>&#160;                dedicatedBufferUsage,</div>
-<div class="line"><a name="l16588"></a><span class="lineno">16588</span>&#160;                dedicatedImage,</div>
-<div class="line"><a name="l16589"></a><span class="lineno">16589</span>&#160;                allocationCount,</div>
-<div class="line"><a name="l16590"></a><span class="lineno">16590</span>&#160;                pAllocations);</div>
-<div class="line"><a name="l16591"></a><span class="lineno">16591</span>&#160;        }</div>
-<div class="line"><a name="l16592"></a><span class="lineno">16592</span>&#160;    }</div>
-<div class="line"><a name="l16593"></a><span class="lineno">16593</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l16594"></a><span class="lineno">16594</span>&#160;    {</div>
-<div class="line"><a name="l16595"></a><span class="lineno">16595</span>&#160;        VkResult res = blockVector-&gt;Allocate(</div>
-<div class="line"><a name="l16596"></a><span class="lineno">16596</span>&#160;            m_CurrentFrameIndex.load(),</div>
-<div class="line"><a name="l16597"></a><span class="lineno">16597</span>&#160;            size,</div>
-<div class="line"><a name="l16598"></a><span class="lineno">16598</span>&#160;            alignment,</div>
-<div class="line"><a name="l16599"></a><span class="lineno">16599</span>&#160;            finalCreateInfo,</div>
-<div class="line"><a name="l16600"></a><span class="lineno">16600</span>&#160;            suballocType,</div>
-<div class="line"><a name="l16601"></a><span class="lineno">16601</span>&#160;            allocationCount,</div>
-<div class="line"><a name="l16602"></a><span class="lineno">16602</span>&#160;            pAllocations);</div>
-<div class="line"><a name="l16603"></a><span class="lineno">16603</span>&#160;        <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l16604"></a><span class="lineno">16604</span>&#160;        {</div>
-<div class="line"><a name="l16605"></a><span class="lineno">16605</span>&#160;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l16606"></a><span class="lineno">16606</span>&#160;        }</div>
-<div class="line"><a name="l16607"></a><span class="lineno">16607</span>&#160; </div>
-<div class="line"><a name="l16608"></a><span class="lineno">16608</span>&#160;        <span class="comment">// 5. Try dedicated memory.</span></div>
-<div class="line"><a name="l16609"></a><span class="lineno">16609</span>&#160;        <span class="keywordflow">if</span>((finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a>) != 0)</div>
-<div class="line"><a name="l16610"></a><span class="lineno">16610</span>&#160;        {</div>
-<div class="line"><a name="l16611"></a><span class="lineno">16611</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l16612"></a><span class="lineno">16612</span>&#160;        }</div>
-<div class="line"><a name="l16613"></a><span class="lineno">16613</span>&#160; </div>
-<div class="line"><a name="l16614"></a><span class="lineno">16614</span>&#160;        <span class="comment">// Protection against creating each allocation as dedicated when we reach or exceed heap size/budget,</span></div>
-<div class="line"><a name="l16615"></a><span class="lineno">16615</span>&#160;        <span class="comment">// which can quickly deplete maxMemoryAllocationCount: Don&#39;t try dedicated allocations when above</span></div>
-<div class="line"><a name="l16616"></a><span class="lineno">16616</span>&#160;        <span class="comment">// 3/4 of the maximum allocation count.</span></div>
-<div class="line"><a name="l16617"></a><span class="lineno">16617</span>&#160;        <span class="keywordflow">if</span>(m_DeviceMemoryCount.load() &gt; m_PhysicalDeviceProperties.limits.maxMemoryAllocationCount * 3 / 4)</div>
-<div class="line"><a name="l16618"></a><span class="lineno">16618</span>&#160;        {</div>
-<div class="line"><a name="l16619"></a><span class="lineno">16619</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l16620"></a><span class="lineno">16620</span>&#160;        }</div>
-<div class="line"><a name="l16621"></a><span class="lineno">16621</span>&#160; </div>
-<div class="line"><a name="l16622"></a><span class="lineno">16622</span>&#160;        res = AllocateDedicatedMemory(</div>
-<div class="line"><a name="l16623"></a><span class="lineno">16623</span>&#160;            size,</div>
-<div class="line"><a name="l16624"></a><span class="lineno">16624</span>&#160;            suballocType,</div>
-<div class="line"><a name="l16625"></a><span class="lineno">16625</span>&#160;            memTypeIndex,</div>
-<div class="line"><a name="l16626"></a><span class="lineno">16626</span>&#160;            (finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a>) != 0,</div>
-<div class="line"><a name="l16627"></a><span class="lineno">16627</span>&#160;            (finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0,</div>
-<div class="line"><a name="l16628"></a><span class="lineno">16628</span>&#160;            (finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a>) != 0,</div>
-<div class="line"><a name="l16629"></a><span class="lineno">16629</span>&#160;            finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
-<div class="line"><a name="l16630"></a><span class="lineno">16630</span>&#160;            finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7">priority</a>,</div>
-<div class="line"><a name="l16631"></a><span class="lineno">16631</span>&#160;            dedicatedBuffer,</div>
-<div class="line"><a name="l16632"></a><span class="lineno">16632</span>&#160;            dedicatedBufferUsage,</div>
-<div class="line"><a name="l16633"></a><span class="lineno">16633</span>&#160;            dedicatedImage,</div>
-<div class="line"><a name="l16634"></a><span class="lineno">16634</span>&#160;            allocationCount,</div>
-<div class="line"><a name="l16635"></a><span class="lineno">16635</span>&#160;            pAllocations);</div>
-<div class="line"><a name="l16636"></a><span class="lineno">16636</span>&#160;        <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l16637"></a><span class="lineno">16637</span>&#160;        {</div>
-<div class="line"><a name="l16638"></a><span class="lineno">16638</span>&#160;            <span class="comment">// Succeeded: AllocateDedicatedMemory function already filld pMemory, nothing more to do here.</span></div>
-<div class="line"><a name="l16639"></a><span class="lineno">16639</span>&#160;            VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Allocated as DedicatedMemory&quot;</span>);</div>
-<div class="line"><a name="l16640"></a><span class="lineno">16640</span>&#160;            <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l16641"></a><span class="lineno">16641</span>&#160;        }</div>
-<div class="line"><a name="l16642"></a><span class="lineno">16642</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l16643"></a><span class="lineno">16643</span>&#160;        {</div>
-<div class="line"><a name="l16644"></a><span class="lineno">16644</span>&#160;            <span class="comment">// Everything failed: Return error code.</span></div>
-<div class="line"><a name="l16645"></a><span class="lineno">16645</span>&#160;            VMA_DEBUG_LOG(<span class="stringliteral">&quot;    vkAllocateMemory FAILED&quot;</span>);</div>
-<div class="line"><a name="l16646"></a><span class="lineno">16646</span>&#160;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l16647"></a><span class="lineno">16647</span>&#160;        }</div>
-<div class="line"><a name="l16648"></a><span class="lineno">16648</span>&#160;    }</div>
-<div class="line"><a name="l16649"></a><span class="lineno">16649</span>&#160;}</div>
-<div class="line"><a name="l16650"></a><span class="lineno">16650</span>&#160; </div>
-<div class="line"><a name="l16651"></a><span class="lineno">16651</span>&#160;VkResult VmaAllocator_T::AllocateDedicatedMemory(</div>
-<div class="line"><a name="l16652"></a><span class="lineno">16652</span>&#160;    VkDeviceSize size,</div>
-<div class="line"><a name="l16653"></a><span class="lineno">16653</span>&#160;    VmaSuballocationType suballocType,</div>
-<div class="line"><a name="l16654"></a><span class="lineno">16654</span>&#160;    uint32_t memTypeIndex,</div>
-<div class="line"><a name="l16655"></a><span class="lineno">16655</span>&#160;    <span class="keywordtype">bool</span> withinBudget,</div>
-<div class="line"><a name="l16656"></a><span class="lineno">16656</span>&#160;    <span class="keywordtype">bool</span> map,</div>
-<div class="line"><a name="l16657"></a><span class="lineno">16657</span>&#160;    <span class="keywordtype">bool</span> isUserDataString,</div>
-<div class="line"><a name="l16658"></a><span class="lineno">16658</span>&#160;    <span class="keywordtype">void</span>* pUserData,</div>
-<div class="line"><a name="l16659"></a><span class="lineno">16659</span>&#160;    <span class="keywordtype">float</span> priority,</div>
-<div class="line"><a name="l16660"></a><span class="lineno">16660</span>&#160;    VkBuffer dedicatedBuffer,</div>
-<div class="line"><a name="l16661"></a><span class="lineno">16661</span>&#160;    VkBufferUsageFlags dedicatedBufferUsage,</div>
-<div class="line"><a name="l16662"></a><span class="lineno">16662</span>&#160;    VkImage dedicatedImage,</div>
-<div class="line"><a name="l16663"></a><span class="lineno">16663</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l16664"></a><span class="lineno">16664</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
-<div class="line"><a name="l16665"></a><span class="lineno">16665</span>&#160;{</div>
-<div class="line"><a name="l16666"></a><span class="lineno">16666</span>&#160;    VMA_ASSERT(allocationCount &gt; 0 &amp;&amp; pAllocations);</div>
-<div class="line"><a name="l16667"></a><span class="lineno">16667</span>&#160; </div>
-<div class="line"><a name="l16668"></a><span class="lineno">16668</span>&#160;    <span class="keywordflow">if</span>(withinBudget)</div>
-<div class="line"><a name="l16669"></a><span class="lineno">16669</span>&#160;    {</div>
-<div class="line"><a name="l16670"></a><span class="lineno">16670</span>&#160;        <span class="keyword">const</span> uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
-<div class="line"><a name="l16671"></a><span class="lineno">16671</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> heapBudget = {};</div>
-<div class="line"><a name="l16672"></a><span class="lineno">16672</span>&#160;        GetBudget(&amp;heapBudget, heapIndex, 1);</div>
-<div class="line"><a name="l16673"></a><span class="lineno">16673</span>&#160;        <span class="keywordflow">if</span>(heapBudget.<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a> + size * allocationCount &gt; heapBudget.<a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a>)</div>
-<div class="line"><a name="l16674"></a><span class="lineno">16674</span>&#160;        {</div>
-<div class="line"><a name="l16675"></a><span class="lineno">16675</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l16676"></a><span class="lineno">16676</span>&#160;        }</div>
-<div class="line"><a name="l16677"></a><span class="lineno">16677</span>&#160;    }</div>
-<div class="line"><a name="l16678"></a><span class="lineno">16678</span>&#160; </div>
-<div class="line"><a name="l16679"></a><span class="lineno">16679</span>&#160;    VkMemoryAllocateInfo allocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO };</div>
-<div class="line"><a name="l16680"></a><span class="lineno">16680</span>&#160;    allocInfo.memoryTypeIndex = memTypeIndex;</div>
-<div class="line"><a name="l16681"></a><span class="lineno">16681</span>&#160;    allocInfo.allocationSize = size;</div>
-<div class="line"><a name="l16682"></a><span class="lineno">16682</span>&#160; </div>
-<div class="line"><a name="l16683"></a><span class="lineno">16683</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l16684"></a><span class="lineno">16684</span>&#160;    VkMemoryDedicatedAllocateInfoKHR dedicatedAllocInfo = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR };</div>
-<div class="line"><a name="l16685"></a><span class="lineno">16685</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
-<div class="line"><a name="l16686"></a><span class="lineno">16686</span>&#160;    {</div>
-<div class="line"><a name="l16687"></a><span class="lineno">16687</span>&#160;        <span class="keywordflow">if</span>(dedicatedBuffer != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l16688"></a><span class="lineno">16688</span>&#160;        {</div>
-<div class="line"><a name="l16689"></a><span class="lineno">16689</span>&#160;            VMA_ASSERT(dedicatedImage == VK_NULL_HANDLE);</div>
-<div class="line"><a name="l16690"></a><span class="lineno">16690</span>&#160;            dedicatedAllocInfo.buffer = dedicatedBuffer;</div>
-<div class="line"><a name="l16691"></a><span class="lineno">16691</span>&#160;            VmaPnextChainPushFront(&amp;allocInfo, &amp;dedicatedAllocInfo);</div>
-<div class="line"><a name="l16692"></a><span class="lineno">16692</span>&#160;        }</div>
-<div class="line"><a name="l16693"></a><span class="lineno">16693</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(dedicatedImage != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l16694"></a><span class="lineno">16694</span>&#160;        {</div>
-<div class="line"><a name="l16695"></a><span class="lineno">16695</span>&#160;            dedicatedAllocInfo.image = dedicatedImage;</div>
-<div class="line"><a name="l16696"></a><span class="lineno">16696</span>&#160;            VmaPnextChainPushFront(&amp;allocInfo, &amp;dedicatedAllocInfo);</div>
-<div class="line"><a name="l16697"></a><span class="lineno">16697</span>&#160;        }</div>
-<div class="line"><a name="l16698"></a><span class="lineno">16698</span>&#160;    }</div>
-<div class="line"><a name="l16699"></a><span class="lineno">16699</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l16700"></a><span class="lineno">16700</span>&#160; </div>
-<div class="line"><a name="l16701"></a><span class="lineno">16701</span>&#160;<span class="preprocessor">#if VMA_BUFFER_DEVICE_ADDRESS</span></div>
-<div class="line"><a name="l16702"></a><span class="lineno">16702</span>&#160;    VkMemoryAllocateFlagsInfoKHR allocFlagsInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR };</div>
-<div class="line"><a name="l16703"></a><span class="lineno">16703</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrBufferDeviceAddress)</div>
-<div class="line"><a name="l16704"></a><span class="lineno">16704</span>&#160;    {</div>
-<div class="line"><a name="l16705"></a><span class="lineno">16705</span>&#160;        <span class="keywordtype">bool</span> canContainBufferWithDeviceAddress = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l16706"></a><span class="lineno">16706</span>&#160;        <span class="keywordflow">if</span>(dedicatedBuffer != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l16707"></a><span class="lineno">16707</span>&#160;        {</div>
-<div class="line"><a name="l16708"></a><span class="lineno">16708</span>&#160;            canContainBufferWithDeviceAddress = dedicatedBufferUsage == UINT32_MAX || <span class="comment">// Usage flags unknown</span></div>
-<div class="line"><a name="l16709"></a><span class="lineno">16709</span>&#160;                (dedicatedBufferUsage &amp; VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT) != 0;</div>
-<div class="line"><a name="l16710"></a><span class="lineno">16710</span>&#160;        }</div>
-<div class="line"><a name="l16711"></a><span class="lineno">16711</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(dedicatedImage != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l16712"></a><span class="lineno">16712</span>&#160;        {</div>
-<div class="line"><a name="l16713"></a><span class="lineno">16713</span>&#160;            canContainBufferWithDeviceAddress = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l16714"></a><span class="lineno">16714</span>&#160;        }</div>
-<div class="line"><a name="l16715"></a><span class="lineno">16715</span>&#160;        <span class="keywordflow">if</span>(canContainBufferWithDeviceAddress)</div>
-<div class="line"><a name="l16716"></a><span class="lineno">16716</span>&#160;        {</div>
-<div class="line"><a name="l16717"></a><span class="lineno">16717</span>&#160;            allocFlagsInfo.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR;</div>
-<div class="line"><a name="l16718"></a><span class="lineno">16718</span>&#160;            VmaPnextChainPushFront(&amp;allocInfo, &amp;allocFlagsInfo);</div>
-<div class="line"><a name="l16719"></a><span class="lineno">16719</span>&#160;        }</div>
-<div class="line"><a name="l16720"></a><span class="lineno">16720</span>&#160;    }</div>
-<div class="line"><a name="l16721"></a><span class="lineno">16721</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_BUFFER_DEVICE_ADDRESS</span></div>
-<div class="line"><a name="l16722"></a><span class="lineno">16722</span>&#160; </div>
-<div class="line"><a name="l16723"></a><span class="lineno">16723</span>&#160;<span class="preprocessor">#if VMA_MEMORY_PRIORITY</span></div>
-<div class="line"><a name="l16724"></a><span class="lineno">16724</span>&#160;    VkMemoryPriorityAllocateInfoEXT priorityInfo = { VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT };</div>
-<div class="line"><a name="l16725"></a><span class="lineno">16725</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryPriority)</div>
-<div class="line"><a name="l16726"></a><span class="lineno">16726</span>&#160;    {</div>
-<div class="line"><a name="l16727"></a><span class="lineno">16727</span>&#160;        priorityInfo.priority = priority;</div>
-<div class="line"><a name="l16728"></a><span class="lineno">16728</span>&#160;        VmaPnextChainPushFront(&amp;allocInfo, &amp;priorityInfo);</div>
-<div class="line"><a name="l16729"></a><span class="lineno">16729</span>&#160;    }</div>
-<div class="line"><a name="l16730"></a><span class="lineno">16730</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_MEMORY_PRIORITY</span></div>
-<div class="line"><a name="l16731"></a><span class="lineno">16731</span>&#160; </div>
-<div class="line"><a name="l16732"></a><span class="lineno">16732</span>&#160;<span class="preprocessor">#if VMA_EXTERNAL_MEMORY</span></div>
-<div class="line"><a name="l16733"></a><span class="lineno">16733</span>&#160;    <span class="comment">// Attach VkExportMemoryAllocateInfoKHR if necessary.</span></div>
-<div class="line"><a name="l16734"></a><span class="lineno">16734</span>&#160;    VkExportMemoryAllocateInfoKHR exportMemoryAllocInfo = { VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR };</div>
-<div class="line"><a name="l16735"></a><span class="lineno">16735</span>&#160;    exportMemoryAllocInfo.handleTypes = GetExternalMemoryHandleTypeFlags(memTypeIndex);</div>
-<div class="line"><a name="l16736"></a><span class="lineno">16736</span>&#160;    <span class="keywordflow">if</span>(exportMemoryAllocInfo.handleTypes != 0)</div>
-<div class="line"><a name="l16737"></a><span class="lineno">16737</span>&#160;    {</div>
-<div class="line"><a name="l16738"></a><span class="lineno">16738</span>&#160;        VmaPnextChainPushFront(&amp;allocInfo, &amp;exportMemoryAllocInfo);</div>
-<div class="line"><a name="l16739"></a><span class="lineno">16739</span>&#160;    }</div>
-<div class="line"><a name="l16740"></a><span class="lineno">16740</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_EXTERNAL_MEMORY</span></div>
-<div class="line"><a name="l16741"></a><span class="lineno">16741</span>&#160; </div>
-<div class="line"><a name="l16742"></a><span class="lineno">16742</span>&#160;    <span class="keywordtype">size_t</span> allocIndex;</div>
-<div class="line"><a name="l16743"></a><span class="lineno">16743</span>&#160;    VkResult res = VK_SUCCESS;</div>
-<div class="line"><a name="l16744"></a><span class="lineno">16744</span>&#160;    <span class="keywordflow">for</span>(allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</div>
-<div class="line"><a name="l16745"></a><span class="lineno">16745</span>&#160;    {</div>
-<div class="line"><a name="l16746"></a><span class="lineno">16746</span>&#160;        res = AllocateDedicatedMemoryPage(</div>
-<div class="line"><a name="l16747"></a><span class="lineno">16747</span>&#160;            size,</div>
-<div class="line"><a name="l16748"></a><span class="lineno">16748</span>&#160;            suballocType,</div>
-<div class="line"><a name="l16749"></a><span class="lineno">16749</span>&#160;            memTypeIndex,</div>
-<div class="line"><a name="l16750"></a><span class="lineno">16750</span>&#160;            allocInfo,</div>
-<div class="line"><a name="l16751"></a><span class="lineno">16751</span>&#160;            map,</div>
-<div class="line"><a name="l16752"></a><span class="lineno">16752</span>&#160;            isUserDataString,</div>
-<div class="line"><a name="l16753"></a><span class="lineno">16753</span>&#160;            pUserData,</div>
-<div class="line"><a name="l16754"></a><span class="lineno">16754</span>&#160;            pAllocations + allocIndex);</div>
-<div class="line"><a name="l16755"></a><span class="lineno">16755</span>&#160;        <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l16756"></a><span class="lineno">16756</span>&#160;        {</div>
-<div class="line"><a name="l16757"></a><span class="lineno">16757</span>&#160;            <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16758"></a><span class="lineno">16758</span>&#160;        }</div>
-<div class="line"><a name="l16759"></a><span class="lineno">16759</span>&#160;    }</div>
-<div class="line"><a name="l16760"></a><span class="lineno">16760</span>&#160; </div>
-<div class="line"><a name="l16761"></a><span class="lineno">16761</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l16762"></a><span class="lineno">16762</span>&#160;    {</div>
-<div class="line"><a name="l16763"></a><span class="lineno">16763</span>&#160;        <span class="comment">// Register them in m_DedicatedAllocations.</span></div>
-<div class="line"><a name="l16764"></a><span class="lineno">16764</span>&#160;        {</div>
-<div class="line"><a name="l16765"></a><span class="lineno">16765</span>&#160;            VmaMutexLockWrite lock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
-<div class="line"><a name="l16766"></a><span class="lineno">16766</span>&#160;            DedicatedAllocationLinkedList&amp; dedicatedAllocations = m_DedicatedAllocations[memTypeIndex];</div>
-<div class="line"><a name="l16767"></a><span class="lineno">16767</span>&#160;            <span class="keywordflow">for</span>(allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</div>
-<div class="line"><a name="l16768"></a><span class="lineno">16768</span>&#160;            {</div>
-<div class="line"><a name="l16769"></a><span class="lineno">16769</span>&#160;                dedicatedAllocations.PushBack(pAllocations[allocIndex]);</div>
-<div class="line"><a name="l16770"></a><span class="lineno">16770</span>&#160;            }</div>
-<div class="line"><a name="l16771"></a><span class="lineno">16771</span>&#160;        }</div>
-<div class="line"><a name="l16772"></a><span class="lineno">16772</span>&#160; </div>
-<div class="line"><a name="l16773"></a><span class="lineno">16773</span>&#160;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Allocated DedicatedMemory Count=%zu, MemoryTypeIndex=#%u&quot;</span>, allocationCount, memTypeIndex);</div>
-<div class="line"><a name="l16774"></a><span class="lineno">16774</span>&#160;    }</div>
-<div class="line"><a name="l16775"></a><span class="lineno">16775</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l16776"></a><span class="lineno">16776</span>&#160;    {</div>
-<div class="line"><a name="l16777"></a><span class="lineno">16777</span>&#160;        <span class="comment">// Free all already created allocations.</span></div>
-<div class="line"><a name="l16778"></a><span class="lineno">16778</span>&#160;        <span class="keywordflow">while</span>(allocIndex--)</div>
-<div class="line"><a name="l16779"></a><span class="lineno">16779</span>&#160;        {</div>
-<div class="line"><a name="l16780"></a><span class="lineno">16780</span>&#160;            <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> currAlloc = pAllocations[allocIndex];</div>
-<div class="line"><a name="l16781"></a><span class="lineno">16781</span>&#160;            VkDeviceMemory hMemory = currAlloc-&gt;GetMemory();</div>
-<div class="line"><a name="l16782"></a><span class="lineno">16782</span>&#160; </div>
-<div class="line"><a name="l16783"></a><span class="lineno">16783</span>&#160;            <span class="comment">/*</span></div>
-<div class="line"><a name="l16784"></a><span class="lineno">16784</span>&#160;<span class="comment">            There is no need to call this, because Vulkan spec allows to skip vkUnmapMemory</span></div>
-<div class="line"><a name="l16785"></a><span class="lineno">16785</span>&#160;<span class="comment">            before vkFreeMemory.</span></div>
-<div class="line"><a name="l16786"></a><span class="lineno">16786</span>&#160;<span class="comment"></span> </div>
-<div class="line"><a name="l16787"></a><span class="lineno">16787</span>&#160;<span class="comment">            if(currAlloc-&gt;GetMappedData() != VMA_NULL)</span></div>
-<div class="line"><a name="l16788"></a><span class="lineno">16788</span>&#160;<span class="comment">            {</span></div>
-<div class="line"><a name="l16789"></a><span class="lineno">16789</span>&#160;<span class="comment">                (*m_VulkanFunctions.vkUnmapMemory)(m_hDevice, hMemory);</span></div>
-<div class="line"><a name="l16790"></a><span class="lineno">16790</span>&#160;<span class="comment">            }</span></div>
-<div class="line"><a name="l16791"></a><span class="lineno">16791</span>&#160;<span class="comment">            */</span></div>
-<div class="line"><a name="l16792"></a><span class="lineno">16792</span>&#160; </div>
-<div class="line"><a name="l16793"></a><span class="lineno">16793</span>&#160;            FreeVulkanMemory(memTypeIndex, currAlloc-&gt;GetSize(), hMemory);</div>
-<div class="line"><a name="l16794"></a><span class="lineno">16794</span>&#160;            m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), currAlloc-&gt;GetSize());</div>
-<div class="line"><a name="l16795"></a><span class="lineno">16795</span>&#160;            currAlloc-&gt;SetUserData(<span class="keyword">this</span>, VMA_NULL);</div>
-<div class="line"><a name="l16796"></a><span class="lineno">16796</span>&#160;            m_AllocationObjectAllocator.Free(currAlloc);</div>
-<div class="line"><a name="l16797"></a><span class="lineno">16797</span>&#160;        }</div>
-<div class="line"><a name="l16798"></a><span class="lineno">16798</span>&#160; </div>
-<div class="line"><a name="l16799"></a><span class="lineno">16799</span>&#160;        memset(pAllocations, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a>) * allocationCount);</div>
-<div class="line"><a name="l16800"></a><span class="lineno">16800</span>&#160;    }</div>
-<div class="line"><a name="l16801"></a><span class="lineno">16801</span>&#160; </div>
-<div class="line"><a name="l16802"></a><span class="lineno">16802</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l16803"></a><span class="lineno">16803</span>&#160;}</div>
-<div class="line"><a name="l16804"></a><span class="lineno">16804</span>&#160; </div>
-<div class="line"><a name="l16805"></a><span class="lineno">16805</span>&#160;VkResult VmaAllocator_T::AllocateDedicatedMemoryPage(</div>
-<div class="line"><a name="l16806"></a><span class="lineno">16806</span>&#160;    VkDeviceSize size,</div>
-<div class="line"><a name="l16807"></a><span class="lineno">16807</span>&#160;    VmaSuballocationType suballocType,</div>
-<div class="line"><a name="l16808"></a><span class="lineno">16808</span>&#160;    uint32_t memTypeIndex,</div>
-<div class="line"><a name="l16809"></a><span class="lineno">16809</span>&#160;    <span class="keyword">const</span> VkMemoryAllocateInfo&amp; allocInfo,</div>
-<div class="line"><a name="l16810"></a><span class="lineno">16810</span>&#160;    <span class="keywordtype">bool</span> map,</div>
-<div class="line"><a name="l16811"></a><span class="lineno">16811</span>&#160;    <span class="keywordtype">bool</span> isUserDataString,</div>
-<div class="line"><a name="l16812"></a><span class="lineno">16812</span>&#160;    <span class="keywordtype">void</span>* pUserData,</div>
-<div class="line"><a name="l16813"></a><span class="lineno">16813</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
-<div class="line"><a name="l16814"></a><span class="lineno">16814</span>&#160;{</div>
-<div class="line"><a name="l16815"></a><span class="lineno">16815</span>&#160;    VkDeviceMemory hMemory = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l16816"></a><span class="lineno">16816</span>&#160;    VkResult res = AllocateVulkanMemory(&amp;allocInfo, &amp;hMemory);</div>
-<div class="line"><a name="l16817"></a><span class="lineno">16817</span>&#160;    <span class="keywordflow">if</span>(res &lt; 0)</div>
-<div class="line"><a name="l16818"></a><span class="lineno">16818</span>&#160;    {</div>
-<div class="line"><a name="l16819"></a><span class="lineno">16819</span>&#160;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    vkAllocateMemory FAILED&quot;</span>);</div>
-<div class="line"><a name="l16820"></a><span class="lineno">16820</span>&#160;        <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l16821"></a><span class="lineno">16821</span>&#160;    }</div>
-<div class="line"><a name="l16822"></a><span class="lineno">16822</span>&#160; </div>
-<div class="line"><a name="l16823"></a><span class="lineno">16823</span>&#160;    <span class="keywordtype">void</span>* pMappedData = VMA_NULL;</div>
-<div class="line"><a name="l16824"></a><span class="lineno">16824</span>&#160;    <span class="keywordflow">if</span>(map)</div>
-<div class="line"><a name="l16825"></a><span class="lineno">16825</span>&#160;    {</div>
-<div class="line"><a name="l16826"></a><span class="lineno">16826</span>&#160;        res = (*m_VulkanFunctions.vkMapMemory)(</div>
-<div class="line"><a name="l16827"></a><span class="lineno">16827</span>&#160;            m_hDevice,</div>
-<div class="line"><a name="l16828"></a><span class="lineno">16828</span>&#160;            hMemory,</div>
-<div class="line"><a name="l16829"></a><span class="lineno">16829</span>&#160;            0,</div>
-<div class="line"><a name="l16830"></a><span class="lineno">16830</span>&#160;            VK_WHOLE_SIZE,</div>
-<div class="line"><a name="l16831"></a><span class="lineno">16831</span>&#160;            0,</div>
-<div class="line"><a name="l16832"></a><span class="lineno">16832</span>&#160;            &amp;pMappedData);</div>
-<div class="line"><a name="l16833"></a><span class="lineno">16833</span>&#160;        <span class="keywordflow">if</span>(res &lt; 0)</div>
-<div class="line"><a name="l16834"></a><span class="lineno">16834</span>&#160;        {</div>
-<div class="line"><a name="l16835"></a><span class="lineno">16835</span>&#160;            VMA_DEBUG_LOG(<span class="stringliteral">&quot;    vkMapMemory FAILED&quot;</span>);</div>
-<div class="line"><a name="l16836"></a><span class="lineno">16836</span>&#160;            FreeVulkanMemory(memTypeIndex, size, hMemory);</div>
-<div class="line"><a name="l16837"></a><span class="lineno">16837</span>&#160;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l16838"></a><span class="lineno">16838</span>&#160;        }</div>
-<div class="line"><a name="l16839"></a><span class="lineno">16839</span>&#160;    }</div>
-<div class="line"><a name="l16840"></a><span class="lineno">16840</span>&#160; </div>
-<div class="line"><a name="l16841"></a><span class="lineno">16841</span>&#160;    *pAllocation = m_AllocationObjectAllocator.Allocate(m_CurrentFrameIndex.load(), isUserDataString);</div>
-<div class="line"><a name="l16842"></a><span class="lineno">16842</span>&#160;    (*pAllocation)-&gt;InitDedicatedAllocation(memTypeIndex, hMemory, suballocType, pMappedData, size);</div>
-<div class="line"><a name="l16843"></a><span class="lineno">16843</span>&#160;    (*pAllocation)-&gt;SetUserData(<span class="keyword">this</span>, pUserData);</div>
-<div class="line"><a name="l16844"></a><span class="lineno">16844</span>&#160;    m_Budget.AddAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), size);</div>
-<div class="line"><a name="l16845"></a><span class="lineno">16845</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</div>
-<div class="line"><a name="l16846"></a><span class="lineno">16846</span>&#160;    {</div>
-<div class="line"><a name="l16847"></a><span class="lineno">16847</span>&#160;        FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);</div>
-<div class="line"><a name="l16848"></a><span class="lineno">16848</span>&#160;    }</div>
-<div class="line"><a name="l16849"></a><span class="lineno">16849</span>&#160; </div>
-<div class="line"><a name="l16850"></a><span class="lineno">16850</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l16851"></a><span class="lineno">16851</span>&#160;}</div>
-<div class="line"><a name="l16852"></a><span class="lineno">16852</span>&#160; </div>
-<div class="line"><a name="l16853"></a><span class="lineno">16853</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::GetBufferMemoryRequirements(</div>
-<div class="line"><a name="l16854"></a><span class="lineno">16854</span>&#160;    VkBuffer hBuffer,</div>
-<div class="line"><a name="l16855"></a><span class="lineno">16855</span>&#160;    VkMemoryRequirements&amp; memReq,</div>
-<div class="line"><a name="l16856"></a><span class="lineno">16856</span>&#160;    <span class="keywordtype">bool</span>&amp; requiresDedicatedAllocation,</div>
-<div class="line"><a name="l16857"></a><span class="lineno">16857</span>&#160;    <span class="keywordtype">bool</span>&amp; prefersDedicatedAllocation)<span class="keyword"> const</span></div>
-<div class="line"><a name="l16858"></a><span class="lineno">16858</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l16859"></a><span class="lineno">16859</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l16860"></a><span class="lineno">16860</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
-<div class="line"><a name="l16861"></a><span class="lineno">16861</span>&#160;    {</div>
-<div class="line"><a name="l16862"></a><span class="lineno">16862</span>&#160;        VkBufferMemoryRequirementsInfo2KHR memReqInfo = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR };</div>
-<div class="line"><a name="l16863"></a><span class="lineno">16863</span>&#160;        memReqInfo.buffer = hBuffer;</div>
-<div class="line"><a name="l16864"></a><span class="lineno">16864</span>&#160; </div>
-<div class="line"><a name="l16865"></a><span class="lineno">16865</span>&#160;        VkMemoryDedicatedRequirementsKHR memDedicatedReq = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR };</div>
-<div class="line"><a name="l16866"></a><span class="lineno">16866</span>&#160; </div>
-<div class="line"><a name="l16867"></a><span class="lineno">16867</span>&#160;        VkMemoryRequirements2KHR memReq2 = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR };</div>
-<div class="line"><a name="l16868"></a><span class="lineno">16868</span>&#160;        VmaPnextChainPushFront(&amp;memReq2, &amp;memDedicatedReq);</div>
-<div class="line"><a name="l16869"></a><span class="lineno">16869</span>&#160; </div>
-<div class="line"><a name="l16870"></a><span class="lineno">16870</span>&#160;        (*m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR)(m_hDevice, &amp;memReqInfo, &amp;memReq2);</div>
-<div class="line"><a name="l16871"></a><span class="lineno">16871</span>&#160; </div>
-<div class="line"><a name="l16872"></a><span class="lineno">16872</span>&#160;        memReq = memReq2.memoryRequirements;</div>
-<div class="line"><a name="l16873"></a><span class="lineno">16873</span>&#160;        requiresDedicatedAllocation = (memDedicatedReq.requiresDedicatedAllocation != VK_FALSE);</div>
-<div class="line"><a name="l16874"></a><span class="lineno">16874</span>&#160;        prefersDedicatedAllocation  = (memDedicatedReq.prefersDedicatedAllocation  != VK_FALSE);</div>
-<div class="line"><a name="l16875"></a><span class="lineno">16875</span>&#160;    }</div>
-<div class="line"><a name="l16876"></a><span class="lineno">16876</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l16877"></a><span class="lineno">16877</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l16878"></a><span class="lineno">16878</span>&#160;    {</div>
-<div class="line"><a name="l16879"></a><span class="lineno">16879</span>&#160;        (*m_VulkanFunctions.vkGetBufferMemoryRequirements)(m_hDevice, hBuffer, &amp;memReq);</div>
-<div class="line"><a name="l16880"></a><span class="lineno">16880</span>&#160;        requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l16881"></a><span class="lineno">16881</span>&#160;        prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l16882"></a><span class="lineno">16882</span>&#160;    }</div>
-<div class="line"><a name="l16883"></a><span class="lineno">16883</span>&#160;}</div>
-<div class="line"><a name="l16884"></a><span class="lineno">16884</span>&#160; </div>
-<div class="line"><a name="l16885"></a><span class="lineno">16885</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::GetImageMemoryRequirements(</div>
-<div class="line"><a name="l16886"></a><span class="lineno">16886</span>&#160;    VkImage hImage,</div>
-<div class="line"><a name="l16887"></a><span class="lineno">16887</span>&#160;    VkMemoryRequirements&amp; memReq,</div>
-<div class="line"><a name="l16888"></a><span class="lineno">16888</span>&#160;    <span class="keywordtype">bool</span>&amp; requiresDedicatedAllocation,</div>
-<div class="line"><a name="l16889"></a><span class="lineno">16889</span>&#160;    <span class="keywordtype">bool</span>&amp; prefersDedicatedAllocation)<span class="keyword"> const</span></div>
-<div class="line"><a name="l16890"></a><span class="lineno">16890</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l16891"></a><span class="lineno">16891</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l16892"></a><span class="lineno">16892</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
-<div class="line"><a name="l16893"></a><span class="lineno">16893</span>&#160;    {</div>
-<div class="line"><a name="l16894"></a><span class="lineno">16894</span>&#160;        VkImageMemoryRequirementsInfo2KHR memReqInfo = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR };</div>
-<div class="line"><a name="l16895"></a><span class="lineno">16895</span>&#160;        memReqInfo.image = hImage;</div>
-<div class="line"><a name="l16896"></a><span class="lineno">16896</span>&#160; </div>
-<div class="line"><a name="l16897"></a><span class="lineno">16897</span>&#160;        VkMemoryDedicatedRequirementsKHR memDedicatedReq = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR };</div>
-<div class="line"><a name="l16898"></a><span class="lineno">16898</span>&#160; </div>
-<div class="line"><a name="l16899"></a><span class="lineno">16899</span>&#160;        VkMemoryRequirements2KHR memReq2 = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR };</div>
-<div class="line"><a name="l16900"></a><span class="lineno">16900</span>&#160;        VmaPnextChainPushFront(&amp;memReq2, &amp;memDedicatedReq);</div>
-<div class="line"><a name="l16901"></a><span class="lineno">16901</span>&#160; </div>
-<div class="line"><a name="l16902"></a><span class="lineno">16902</span>&#160;        (*m_VulkanFunctions.vkGetImageMemoryRequirements2KHR)(m_hDevice, &amp;memReqInfo, &amp;memReq2);</div>
-<div class="line"><a name="l16903"></a><span class="lineno">16903</span>&#160; </div>
-<div class="line"><a name="l16904"></a><span class="lineno">16904</span>&#160;        memReq = memReq2.memoryRequirements;</div>
-<div class="line"><a name="l16905"></a><span class="lineno">16905</span>&#160;        requiresDedicatedAllocation = (memDedicatedReq.requiresDedicatedAllocation != VK_FALSE);</div>
-<div class="line"><a name="l16906"></a><span class="lineno">16906</span>&#160;        prefersDedicatedAllocation  = (memDedicatedReq.prefersDedicatedAllocation  != VK_FALSE);</div>
-<div class="line"><a name="l16907"></a><span class="lineno">16907</span>&#160;    }</div>
-<div class="line"><a name="l16908"></a><span class="lineno">16908</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l16909"></a><span class="lineno">16909</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l16910"></a><span class="lineno">16910</span>&#160;    {</div>
-<div class="line"><a name="l16911"></a><span class="lineno">16911</span>&#160;        (*m_VulkanFunctions.vkGetImageMemoryRequirements)(m_hDevice, hImage, &amp;memReq);</div>
-<div class="line"><a name="l16912"></a><span class="lineno">16912</span>&#160;        requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l16913"></a><span class="lineno">16913</span>&#160;        prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l16914"></a><span class="lineno">16914</span>&#160;    }</div>
-<div class="line"><a name="l16915"></a><span class="lineno">16915</span>&#160;}</div>
-<div class="line"><a name="l16916"></a><span class="lineno">16916</span>&#160; </div>
-<div class="line"><a name="l16917"></a><span class="lineno">16917</span>&#160;VkResult VmaAllocator_T::AllocateMemory(</div>
-<div class="line"><a name="l16918"></a><span class="lineno">16918</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
-<div class="line"><a name="l16919"></a><span class="lineno">16919</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation,</div>
-<div class="line"><a name="l16920"></a><span class="lineno">16920</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation,</div>
-<div class="line"><a name="l16921"></a><span class="lineno">16921</span>&#160;    VkBuffer dedicatedBuffer,</div>
-<div class="line"><a name="l16922"></a><span class="lineno">16922</span>&#160;    VkBufferUsageFlags dedicatedBufferUsage,</div>
-<div class="line"><a name="l16923"></a><span class="lineno">16923</span>&#160;    VkImage dedicatedImage,</div>
-<div class="line"><a name="l16924"></a><span class="lineno">16924</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
-<div class="line"><a name="l16925"></a><span class="lineno">16925</span>&#160;    VmaSuballocationType suballocType,</div>
-<div class="line"><a name="l16926"></a><span class="lineno">16926</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l16927"></a><span class="lineno">16927</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
-<div class="line"><a name="l16928"></a><span class="lineno">16928</span>&#160;{</div>
-<div class="line"><a name="l16929"></a><span class="lineno">16929</span>&#160;    memset(pAllocations, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a>) * allocationCount);</div>
-<div class="line"><a name="l16930"></a><span class="lineno">16930</span>&#160; </div>
-<div class="line"><a name="l16931"></a><span class="lineno">16931</span>&#160;    VMA_ASSERT(VmaIsPow2(vkMemReq.alignment));</div>
-<div class="line"><a name="l16932"></a><span class="lineno">16932</span>&#160; </div>
-<div class="line"><a name="l16933"></a><span class="lineno">16933</span>&#160;    <span class="keywordflow">if</span>(vkMemReq.size == 0)</div>
-<div class="line"><a name="l16934"></a><span class="lineno">16934</span>&#160;    {</div>
-<div class="line"><a name="l16935"></a><span class="lineno">16935</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
-<div class="line"><a name="l16936"></a><span class="lineno">16936</span>&#160;    }</div>
-<div class="line"><a name="l16937"></a><span class="lineno">16937</span>&#160;    <span class="keywordflow">if</span>((createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>) != 0 &amp;&amp;</div>
-<div class="line"><a name="l16938"></a><span class="lineno">16938</span>&#160;        (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a>) != 0)</div>
-<div class="line"><a name="l16939"></a><span class="lineno">16939</span>&#160;    {</div>
-<div class="line"><a name="l16940"></a><span class="lineno">16940</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT together with VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT makes no sense.&quot;</span>);</div>
-<div class="line"><a name="l16941"></a><span class="lineno">16941</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l16942"></a><span class="lineno">16942</span>&#160;    }</div>
-<div class="line"><a name="l16943"></a><span class="lineno">16943</span>&#160;    <span class="keywordflow">if</span>((createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0 &amp;&amp;</div>
-<div class="line"><a name="l16944"></a><span class="lineno">16944</span>&#160;        (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2">VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</a>) != 0)</div>
-<div class="line"><a name="l16945"></a><span class="lineno">16945</span>&#160;    {</div>
-<div class="line"><a name="l16946"></a><span class="lineno">16946</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Specifying VMA_ALLOCATION_CREATE_MAPPED_BIT together with VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT is invalid.&quot;</span>);</div>
-<div class="line"><a name="l16947"></a><span class="lineno">16947</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l16948"></a><span class="lineno">16948</span>&#160;    }</div>
-<div class="line"><a name="l16949"></a><span class="lineno">16949</span>&#160;    <span class="keywordflow">if</span>(requiresDedicatedAllocation)</div>
-<div class="line"><a name="l16950"></a><span class="lineno">16950</span>&#160;    {</div>
-<div class="line"><a name="l16951"></a><span class="lineno">16951</span>&#160;        <span class="keywordflow">if</span>((createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a>) != 0)</div>
-<div class="line"><a name="l16952"></a><span class="lineno">16952</span>&#160;        {</div>
-<div class="line"><a name="l16953"></a><span class="lineno">16953</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT specified while dedicated allocation is required.&quot;</span>);</div>
-<div class="line"><a name="l16954"></a><span class="lineno">16954</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l16955"></a><span class="lineno">16955</span>&#160;        }</div>
-<div class="line"><a name="l16956"></a><span class="lineno">16956</span>&#160;        <span class="keywordflow">if</span>(createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a> != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l16957"></a><span class="lineno">16957</span>&#160;        {</div>
-<div class="line"><a name="l16958"></a><span class="lineno">16958</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Pool specified while dedicated allocation is required.&quot;</span>);</div>
-<div class="line"><a name="l16959"></a><span class="lineno">16959</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l16960"></a><span class="lineno">16960</span>&#160;        }</div>
-<div class="line"><a name="l16961"></a><span class="lineno">16961</span>&#160;    }</div>
-<div class="line"><a name="l16962"></a><span class="lineno">16962</span>&#160;    <span class="keywordflow">if</span>((createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a> != VK_NULL_HANDLE) &amp;&amp;</div>
-<div class="line"><a name="l16963"></a><span class="lineno">16963</span>&#160;        ((createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; (<a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>)) != 0))</div>
-<div class="line"><a name="l16964"></a><span class="lineno">16964</span>&#160;    {</div>
-<div class="line"><a name="l16965"></a><span class="lineno">16965</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT when pool != null is invalid.&quot;</span>);</div>
-<div class="line"><a name="l16966"></a><span class="lineno">16966</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l16967"></a><span class="lineno">16967</span>&#160;    }</div>
-<div class="line"><a name="l16968"></a><span class="lineno">16968</span>&#160; </div>
-<div class="line"><a name="l16969"></a><span class="lineno">16969</span>&#160;    <span class="keywordflow">if</span>(createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a> != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l16970"></a><span class="lineno">16970</span>&#160;    {</div>
-<div class="line"><a name="l16971"></a><span class="lineno">16971</span>&#160;        <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> createInfoForPool = createInfo;</div>
-<div class="line"><a name="l16972"></a><span class="lineno">16972</span>&#160;        <span class="comment">// If memory type is not HOST_VISIBLE, disable MAPPED.</span></div>
-<div class="line"><a name="l16973"></a><span class="lineno">16973</span>&#160;        <span class="keywordflow">if</span>((createInfoForPool.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0 &amp;&amp;</div>
-<div class="line"><a name="l16974"></a><span class="lineno">16974</span>&#160;            (m_MemProps.memoryTypes[createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>-&gt;m_BlockVector.GetMemoryTypeIndex()].propertyFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)</div>
-<div class="line"><a name="l16975"></a><span class="lineno">16975</span>&#160;        {</div>
-<div class="line"><a name="l16976"></a><span class="lineno">16976</span>&#160;            createInfoForPool.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp;= ~<a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>;</div>
-<div class="line"><a name="l16977"></a><span class="lineno">16977</span>&#160;        }</div>
-<div class="line"><a name="l16978"></a><span class="lineno">16978</span>&#160; </div>
-<div class="line"><a name="l16979"></a><span class="lineno">16979</span>&#160;        <span class="keywordflow">return</span> createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>-&gt;m_BlockVector.Allocate(</div>
-<div class="line"><a name="l16980"></a><span class="lineno">16980</span>&#160;            m_CurrentFrameIndex.load(),</div>
-<div class="line"><a name="l16981"></a><span class="lineno">16981</span>&#160;            vkMemReq.size,</div>
-<div class="line"><a name="l16982"></a><span class="lineno">16982</span>&#160;            vkMemReq.alignment,</div>
-<div class="line"><a name="l16983"></a><span class="lineno">16983</span>&#160;            createInfoForPool,</div>
-<div class="line"><a name="l16984"></a><span class="lineno">16984</span>&#160;            suballocType,</div>
-<div class="line"><a name="l16985"></a><span class="lineno">16985</span>&#160;            allocationCount,</div>
-<div class="line"><a name="l16986"></a><span class="lineno">16986</span>&#160;            pAllocations);</div>
-<div class="line"><a name="l16987"></a><span class="lineno">16987</span>&#160;    }</div>
-<div class="line"><a name="l16988"></a><span class="lineno">16988</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l16989"></a><span class="lineno">16989</span>&#160;    {</div>
-<div class="line"><a name="l16990"></a><span class="lineno">16990</span>&#160;        <span class="comment">// Bit mask of memory Vulkan types acceptable for this allocation.</span></div>
-<div class="line"><a name="l16991"></a><span class="lineno">16991</span>&#160;        uint32_t memoryTypeBits = vkMemReq.memoryTypeBits;</div>
-<div class="line"><a name="l16992"></a><span class="lineno">16992</span>&#160;        uint32_t memTypeIndex = UINT32_MAX;</div>
-<div class="line"><a name="l16993"></a><span class="lineno">16993</span>&#160;        VkResult res = <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(<span class="keyword">this</span>, memoryTypeBits, &amp;createInfo, &amp;memTypeIndex);</div>
-<div class="line"><a name="l16994"></a><span class="lineno">16994</span>&#160;        <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l16995"></a><span class="lineno">16995</span>&#160;        {</div>
-<div class="line"><a name="l16996"></a><span class="lineno">16996</span>&#160;            res = AllocateMemoryOfType(</div>
-<div class="line"><a name="l16997"></a><span class="lineno">16997</span>&#160;                vkMemReq.size,</div>
-<div class="line"><a name="l16998"></a><span class="lineno">16998</span>&#160;                vkMemReq.alignment,</div>
-<div class="line"><a name="l16999"></a><span class="lineno">16999</span>&#160;                requiresDedicatedAllocation || prefersDedicatedAllocation,</div>
-<div class="line"><a name="l17000"></a><span class="lineno">17000</span>&#160;                dedicatedBuffer,</div>
-<div class="line"><a name="l17001"></a><span class="lineno">17001</span>&#160;                dedicatedBufferUsage,</div>
-<div class="line"><a name="l17002"></a><span class="lineno">17002</span>&#160;                dedicatedImage,</div>
-<div class="line"><a name="l17003"></a><span class="lineno">17003</span>&#160;                createInfo,</div>
-<div class="line"><a name="l17004"></a><span class="lineno">17004</span>&#160;                memTypeIndex,</div>
-<div class="line"><a name="l17005"></a><span class="lineno">17005</span>&#160;                suballocType,</div>
-<div class="line"><a name="l17006"></a><span class="lineno">17006</span>&#160;                allocationCount,</div>
-<div class="line"><a name="l17007"></a><span class="lineno">17007</span>&#160;                pAllocations);</div>
-<div class="line"><a name="l17008"></a><span class="lineno">17008</span>&#160;            <span class="comment">// Succeeded on first try.</span></div>
-<div class="line"><a name="l17009"></a><span class="lineno">17009</span>&#160;            <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l17010"></a><span class="lineno">17010</span>&#160;            {</div>
-<div class="line"><a name="l17011"></a><span class="lineno">17011</span>&#160;                <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l17012"></a><span class="lineno">17012</span>&#160;            }</div>
-<div class="line"><a name="l17013"></a><span class="lineno">17013</span>&#160;            <span class="comment">// Allocation from this memory type failed. Try other compatible memory types.</span></div>
-<div class="line"><a name="l17014"></a><span class="lineno">17014</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17015"></a><span class="lineno">17015</span>&#160;            {</div>
-<div class="line"><a name="l17016"></a><span class="lineno">17016</span>&#160;                <span class="keywordflow">for</span>(;;)</div>
-<div class="line"><a name="l17017"></a><span class="lineno">17017</span>&#160;                {</div>
-<div class="line"><a name="l17018"></a><span class="lineno">17018</span>&#160;                    <span class="comment">// Remove old memTypeIndex from list of possibilities.</span></div>
-<div class="line"><a name="l17019"></a><span class="lineno">17019</span>&#160;                    memoryTypeBits &amp;= ~(1u &lt;&lt; memTypeIndex);</div>
-<div class="line"><a name="l17020"></a><span class="lineno">17020</span>&#160;                    <span class="comment">// Find alternative memTypeIndex.</span></div>
-<div class="line"><a name="l17021"></a><span class="lineno">17021</span>&#160;                    res = <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(<span class="keyword">this</span>, memoryTypeBits, &amp;createInfo, &amp;memTypeIndex);</div>
-<div class="line"><a name="l17022"></a><span class="lineno">17022</span>&#160;                    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l17023"></a><span class="lineno">17023</span>&#160;                    {</div>
-<div class="line"><a name="l17024"></a><span class="lineno">17024</span>&#160;                        res = AllocateMemoryOfType(</div>
-<div class="line"><a name="l17025"></a><span class="lineno">17025</span>&#160;                            vkMemReq.size,</div>
-<div class="line"><a name="l17026"></a><span class="lineno">17026</span>&#160;                            vkMemReq.alignment,</div>
-<div class="line"><a name="l17027"></a><span class="lineno">17027</span>&#160;                            requiresDedicatedAllocation || prefersDedicatedAllocation,</div>
-<div class="line"><a name="l17028"></a><span class="lineno">17028</span>&#160;                            dedicatedBuffer,</div>
-<div class="line"><a name="l17029"></a><span class="lineno">17029</span>&#160;                            dedicatedBufferUsage,</div>
-<div class="line"><a name="l17030"></a><span class="lineno">17030</span>&#160;                            dedicatedImage,</div>
-<div class="line"><a name="l17031"></a><span class="lineno">17031</span>&#160;                            createInfo,</div>
-<div class="line"><a name="l17032"></a><span class="lineno">17032</span>&#160;                            memTypeIndex,</div>
-<div class="line"><a name="l17033"></a><span class="lineno">17033</span>&#160;                            suballocType,</div>
-<div class="line"><a name="l17034"></a><span class="lineno">17034</span>&#160;                            allocationCount,</div>
-<div class="line"><a name="l17035"></a><span class="lineno">17035</span>&#160;                            pAllocations);</div>
-<div class="line"><a name="l17036"></a><span class="lineno">17036</span>&#160;                        <span class="comment">// Allocation from this alternative memory type succeeded.</span></div>
-<div class="line"><a name="l17037"></a><span class="lineno">17037</span>&#160;                        <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l17038"></a><span class="lineno">17038</span>&#160;                        {</div>
-<div class="line"><a name="l17039"></a><span class="lineno">17039</span>&#160;                            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l17040"></a><span class="lineno">17040</span>&#160;                        }</div>
-<div class="line"><a name="l17041"></a><span class="lineno">17041</span>&#160;                        <span class="comment">// else: Allocation from this memory type failed. Try next one - next loop iteration.</span></div>
-<div class="line"><a name="l17042"></a><span class="lineno">17042</span>&#160;                    }</div>
-<div class="line"><a name="l17043"></a><span class="lineno">17043</span>&#160;                    <span class="comment">// No other matching memory type index could be found.</span></div>
-<div class="line"><a name="l17044"></a><span class="lineno">17044</span>&#160;                    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17045"></a><span class="lineno">17045</span>&#160;                    {</div>
-<div class="line"><a name="l17046"></a><span class="lineno">17046</span>&#160;                        <span class="comment">// Not returning res, which is VK_ERROR_FEATURE_NOT_PRESENT, because we already failed to allocate once.</span></div>
-<div class="line"><a name="l17047"></a><span class="lineno">17047</span>&#160;                        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l17048"></a><span class="lineno">17048</span>&#160;                    }</div>
-<div class="line"><a name="l17049"></a><span class="lineno">17049</span>&#160;                }</div>
-<div class="line"><a name="l17050"></a><span class="lineno">17050</span>&#160;            }</div>
-<div class="line"><a name="l17051"></a><span class="lineno">17051</span>&#160;        }</div>
-<div class="line"><a name="l17052"></a><span class="lineno">17052</span>&#160;        <span class="comment">// Can&#39;t find any single memory type maching requirements. res is VK_ERROR_FEATURE_NOT_PRESENT.</span></div>
-<div class="line"><a name="l17053"></a><span class="lineno">17053</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17054"></a><span class="lineno">17054</span>&#160;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l17055"></a><span class="lineno">17055</span>&#160;    }</div>
-<div class="line"><a name="l17056"></a><span class="lineno">17056</span>&#160;}</div>
-<div class="line"><a name="l17057"></a><span class="lineno">17057</span>&#160; </div>
-<div class="line"><a name="l17058"></a><span class="lineno">17058</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::FreeMemory(</div>
-<div class="line"><a name="l17059"></a><span class="lineno">17059</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l17060"></a><span class="lineno">17060</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
-<div class="line"><a name="l17061"></a><span class="lineno">17061</span>&#160;{</div>
-<div class="line"><a name="l17062"></a><span class="lineno">17062</span>&#160;    VMA_ASSERT(pAllocations);</div>
-<div class="line"><a name="l17063"></a><span class="lineno">17063</span>&#160; </div>
-<div class="line"><a name="l17064"></a><span class="lineno">17064</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> allocIndex = allocationCount; allocIndex--; )</div>
-<div class="line"><a name="l17065"></a><span class="lineno">17065</span>&#160;    {</div>
-<div class="line"><a name="l17066"></a><span class="lineno">17066</span>&#160;        <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation = pAllocations[allocIndex];</div>
-<div class="line"><a name="l17067"></a><span class="lineno">17067</span>&#160; </div>
-<div class="line"><a name="l17068"></a><span class="lineno">17068</span>&#160;        <span class="keywordflow">if</span>(allocation != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l17069"></a><span class="lineno">17069</span>&#160;        {</div>
-<div class="line"><a name="l17070"></a><span class="lineno">17070</span>&#160;            <span class="keywordflow">if</span>(TouchAllocation(allocation))</div>
-<div class="line"><a name="l17071"></a><span class="lineno">17071</span>&#160;            {</div>
-<div class="line"><a name="l17072"></a><span class="lineno">17072</span>&#160;                <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</div>
-<div class="line"><a name="l17073"></a><span class="lineno">17073</span>&#160;                {</div>
-<div class="line"><a name="l17074"></a><span class="lineno">17074</span>&#160;                    FillAllocation(allocation, VMA_ALLOCATION_FILL_PATTERN_DESTROYED);</div>
-<div class="line"><a name="l17075"></a><span class="lineno">17075</span>&#160;                }</div>
-<div class="line"><a name="l17076"></a><span class="lineno">17076</span>&#160; </div>
-<div class="line"><a name="l17077"></a><span class="lineno">17077</span>&#160;                <span class="keywordflow">switch</span>(allocation-&gt;GetType())</div>
-<div class="line"><a name="l17078"></a><span class="lineno">17078</span>&#160;                {</div>
-<div class="line"><a name="l17079"></a><span class="lineno">17079</span>&#160;                <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
-<div class="line"><a name="l17080"></a><span class="lineno">17080</span>&#160;                    {</div>
-<div class="line"><a name="l17081"></a><span class="lineno">17081</span>&#160;                        VmaBlockVector* pBlockVector = VMA_NULL;</div>
-<div class="line"><a name="l17082"></a><span class="lineno">17082</span>&#160;                        <a class="code" href="struct_vma_pool.html">VmaPool</a> hPool = allocation-&gt;GetBlock()-&gt;GetParentPool();</div>
-<div class="line"><a name="l17083"></a><span class="lineno">17083</span>&#160;                        <span class="keywordflow">if</span>(hPool != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l17084"></a><span class="lineno">17084</span>&#160;                        {</div>
-<div class="line"><a name="l17085"></a><span class="lineno">17085</span>&#160;                            pBlockVector = &amp;hPool-&gt;m_BlockVector;</div>
-<div class="line"><a name="l17086"></a><span class="lineno">17086</span>&#160;                        }</div>
-<div class="line"><a name="l17087"></a><span class="lineno">17087</span>&#160;                        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17088"></a><span class="lineno">17088</span>&#160;                        {</div>
-<div class="line"><a name="l17089"></a><span class="lineno">17089</span>&#160;                            <span class="keyword">const</span> uint32_t memTypeIndex = allocation-&gt;GetMemoryTypeIndex();</div>
-<div class="line"><a name="l17090"></a><span class="lineno">17090</span>&#160;                            pBlockVector = m_pBlockVectors[memTypeIndex];</div>
-<div class="line"><a name="l17091"></a><span class="lineno">17091</span>&#160;                        }</div>
-<div class="line"><a name="l17092"></a><span class="lineno">17092</span>&#160;                        pBlockVector-&gt;Free(allocation);</div>
-<div class="line"><a name="l17093"></a><span class="lineno">17093</span>&#160;                    }</div>
-<div class="line"><a name="l17094"></a><span class="lineno">17094</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17095"></a><span class="lineno">17095</span>&#160;                <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
-<div class="line"><a name="l17096"></a><span class="lineno">17096</span>&#160;                    FreeDedicatedMemory(allocation);</div>
-<div class="line"><a name="l17097"></a><span class="lineno">17097</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17098"></a><span class="lineno">17098</span>&#160;                <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l17099"></a><span class="lineno">17099</span>&#160;                    VMA_ASSERT(0);</div>
-<div class="line"><a name="l17100"></a><span class="lineno">17100</span>&#160;                }</div>
-<div class="line"><a name="l17101"></a><span class="lineno">17101</span>&#160;            }</div>
-<div class="line"><a name="l17102"></a><span class="lineno">17102</span>&#160; </div>
-<div class="line"><a name="l17103"></a><span class="lineno">17103</span>&#160;            <span class="comment">// Do this regardless of whether the allocation is lost. Lost allocations still account to Budget.AllocationBytes.</span></div>
-<div class="line"><a name="l17104"></a><span class="lineno">17104</span>&#160;            m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(allocation-&gt;GetMemoryTypeIndex()), allocation-&gt;GetSize());</div>
-<div class="line"><a name="l17105"></a><span class="lineno">17105</span>&#160;            allocation-&gt;SetUserData(<span class="keyword">this</span>, VMA_NULL);</div>
-<div class="line"><a name="l17106"></a><span class="lineno">17106</span>&#160;            m_AllocationObjectAllocator.Free(allocation);</div>
-<div class="line"><a name="l17107"></a><span class="lineno">17107</span>&#160;        }</div>
-<div class="line"><a name="l17108"></a><span class="lineno">17108</span>&#160;    }</div>
-<div class="line"><a name="l17109"></a><span class="lineno">17109</span>&#160;}</div>
-<div class="line"><a name="l17110"></a><span class="lineno">17110</span>&#160; </div>
-<div class="line"><a name="l17111"></a><span class="lineno">17111</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::CalculateStats(<a class="code" href="struct_vma_stats.html">VmaStats</a>* pStats)</div>
-<div class="line"><a name="l17112"></a><span class="lineno">17112</span>&#160;{</div>
-<div class="line"><a name="l17113"></a><span class="lineno">17113</span>&#160;    <span class="comment">// Initialize.</span></div>
-<div class="line"><a name="l17114"></a><span class="lineno">17114</span>&#160;    InitStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>);</div>
-<div class="line"><a name="l17115"></a><span class="lineno">17115</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; VK_MAX_MEMORY_TYPES; ++i)</div>
-<div class="line"><a name="l17116"></a><span class="lineno">17116</span>&#160;        InitStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[i]);</div>
-<div class="line"><a name="l17117"></a><span class="lineno">17117</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; VK_MAX_MEMORY_HEAPS; ++i)</div>
-<div class="line"><a name="l17118"></a><span class="lineno">17118</span>&#160;        InitStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[i]);</div>
-<div class="line"><a name="l17119"></a><span class="lineno">17119</span>&#160; </div>
-<div class="line"><a name="l17120"></a><span class="lineno">17120</span>&#160;    <span class="comment">// Process default pools.</span></div>
-<div class="line"><a name="l17121"></a><span class="lineno">17121</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
-<div class="line"><a name="l17122"></a><span class="lineno">17122</span>&#160;    {</div>
-<div class="line"><a name="l17123"></a><span class="lineno">17123</span>&#160;        VmaBlockVector* <span class="keyword">const</span> pBlockVector = m_pBlockVectors[memTypeIndex];</div>
-<div class="line"><a name="l17124"></a><span class="lineno">17124</span>&#160;        VMA_ASSERT(pBlockVector);</div>
-<div class="line"><a name="l17125"></a><span class="lineno">17125</span>&#160;        pBlockVector-&gt;AddStats(pStats);</div>
-<div class="line"><a name="l17126"></a><span class="lineno">17126</span>&#160;    }</div>
-<div class="line"><a name="l17127"></a><span class="lineno">17127</span>&#160; </div>
-<div class="line"><a name="l17128"></a><span class="lineno">17128</span>&#160;    <span class="comment">// Process custom pools.</span></div>
-<div class="line"><a name="l17129"></a><span class="lineno">17129</span>&#160;    {</div>
-<div class="line"><a name="l17130"></a><span class="lineno">17130</span>&#160;        VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);</div>
-<div class="line"><a name="l17131"></a><span class="lineno">17131</span>&#160;        <span class="keywordflow">for</span>(<a class="code" href="struct_vma_pool.html">VmaPool</a> pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool))</div>
-<div class="line"><a name="l17132"></a><span class="lineno">17132</span>&#160;        {</div>
-<div class="line"><a name="l17133"></a><span class="lineno">17133</span>&#160;            pool-&gt;m_BlockVector.AddStats(pStats);</div>
-<div class="line"><a name="l17134"></a><span class="lineno">17134</span>&#160;        }</div>
-<div class="line"><a name="l17135"></a><span class="lineno">17135</span>&#160;    }</div>
-<div class="line"><a name="l17136"></a><span class="lineno">17136</span>&#160; </div>
-<div class="line"><a name="l17137"></a><span class="lineno">17137</span>&#160;    <span class="comment">// Process dedicated allocations.</span></div>
-<div class="line"><a name="l17138"></a><span class="lineno">17138</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
-<div class="line"><a name="l17139"></a><span class="lineno">17139</span>&#160;    {</div>
-<div class="line"><a name="l17140"></a><span class="lineno">17140</span>&#160;        <span class="keyword">const</span> uint32_t memHeapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
-<div class="line"><a name="l17141"></a><span class="lineno">17141</span>&#160;        VmaMutexLockRead dedicatedAllocationsLock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
-<div class="line"><a name="l17142"></a><span class="lineno">17142</span>&#160;        DedicatedAllocationLinkedList&amp; dedicatedAllocList = m_DedicatedAllocations[memTypeIndex];</div>
-<div class="line"><a name="l17143"></a><span class="lineno">17143</span>&#160;        <span class="keywordflow">for</span>(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> alloc = dedicatedAllocList.Front();</div>
-<div class="line"><a name="l17144"></a><span class="lineno">17144</span>&#160;            alloc != VMA_NULL; alloc = dedicatedAllocList.GetNext(alloc))</div>
-<div class="line"><a name="l17145"></a><span class="lineno">17145</span>&#160;        {</div>
-<div class="line"><a name="l17146"></a><span class="lineno">17146</span>&#160;            <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> allocationStatInfo;</div>
-<div class="line"><a name="l17147"></a><span class="lineno">17147</span>&#160;            alloc-&gt;DedicatedAllocCalcStatsInfo(allocationStatInfo);</div>
-<div class="line"><a name="l17148"></a><span class="lineno">17148</span>&#160;            VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>, allocationStatInfo);</div>
-<div class="line"><a name="l17149"></a><span class="lineno">17149</span>&#160;            VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[memTypeIndex], allocationStatInfo);</div>
-<div class="line"><a name="l17150"></a><span class="lineno">17150</span>&#160;            VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[memHeapIndex], allocationStatInfo);</div>
-<div class="line"><a name="l17151"></a><span class="lineno">17151</span>&#160;        }</div>
-<div class="line"><a name="l17152"></a><span class="lineno">17152</span>&#160;    }</div>
-<div class="line"><a name="l17153"></a><span class="lineno">17153</span>&#160; </div>
-<div class="line"><a name="l17154"></a><span class="lineno">17154</span>&#160;    <span class="comment">// Postprocess.</span></div>
-<div class="line"><a name="l17155"></a><span class="lineno">17155</span>&#160;    VmaPostprocessCalcStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>);</div>
-<div class="line"><a name="l17156"></a><span class="lineno">17156</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; GetMemoryTypeCount(); ++i)</div>
-<div class="line"><a name="l17157"></a><span class="lineno">17157</span>&#160;        VmaPostprocessCalcStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[i]);</div>
-<div class="line"><a name="l17158"></a><span class="lineno">17158</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; GetMemoryHeapCount(); ++i)</div>
-<div class="line"><a name="l17159"></a><span class="lineno">17159</span>&#160;        VmaPostprocessCalcStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[i]);</div>
-<div class="line"><a name="l17160"></a><span class="lineno">17160</span>&#160;}</div>
-<div class="line"><a name="l17161"></a><span class="lineno">17161</span>&#160; </div>
-<div class="line"><a name="l17162"></a><span class="lineno">17162</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::GetBudget(<a class="code" href="struct_vma_budget.html">VmaBudget</a>* outBudget, uint32_t firstHeap, uint32_t heapCount)</div>
-<div class="line"><a name="l17163"></a><span class="lineno">17163</span>&#160;{</div>
-<div class="line"><a name="l17164"></a><span class="lineno">17164</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l17165"></a><span class="lineno">17165</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget)</div>
-<div class="line"><a name="l17166"></a><span class="lineno">17166</span>&#160;    {</div>
-<div class="line"><a name="l17167"></a><span class="lineno">17167</span>&#160;        <span class="keywordflow">if</span>(m_Budget.m_OperationsSinceBudgetFetch &lt; 30)</div>
-<div class="line"><a name="l17168"></a><span class="lineno">17168</span>&#160;        {</div>
-<div class="line"><a name="l17169"></a><span class="lineno">17169</span>&#160;            VmaMutexLockRead lockRead(m_Budget.m_BudgetMutex, m_UseMutex);</div>
-<div class="line"><a name="l17170"></a><span class="lineno">17170</span>&#160;            <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; heapCount; ++i, ++outBudget)</div>
-<div class="line"><a name="l17171"></a><span class="lineno">17171</span>&#160;            {</div>
-<div class="line"><a name="l17172"></a><span class="lineno">17172</span>&#160;                <span class="keyword">const</span> uint32_t heapIndex = firstHeap + i;</div>
-<div class="line"><a name="l17173"></a><span class="lineno">17173</span>&#160; </div>
-<div class="line"><a name="l17174"></a><span class="lineno">17174</span>&#160;                outBudget-&gt;<a class="code" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">blockBytes</a> = m_Budget.m_BlockBytes[heapIndex];</div>
-<div class="line"><a name="l17175"></a><span class="lineno">17175</span>&#160;                outBudget-&gt;<a class="code" href="struct_vma_budget.html#a7e2a6583ebd63e194951c542563804d8">allocationBytes</a> = m_Budget.m_AllocationBytes[heapIndex];</div>
-<div class="line"><a name="l17176"></a><span class="lineno">17176</span>&#160; </div>
-<div class="line"><a name="l17177"></a><span class="lineno">17177</span>&#160;                <span class="keywordflow">if</span>(m_Budget.m_VulkanUsage[heapIndex] + outBudget-&gt;<a class="code" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">blockBytes</a> &gt; m_Budget.m_BlockBytesAtBudgetFetch[heapIndex])</div>
-<div class="line"><a name="l17178"></a><span class="lineno">17178</span>&#160;                {</div>
-<div class="line"><a name="l17179"></a><span class="lineno">17179</span>&#160;                    outBudget-&gt;<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a> = m_Budget.m_VulkanUsage[heapIndex] +</div>
-<div class="line"><a name="l17180"></a><span class="lineno">17180</span>&#160;                        outBudget-&gt;<a class="code" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">blockBytes</a> - m_Budget.m_BlockBytesAtBudgetFetch[heapIndex];</div>
-<div class="line"><a name="l17181"></a><span class="lineno">17181</span>&#160;                }</div>
-<div class="line"><a name="l17182"></a><span class="lineno">17182</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17183"></a><span class="lineno">17183</span>&#160;                {</div>
-<div class="line"><a name="l17184"></a><span class="lineno">17184</span>&#160;                    outBudget-&gt;<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a> = 0;</div>
-<div class="line"><a name="l17185"></a><span class="lineno">17185</span>&#160;                }</div>
-<div class="line"><a name="l17186"></a><span class="lineno">17186</span>&#160; </div>
-<div class="line"><a name="l17187"></a><span class="lineno">17187</span>&#160;                <span class="comment">// Have to take MIN with heap size because explicit HeapSizeLimit is included in it.</span></div>
-<div class="line"><a name="l17188"></a><span class="lineno">17188</span>&#160;                outBudget-&gt;<a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a> = VMA_MIN(</div>
-<div class="line"><a name="l17189"></a><span class="lineno">17189</span>&#160;                    m_Budget.m_VulkanBudget[heapIndex], m_MemProps.memoryHeaps[heapIndex].size);</div>
-<div class="line"><a name="l17190"></a><span class="lineno">17190</span>&#160;            }</div>
-<div class="line"><a name="l17191"></a><span class="lineno">17191</span>&#160;        }</div>
-<div class="line"><a name="l17192"></a><span class="lineno">17192</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17193"></a><span class="lineno">17193</span>&#160;        {</div>
-<div class="line"><a name="l17194"></a><span class="lineno">17194</span>&#160;            UpdateVulkanBudget(); <span class="comment">// Outside of mutex lock</span></div>
-<div class="line"><a name="l17195"></a><span class="lineno">17195</span>&#160;            GetBudget(outBudget, firstHeap, heapCount); <span class="comment">// Recursion</span></div>
-<div class="line"><a name="l17196"></a><span class="lineno">17196</span>&#160;        }</div>
-<div class="line"><a name="l17197"></a><span class="lineno">17197</span>&#160;    }</div>
-<div class="line"><a name="l17198"></a><span class="lineno">17198</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17199"></a><span class="lineno">17199</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l17200"></a><span class="lineno">17200</span>&#160;    {</div>
-<div class="line"><a name="l17201"></a><span class="lineno">17201</span>&#160;        <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; heapCount; ++i, ++outBudget)</div>
-<div class="line"><a name="l17202"></a><span class="lineno">17202</span>&#160;        {</div>
-<div class="line"><a name="l17203"></a><span class="lineno">17203</span>&#160;            <span class="keyword">const</span> uint32_t heapIndex = firstHeap + i;</div>
-<div class="line"><a name="l17204"></a><span class="lineno">17204</span>&#160; </div>
-<div class="line"><a name="l17205"></a><span class="lineno">17205</span>&#160;            outBudget-&gt;<a class="code" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">blockBytes</a> = m_Budget.m_BlockBytes[heapIndex];</div>
-<div class="line"><a name="l17206"></a><span class="lineno">17206</span>&#160;            outBudget-&gt;<a class="code" href="struct_vma_budget.html#a7e2a6583ebd63e194951c542563804d8">allocationBytes</a> = m_Budget.m_AllocationBytes[heapIndex];</div>
-<div class="line"><a name="l17207"></a><span class="lineno">17207</span>&#160; </div>
-<div class="line"><a name="l17208"></a><span class="lineno">17208</span>&#160;            outBudget-&gt;<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a> = outBudget-&gt;<a class="code" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">blockBytes</a>;</div>
-<div class="line"><a name="l17209"></a><span class="lineno">17209</span>&#160;            outBudget-&gt;<a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a> = m_MemProps.memoryHeaps[heapIndex].size * 8 / 10; <span class="comment">// 80% heuristics.</span></div>
-<div class="line"><a name="l17210"></a><span class="lineno">17210</span>&#160;        }</div>
-<div class="line"><a name="l17211"></a><span class="lineno">17211</span>&#160;    }</div>
-<div class="line"><a name="l17212"></a><span class="lineno">17212</span>&#160;}</div>
-<div class="line"><a name="l17213"></a><span class="lineno">17213</span>&#160; </div>
-<div class="line"><a name="l17214"></a><span class="lineno">17214</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> uint32_t VMA_VENDOR_ID_AMD = 4098;</div>
-<div class="line"><a name="l17215"></a><span class="lineno">17215</span>&#160; </div>
-<div class="line"><a name="l17216"></a><span class="lineno">17216</span>&#160;VkResult VmaAllocator_T::DefragmentationBegin(</div>
-<div class="line"><a name="l17217"></a><span class="lineno">17217</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a>&amp; info,</div>
-<div class="line"><a name="l17218"></a><span class="lineno">17218</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats,</div>
-<div class="line"><a name="l17219"></a><span class="lineno">17219</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a>* pContext)</div>
-<div class="line"><a name="l17220"></a><span class="lineno">17220</span>&#160;{</div>
-<div class="line"><a name="l17221"></a><span class="lineno">17221</span>&#160;    <span class="keywordflow">if</span>(info.<a class="code" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">pAllocationsChanged</a> != VMA_NULL)</div>
-<div class="line"><a name="l17222"></a><span class="lineno">17222</span>&#160;    {</div>
-<div class="line"><a name="l17223"></a><span class="lineno">17223</span>&#160;        memset(info.<a class="code" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">pAllocationsChanged</a>, 0, info.<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a> * <span class="keyword">sizeof</span>(VkBool32));</div>
-<div class="line"><a name="l17224"></a><span class="lineno">17224</span>&#160;    }</div>
-<div class="line"><a name="l17225"></a><span class="lineno">17225</span>&#160; </div>
-<div class="line"><a name="l17226"></a><span class="lineno">17226</span>&#160;    *pContext = vma_new(<span class="keyword">this</span>, VmaDefragmentationContext_T)(</div>
-<div class="line"><a name="l17227"></a><span class="lineno">17227</span>&#160;        <span class="keyword">this</span>, m_CurrentFrameIndex.load(), info.<a class="code" href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">flags</a>, pStats);</div>
-<div class="line"><a name="l17228"></a><span class="lineno">17228</span>&#160; </div>
-<div class="line"><a name="l17229"></a><span class="lineno">17229</span>&#160;    (*pContext)-&gt;AddPools(info.<a class="code" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">poolCount</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b">pPools</a>);</div>
-<div class="line"><a name="l17230"></a><span class="lineno">17230</span>&#160;    (*pContext)-&gt;AddAllocations(</div>
-<div class="line"><a name="l17231"></a><span class="lineno">17231</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">pAllocations</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">pAllocationsChanged</a>);</div>
-<div class="line"><a name="l17232"></a><span class="lineno">17232</span>&#160; </div>
-<div class="line"><a name="l17233"></a><span class="lineno">17233</span>&#160;    VkResult res = (*pContext)-&gt;Defragment(</div>
-<div class="line"><a name="l17234"></a><span class="lineno">17234</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">maxCpuBytesToMove</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a>,</div>
-<div class="line"><a name="l17235"></a><span class="lineno">17235</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08">maxGpuBytesToMove</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6">maxGpuAllocationsToMove</a>,</div>
-<div class="line"><a name="l17236"></a><span class="lineno">17236</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">commandBuffer</a>, pStats, info.<a class="code" href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">flags</a>);</div>
-<div class="line"><a name="l17237"></a><span class="lineno">17237</span>&#160; </div>
-<div class="line"><a name="l17238"></a><span class="lineno">17238</span>&#160;    <span class="keywordflow">if</span>(res != VK_NOT_READY)</div>
-<div class="line"><a name="l17239"></a><span class="lineno">17239</span>&#160;    {</div>
-<div class="line"><a name="l17240"></a><span class="lineno">17240</span>&#160;        vma_delete(<span class="keyword">this</span>, *pContext);</div>
-<div class="line"><a name="l17241"></a><span class="lineno">17241</span>&#160;        *pContext = VMA_NULL;</div>
-<div class="line"><a name="l17242"></a><span class="lineno">17242</span>&#160;    }</div>
-<div class="line"><a name="l17243"></a><span class="lineno">17243</span>&#160; </div>
-<div class="line"><a name="l17244"></a><span class="lineno">17244</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l17245"></a><span class="lineno">17245</span>&#160;}</div>
-<div class="line"><a name="l17246"></a><span class="lineno">17246</span>&#160; </div>
-<div class="line"><a name="l17247"></a><span class="lineno">17247</span>&#160;VkResult VmaAllocator_T::DefragmentationEnd(</div>
-<div class="line"><a name="l17248"></a><span class="lineno">17248</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</div>
-<div class="line"><a name="l17249"></a><span class="lineno">17249</span>&#160;{</div>
-<div class="line"><a name="l17250"></a><span class="lineno">17250</span>&#160;    vma_delete(<span class="keyword">this</span>, context);</div>
-<div class="line"><a name="l17251"></a><span class="lineno">17251</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l17252"></a><span class="lineno">17252</span>&#160;}</div>
-<div class="line"><a name="l17253"></a><span class="lineno">17253</span>&#160; </div>
-<div class="line"><a name="l17254"></a><span class="lineno">17254</span>&#160;VkResult VmaAllocator_T::DefragmentationPassBegin(</div>
-<div class="line"><a name="l17255"></a><span class="lineno">17255</span>&#160;    <a class="code" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a>* pInfo,</div>
-<div class="line"><a name="l17256"></a><span class="lineno">17256</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</div>
-<div class="line"><a name="l17257"></a><span class="lineno">17257</span>&#160;{</div>
-<div class="line"><a name="l17258"></a><span class="lineno">17258</span>&#160;    <span class="keywordflow">return</span> context-&gt;DefragmentPassBegin(pInfo);</div>
-<div class="line"><a name="l17259"></a><span class="lineno">17259</span>&#160;}</div>
-<div class="line"><a name="l17260"></a><span class="lineno">17260</span>&#160;VkResult VmaAllocator_T::DefragmentationPassEnd(</div>
-<div class="line"><a name="l17261"></a><span class="lineno">17261</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</div>
-<div class="line"><a name="l17262"></a><span class="lineno">17262</span>&#160;{</div>
-<div class="line"><a name="l17263"></a><span class="lineno">17263</span>&#160;    <span class="keywordflow">return</span> context-&gt;DefragmentPassEnd();</div>
-<div class="line"><a name="l17264"></a><span class="lineno">17264</span>&#160; </div>
-<div class="line"><a name="l17265"></a><span class="lineno">17265</span>&#160;}</div>
-<div class="line"><a name="l17266"></a><span class="lineno">17266</span>&#160; </div>
-<div class="line"><a name="l17267"></a><span class="lineno">17267</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::GetAllocationInfo(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation, <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
-<div class="line"><a name="l17268"></a><span class="lineno">17268</span>&#160;{</div>
-<div class="line"><a name="l17269"></a><span class="lineno">17269</span>&#160;    <span class="keywordflow">if</span>(hAllocation-&gt;CanBecomeLost())</div>
-<div class="line"><a name="l17270"></a><span class="lineno">17270</span>&#160;    {</div>
-<div class="line"><a name="l17271"></a><span class="lineno">17271</span>&#160;        <span class="comment">/*</span></div>
-<div class="line"><a name="l17272"></a><span class="lineno">17272</span>&#160;<span class="comment">        Warning: This is a carefully designed algorithm.</span></div>
-<div class="line"><a name="l17273"></a><span class="lineno">17273</span>&#160;<span class="comment">        Do not modify unless you really know what you&#39;re doing :)</span></div>
-<div class="line"><a name="l17274"></a><span class="lineno">17274</span>&#160;<span class="comment">        */</span></div>
-<div class="line"><a name="l17275"></a><span class="lineno">17275</span>&#160;        <span class="keyword">const</span> uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
-<div class="line"><a name="l17276"></a><span class="lineno">17276</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
-<div class="line"><a name="l17277"></a><span class="lineno">17277</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
-<div class="line"><a name="l17278"></a><span class="lineno">17278</span>&#160;        {</div>
-<div class="line"><a name="l17279"></a><span class="lineno">17279</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == VMA_FRAME_INDEX_LOST)</div>
-<div class="line"><a name="l17280"></a><span class="lineno">17280</span>&#160;            {</div>
-<div class="line"><a name="l17281"></a><span class="lineno">17281</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">memoryType</a> = UINT32_MAX;</div>
-<div class="line"><a name="l17282"></a><span class="lineno">17282</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67">deviceMemory</a> = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l17283"></a><span class="lineno">17283</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">offset</a> = 0;</div>
-<div class="line"><a name="l17284"></a><span class="lineno">17284</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f">size</a> = hAllocation-&gt;GetSize();</div>
-<div class="line"><a name="l17285"></a><span class="lineno">17285</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a> = VMA_NULL;</div>
-<div class="line"><a name="l17286"></a><span class="lineno">17286</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">pUserData</a> = hAllocation-&gt;GetUserData();</div>
-<div class="line"><a name="l17287"></a><span class="lineno">17287</span>&#160;                <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l17288"></a><span class="lineno">17288</span>&#160;            }</div>
-<div class="line"><a name="l17289"></a><span class="lineno">17289</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</div>
-<div class="line"><a name="l17290"></a><span class="lineno">17290</span>&#160;            {</div>
-<div class="line"><a name="l17291"></a><span class="lineno">17291</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">memoryType</a> = hAllocation-&gt;GetMemoryTypeIndex();</div>
-<div class="line"><a name="l17292"></a><span class="lineno">17292</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67">deviceMemory</a> = hAllocation-&gt;GetMemory();</div>
-<div class="line"><a name="l17293"></a><span class="lineno">17293</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">offset</a> = hAllocation-&gt;GetOffset();</div>
-<div class="line"><a name="l17294"></a><span class="lineno">17294</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f">size</a> = hAllocation-&gt;GetSize();</div>
-<div class="line"><a name="l17295"></a><span class="lineno">17295</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a> = VMA_NULL;</div>
-<div class="line"><a name="l17296"></a><span class="lineno">17296</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">pUserData</a> = hAllocation-&gt;GetUserData();</div>
-<div class="line"><a name="l17297"></a><span class="lineno">17297</span>&#160;                <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l17298"></a><span class="lineno">17298</span>&#160;            }</div>
-<div class="line"><a name="l17299"></a><span class="lineno">17299</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></div>
-<div class="line"><a name="l17300"></a><span class="lineno">17300</span>&#160;            {</div>
-<div class="line"><a name="l17301"></a><span class="lineno">17301</span>&#160;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</div>
-<div class="line"><a name="l17302"></a><span class="lineno">17302</span>&#160;                {</div>
-<div class="line"><a name="l17303"></a><span class="lineno">17303</span>&#160;                    localLastUseFrameIndex = localCurrFrameIndex;</div>
-<div class="line"><a name="l17304"></a><span class="lineno">17304</span>&#160;                }</div>
-<div class="line"><a name="l17305"></a><span class="lineno">17305</span>&#160;            }</div>
-<div class="line"><a name="l17306"></a><span class="lineno">17306</span>&#160;        }</div>
-<div class="line"><a name="l17307"></a><span class="lineno">17307</span>&#160;    }</div>
-<div class="line"><a name="l17308"></a><span class="lineno">17308</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17309"></a><span class="lineno">17309</span>&#160;    {</div>
-<div class="line"><a name="l17310"></a><span class="lineno">17310</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l17311"></a><span class="lineno">17311</span>&#160;        uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
-<div class="line"><a name="l17312"></a><span class="lineno">17312</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
-<div class="line"><a name="l17313"></a><span class="lineno">17313</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
-<div class="line"><a name="l17314"></a><span class="lineno">17314</span>&#160;        {</div>
-<div class="line"><a name="l17315"></a><span class="lineno">17315</span>&#160;            VMA_ASSERT(localLastUseFrameIndex != VMA_FRAME_INDEX_LOST);</div>
-<div class="line"><a name="l17316"></a><span class="lineno">17316</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</div>
-<div class="line"><a name="l17317"></a><span class="lineno">17317</span>&#160;            {</div>
-<div class="line"><a name="l17318"></a><span class="lineno">17318</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17319"></a><span class="lineno">17319</span>&#160;            }</div>
-<div class="line"><a name="l17320"></a><span class="lineno">17320</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></div>
-<div class="line"><a name="l17321"></a><span class="lineno">17321</span>&#160;            {</div>
-<div class="line"><a name="l17322"></a><span class="lineno">17322</span>&#160;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</div>
-<div class="line"><a name="l17323"></a><span class="lineno">17323</span>&#160;                {</div>
-<div class="line"><a name="l17324"></a><span class="lineno">17324</span>&#160;                    localLastUseFrameIndex = localCurrFrameIndex;</div>
-<div class="line"><a name="l17325"></a><span class="lineno">17325</span>&#160;                }</div>
-<div class="line"><a name="l17326"></a><span class="lineno">17326</span>&#160;            }</div>
-<div class="line"><a name="l17327"></a><span class="lineno">17327</span>&#160;        }</div>
-<div class="line"><a name="l17328"></a><span class="lineno">17328</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l17329"></a><span class="lineno">17329</span>&#160; </div>
-<div class="line"><a name="l17330"></a><span class="lineno">17330</span>&#160;        pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">memoryType</a> = hAllocation-&gt;GetMemoryTypeIndex();</div>
-<div class="line"><a name="l17331"></a><span class="lineno">17331</span>&#160;        pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67">deviceMemory</a> = hAllocation-&gt;GetMemory();</div>
-<div class="line"><a name="l17332"></a><span class="lineno">17332</span>&#160;        pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">offset</a> = hAllocation-&gt;GetOffset();</div>
-<div class="line"><a name="l17333"></a><span class="lineno">17333</span>&#160;        pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f">size</a> = hAllocation-&gt;GetSize();</div>
-<div class="line"><a name="l17334"></a><span class="lineno">17334</span>&#160;        pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a> = hAllocation-&gt;GetMappedData();</div>
-<div class="line"><a name="l17335"></a><span class="lineno">17335</span>&#160;        pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">pUserData</a> = hAllocation-&gt;GetUserData();</div>
-<div class="line"><a name="l17336"></a><span class="lineno">17336</span>&#160;    }</div>
-<div class="line"><a name="l17337"></a><span class="lineno">17337</span>&#160;}</div>
-<div class="line"><a name="l17338"></a><span class="lineno">17338</span>&#160; </div>
-<div class="line"><a name="l17339"></a><span class="lineno">17339</span>&#160;<span class="keywordtype">bool</span> VmaAllocator_T::TouchAllocation(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</div>
-<div class="line"><a name="l17340"></a><span class="lineno">17340</span>&#160;{</div>
-<div class="line"><a name="l17341"></a><span class="lineno">17341</span>&#160;    <span class="comment">// This is a stripped-down version of VmaAllocator_T::GetAllocationInfo.</span></div>
-<div class="line"><a name="l17342"></a><span class="lineno">17342</span>&#160;    <span class="keywordflow">if</span>(hAllocation-&gt;CanBecomeLost())</div>
-<div class="line"><a name="l17343"></a><span class="lineno">17343</span>&#160;    {</div>
-<div class="line"><a name="l17344"></a><span class="lineno">17344</span>&#160;        uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
-<div class="line"><a name="l17345"></a><span class="lineno">17345</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
-<div class="line"><a name="l17346"></a><span class="lineno">17346</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
-<div class="line"><a name="l17347"></a><span class="lineno">17347</span>&#160;        {</div>
-<div class="line"><a name="l17348"></a><span class="lineno">17348</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == VMA_FRAME_INDEX_LOST)</div>
-<div class="line"><a name="l17349"></a><span class="lineno">17349</span>&#160;            {</div>
-<div class="line"><a name="l17350"></a><span class="lineno">17350</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l17351"></a><span class="lineno">17351</span>&#160;            }</div>
-<div class="line"><a name="l17352"></a><span class="lineno">17352</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</div>
-<div class="line"><a name="l17353"></a><span class="lineno">17353</span>&#160;            {</div>
-<div class="line"><a name="l17354"></a><span class="lineno">17354</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l17355"></a><span class="lineno">17355</span>&#160;            }</div>
-<div class="line"><a name="l17356"></a><span class="lineno">17356</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></div>
-<div class="line"><a name="l17357"></a><span class="lineno">17357</span>&#160;            {</div>
-<div class="line"><a name="l17358"></a><span class="lineno">17358</span>&#160;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</div>
-<div class="line"><a name="l17359"></a><span class="lineno">17359</span>&#160;                {</div>
-<div class="line"><a name="l17360"></a><span class="lineno">17360</span>&#160;                    localLastUseFrameIndex = localCurrFrameIndex;</div>
-<div class="line"><a name="l17361"></a><span class="lineno">17361</span>&#160;                }</div>
-<div class="line"><a name="l17362"></a><span class="lineno">17362</span>&#160;            }</div>
-<div class="line"><a name="l17363"></a><span class="lineno">17363</span>&#160;        }</div>
-<div class="line"><a name="l17364"></a><span class="lineno">17364</span>&#160;    }</div>
-<div class="line"><a name="l17365"></a><span class="lineno">17365</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17366"></a><span class="lineno">17366</span>&#160;    {</div>
-<div class="line"><a name="l17367"></a><span class="lineno">17367</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l17368"></a><span class="lineno">17368</span>&#160;        uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
-<div class="line"><a name="l17369"></a><span class="lineno">17369</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
-<div class="line"><a name="l17370"></a><span class="lineno">17370</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
-<div class="line"><a name="l17371"></a><span class="lineno">17371</span>&#160;        {</div>
-<div class="line"><a name="l17372"></a><span class="lineno">17372</span>&#160;            VMA_ASSERT(localLastUseFrameIndex != VMA_FRAME_INDEX_LOST);</div>
-<div class="line"><a name="l17373"></a><span class="lineno">17373</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</div>
-<div class="line"><a name="l17374"></a><span class="lineno">17374</span>&#160;            {</div>
-<div class="line"><a name="l17375"></a><span class="lineno">17375</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17376"></a><span class="lineno">17376</span>&#160;            }</div>
-<div class="line"><a name="l17377"></a><span class="lineno">17377</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></div>
-<div class="line"><a name="l17378"></a><span class="lineno">17378</span>&#160;            {</div>
-<div class="line"><a name="l17379"></a><span class="lineno">17379</span>&#160;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</div>
-<div class="line"><a name="l17380"></a><span class="lineno">17380</span>&#160;                {</div>
-<div class="line"><a name="l17381"></a><span class="lineno">17381</span>&#160;                    localLastUseFrameIndex = localCurrFrameIndex;</div>
-<div class="line"><a name="l17382"></a><span class="lineno">17382</span>&#160;                }</div>
-<div class="line"><a name="l17383"></a><span class="lineno">17383</span>&#160;            }</div>
-<div class="line"><a name="l17384"></a><span class="lineno">17384</span>&#160;        }</div>
-<div class="line"><a name="l17385"></a><span class="lineno">17385</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l17386"></a><span class="lineno">17386</span>&#160; </div>
-<div class="line"><a name="l17387"></a><span class="lineno">17387</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l17388"></a><span class="lineno">17388</span>&#160;    }</div>
-<div class="line"><a name="l17389"></a><span class="lineno">17389</span>&#160;}</div>
-<div class="line"><a name="l17390"></a><span class="lineno">17390</span>&#160; </div>
-<div class="line"><a name="l17391"></a><span class="lineno">17391</span>&#160;VkResult VmaAllocator_T::CreatePool(<span class="keyword">const</span> <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a>* pCreateInfo, <a class="code" href="struct_vma_pool.html">VmaPool</a>* pPool)</div>
-<div class="line"><a name="l17392"></a><span class="lineno">17392</span>&#160;{</div>
-<div class="line"><a name="l17393"></a><span class="lineno">17393</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;  CreatePool: MemoryTypeIndex=%u, flags=%u&quot;</span>, pCreateInfo-&gt;<a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a>, pCreateInfo-&gt;<a class="code" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">flags</a>);</div>
-<div class="line"><a name="l17394"></a><span class="lineno">17394</span>&#160; </div>
-<div class="line"><a name="l17395"></a><span class="lineno">17395</span>&#160;    <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> newCreateInfo = *pCreateInfo;</div>
-<div class="line"><a name="l17396"></a><span class="lineno">17396</span>&#160; </div>
-<div class="line"><a name="l17397"></a><span class="lineno">17397</span>&#160;    <span class="comment">// Protection against uninitialized new structure member. If garbage data are left there, this pointer dereference would crash.</span></div>
-<div class="line"><a name="l17398"></a><span class="lineno">17398</span>&#160;    <span class="keywordflow">if</span>(pCreateInfo-&gt;<a class="code" href="struct_vma_pool_create_info.html#af0f8c58f51a2a7a0a389dc79565044d7">pMemoryAllocateNext</a>)</div>
-<div class="line"><a name="l17399"></a><span class="lineno">17399</span>&#160;    {</div>
-<div class="line"><a name="l17400"></a><span class="lineno">17400</span>&#160;        VMA_ASSERT(((<span class="keyword">const</span> VkBaseInStructure*)pCreateInfo-&gt;<a class="code" href="struct_vma_pool_create_info.html#af0f8c58f51a2a7a0a389dc79565044d7">pMemoryAllocateNext</a>)-&gt;sType != 0);</div>
-<div class="line"><a name="l17401"></a><span class="lineno">17401</span>&#160;    }</div>
-<div class="line"><a name="l17402"></a><span class="lineno">17402</span>&#160; </div>
-<div class="line"><a name="l17403"></a><span class="lineno">17403</span>&#160;    <span class="keywordflow">if</span>(newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a> == 0)</div>
-<div class="line"><a name="l17404"></a><span class="lineno">17404</span>&#160;    {</div>
-<div class="line"><a name="l17405"></a><span class="lineno">17405</span>&#160;        newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a> = SIZE_MAX;</div>
-<div class="line"><a name="l17406"></a><span class="lineno">17406</span>&#160;    }</div>
-<div class="line"><a name="l17407"></a><span class="lineno">17407</span>&#160;    <span class="keywordflow">if</span>(newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae">minBlockCount</a> &gt; newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a>)</div>
-<div class="line"><a name="l17408"></a><span class="lineno">17408</span>&#160;    {</div>
-<div class="line"><a name="l17409"></a><span class="lineno">17409</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_INITIALIZATION_FAILED;</div>
-<div class="line"><a name="l17410"></a><span class="lineno">17410</span>&#160;    }</div>
-<div class="line"><a name="l17411"></a><span class="lineno">17411</span>&#160;    <span class="comment">// Memory type index out of range or forbidden.</span></div>
-<div class="line"><a name="l17412"></a><span class="lineno">17412</span>&#160;    <span class="keywordflow">if</span>(pCreateInfo-&gt;<a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a> &gt;= GetMemoryTypeCount() ||</div>
-<div class="line"><a name="l17413"></a><span class="lineno">17413</span>&#160;        ((1u &lt;&lt; pCreateInfo-&gt;<a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a>) &amp; m_GlobalMemoryTypeBits) == 0)</div>
-<div class="line"><a name="l17414"></a><span class="lineno">17414</span>&#160;    {</div>
-<div class="line"><a name="l17415"></a><span class="lineno">17415</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</div>
-<div class="line"><a name="l17416"></a><span class="lineno">17416</span>&#160;    }</div>
-<div class="line"><a name="l17417"></a><span class="lineno">17417</span>&#160;    <span class="keywordflow">if</span>(newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#ade3eca546f0c6ab4e8fbf20eb6d854cb">minAllocationAlignment</a> &gt; 0)</div>
-<div class="line"><a name="l17418"></a><span class="lineno">17418</span>&#160;    {</div>
-<div class="line"><a name="l17419"></a><span class="lineno">17419</span>&#160;        VMA_ASSERT(VmaIsPow2(newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#ade3eca546f0c6ab4e8fbf20eb6d854cb">minAllocationAlignment</a>));</div>
-<div class="line"><a name="l17420"></a><span class="lineno">17420</span>&#160;    }</div>
-<div class="line"><a name="l17421"></a><span class="lineno">17421</span>&#160; </div>
-<div class="line"><a name="l17422"></a><span class="lineno">17422</span>&#160;    <span class="keyword">const</span> VkDeviceSize preferredBlockSize = CalcPreferredBlockSize(newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a>);</div>
-<div class="line"><a name="l17423"></a><span class="lineno">17423</span>&#160; </div>
-<div class="line"><a name="l17424"></a><span class="lineno">17424</span>&#160;    *pPool = vma_new(<span class="keyword">this</span>, VmaPool_T)(<span class="keyword">this</span>, newCreateInfo, preferredBlockSize);</div>
-<div class="line"><a name="l17425"></a><span class="lineno">17425</span>&#160; </div>
-<div class="line"><a name="l17426"></a><span class="lineno">17426</span>&#160;    VkResult res = (*pPool)-&gt;m_BlockVector.CreateMinBlocks();</div>
-<div class="line"><a name="l17427"></a><span class="lineno">17427</span>&#160;    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l17428"></a><span class="lineno">17428</span>&#160;    {</div>
-<div class="line"><a name="l17429"></a><span class="lineno">17429</span>&#160;        vma_delete(<span class="keyword">this</span>, *pPool);</div>
-<div class="line"><a name="l17430"></a><span class="lineno">17430</span>&#160;        *pPool = VMA_NULL;</div>
-<div class="line"><a name="l17431"></a><span class="lineno">17431</span>&#160;        <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l17432"></a><span class="lineno">17432</span>&#160;    }</div>
-<div class="line"><a name="l17433"></a><span class="lineno">17433</span>&#160; </div>
-<div class="line"><a name="l17434"></a><span class="lineno">17434</span>&#160;    <span class="comment">// Add to m_Pools.</span></div>
-<div class="line"><a name="l17435"></a><span class="lineno">17435</span>&#160;    {</div>
-<div class="line"><a name="l17436"></a><span class="lineno">17436</span>&#160;        VmaMutexLockWrite lock(m_PoolsMutex, m_UseMutex);</div>
-<div class="line"><a name="l17437"></a><span class="lineno">17437</span>&#160;        (*pPool)-&gt;SetId(m_NextPoolId++);</div>
-<div class="line"><a name="l17438"></a><span class="lineno">17438</span>&#160;        m_Pools.PushBack(*pPool);</div>
-<div class="line"><a name="l17439"></a><span class="lineno">17439</span>&#160;    }</div>
-<div class="line"><a name="l17440"></a><span class="lineno">17440</span>&#160; </div>
-<div class="line"><a name="l17441"></a><span class="lineno">17441</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l17442"></a><span class="lineno">17442</span>&#160;}</div>
-<div class="line"><a name="l17443"></a><span class="lineno">17443</span>&#160; </div>
-<div class="line"><a name="l17444"></a><span class="lineno">17444</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::DestroyPool(<a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</div>
-<div class="line"><a name="l17445"></a><span class="lineno">17445</span>&#160;{</div>
-<div class="line"><a name="l17446"></a><span class="lineno">17446</span>&#160;    <span class="comment">// Remove from m_Pools.</span></div>
-<div class="line"><a name="l17447"></a><span class="lineno">17447</span>&#160;    {</div>
-<div class="line"><a name="l17448"></a><span class="lineno">17448</span>&#160;        VmaMutexLockWrite lock(m_PoolsMutex, m_UseMutex);</div>
-<div class="line"><a name="l17449"></a><span class="lineno">17449</span>&#160;        m_Pools.Remove(pool);</div>
-<div class="line"><a name="l17450"></a><span class="lineno">17450</span>&#160;    }</div>
-<div class="line"><a name="l17451"></a><span class="lineno">17451</span>&#160; </div>
-<div class="line"><a name="l17452"></a><span class="lineno">17452</span>&#160;    vma_delete(<span class="keyword">this</span>, pool);</div>
-<div class="line"><a name="l17453"></a><span class="lineno">17453</span>&#160;}</div>
-<div class="line"><a name="l17454"></a><span class="lineno">17454</span>&#160; </div>
-<div class="line"><a name="l17455"></a><span class="lineno">17455</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::GetPoolStats(<a class="code" href="struct_vma_pool.html">VmaPool</a> pool, <a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>* pPoolStats)</div>
-<div class="line"><a name="l17456"></a><span class="lineno">17456</span>&#160;{</div>
-<div class="line"><a name="l17457"></a><span class="lineno">17457</span>&#160;    pool-&gt;m_BlockVector.GetPoolStats(pPoolStats);</div>
-<div class="line"><a name="l17458"></a><span class="lineno">17458</span>&#160;}</div>
-<div class="line"><a name="l17459"></a><span class="lineno">17459</span>&#160; </div>
-<div class="line"><a name="l17460"></a><span class="lineno">17460</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::SetCurrentFrameIndex(uint32_t frameIndex)</div>
-<div class="line"><a name="l17461"></a><span class="lineno">17461</span>&#160;{</div>
-<div class="line"><a name="l17462"></a><span class="lineno">17462</span>&#160;    m_CurrentFrameIndex.store(frameIndex);</div>
-<div class="line"><a name="l17463"></a><span class="lineno">17463</span>&#160; </div>
-<div class="line"><a name="l17464"></a><span class="lineno">17464</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l17465"></a><span class="lineno">17465</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget)</div>
-<div class="line"><a name="l17466"></a><span class="lineno">17466</span>&#160;    {</div>
-<div class="line"><a name="l17467"></a><span class="lineno">17467</span>&#160;        UpdateVulkanBudget();</div>
-<div class="line"><a name="l17468"></a><span class="lineno">17468</span>&#160;    }</div>
-<div class="line"><a name="l17469"></a><span class="lineno">17469</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l17470"></a><span class="lineno">17470</span>&#160;}</div>
-<div class="line"><a name="l17471"></a><span class="lineno">17471</span>&#160; </div>
-<div class="line"><a name="l17472"></a><span class="lineno">17472</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::MakePoolAllocationsLost(</div>
-<div class="line"><a name="l17473"></a><span class="lineno">17473</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> hPool,</div>
-<div class="line"><a name="l17474"></a><span class="lineno">17474</span>&#160;    <span class="keywordtype">size_t</span>* pLostAllocationCount)</div>
-<div class="line"><a name="l17475"></a><span class="lineno">17475</span>&#160;{</div>
-<div class="line"><a name="l17476"></a><span class="lineno">17476</span>&#160;    hPool-&gt;m_BlockVector.MakePoolAllocationsLost(</div>
-<div class="line"><a name="l17477"></a><span class="lineno">17477</span>&#160;        m_CurrentFrameIndex.load(),</div>
-<div class="line"><a name="l17478"></a><span class="lineno">17478</span>&#160;        pLostAllocationCount);</div>
-<div class="line"><a name="l17479"></a><span class="lineno">17479</span>&#160;}</div>
-<div class="line"><a name="l17480"></a><span class="lineno">17480</span>&#160; </div>
-<div class="line"><a name="l17481"></a><span class="lineno">17481</span>&#160;VkResult VmaAllocator_T::CheckPoolCorruption(<a class="code" href="struct_vma_pool.html">VmaPool</a> hPool)</div>
-<div class="line"><a name="l17482"></a><span class="lineno">17482</span>&#160;{</div>
-<div class="line"><a name="l17483"></a><span class="lineno">17483</span>&#160;    <span class="keywordflow">return</span> hPool-&gt;m_BlockVector.CheckCorruption();</div>
-<div class="line"><a name="l17484"></a><span class="lineno">17484</span>&#160;}</div>
-<div class="line"><a name="l17485"></a><span class="lineno">17485</span>&#160; </div>
-<div class="line"><a name="l17486"></a><span class="lineno">17486</span>&#160;VkResult VmaAllocator_T::CheckCorruption(uint32_t memoryTypeBits)</div>
-<div class="line"><a name="l17487"></a><span class="lineno">17487</span>&#160;{</div>
-<div class="line"><a name="l17488"></a><span class="lineno">17488</span>&#160;    VkResult finalRes = VK_ERROR_FEATURE_NOT_PRESENT;</div>
-<div class="line"><a name="l17489"></a><span class="lineno">17489</span>&#160; </div>
-<div class="line"><a name="l17490"></a><span class="lineno">17490</span>&#160;    <span class="comment">// Process default pools.</span></div>
-<div class="line"><a name="l17491"></a><span class="lineno">17491</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
-<div class="line"><a name="l17492"></a><span class="lineno">17492</span>&#160;    {</div>
-<div class="line"><a name="l17493"></a><span class="lineno">17493</span>&#160;        <span class="keywordflow">if</span>(((1u &lt;&lt; memTypeIndex) &amp; memoryTypeBits) != 0)</div>
-<div class="line"><a name="l17494"></a><span class="lineno">17494</span>&#160;        {</div>
-<div class="line"><a name="l17495"></a><span class="lineno">17495</span>&#160;            VmaBlockVector* <span class="keyword">const</span> pBlockVector = m_pBlockVectors[memTypeIndex];</div>
-<div class="line"><a name="l17496"></a><span class="lineno">17496</span>&#160;            VMA_ASSERT(pBlockVector);</div>
-<div class="line"><a name="l17497"></a><span class="lineno">17497</span>&#160;            VkResult localRes = pBlockVector-&gt;CheckCorruption();</div>
-<div class="line"><a name="l17498"></a><span class="lineno">17498</span>&#160;            <span class="keywordflow">switch</span>(localRes)</div>
-<div class="line"><a name="l17499"></a><span class="lineno">17499</span>&#160;            {</div>
-<div class="line"><a name="l17500"></a><span class="lineno">17500</span>&#160;            <span class="keywordflow">case</span> VK_ERROR_FEATURE_NOT_PRESENT:</div>
-<div class="line"><a name="l17501"></a><span class="lineno">17501</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17502"></a><span class="lineno">17502</span>&#160;            <span class="keywordflow">case</span> VK_SUCCESS:</div>
-<div class="line"><a name="l17503"></a><span class="lineno">17503</span>&#160;                finalRes = VK_SUCCESS;</div>
-<div class="line"><a name="l17504"></a><span class="lineno">17504</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17505"></a><span class="lineno">17505</span>&#160;            <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l17506"></a><span class="lineno">17506</span>&#160;                <span class="keywordflow">return</span> localRes;</div>
-<div class="line"><a name="l17507"></a><span class="lineno">17507</span>&#160;            }</div>
-<div class="line"><a name="l17508"></a><span class="lineno">17508</span>&#160;        }</div>
-<div class="line"><a name="l17509"></a><span class="lineno">17509</span>&#160;    }</div>
-<div class="line"><a name="l17510"></a><span class="lineno">17510</span>&#160; </div>
-<div class="line"><a name="l17511"></a><span class="lineno">17511</span>&#160;    <span class="comment">// Process custom pools.</span></div>
-<div class="line"><a name="l17512"></a><span class="lineno">17512</span>&#160;    {</div>
-<div class="line"><a name="l17513"></a><span class="lineno">17513</span>&#160;        VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);</div>
-<div class="line"><a name="l17514"></a><span class="lineno">17514</span>&#160;        <span class="keywordflow">for</span>(<a class="code" href="struct_vma_pool.html">VmaPool</a> pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool))</div>
-<div class="line"><a name="l17515"></a><span class="lineno">17515</span>&#160;        {</div>
-<div class="line"><a name="l17516"></a><span class="lineno">17516</span>&#160;            <span class="keywordflow">if</span>(((1u &lt;&lt; pool-&gt;m_BlockVector.GetMemoryTypeIndex()) &amp; memoryTypeBits) != 0)</div>
-<div class="line"><a name="l17517"></a><span class="lineno">17517</span>&#160;            {</div>
-<div class="line"><a name="l17518"></a><span class="lineno">17518</span>&#160;                VkResult localRes = pool-&gt;m_BlockVector.CheckCorruption();</div>
-<div class="line"><a name="l17519"></a><span class="lineno">17519</span>&#160;                <span class="keywordflow">switch</span>(localRes)</div>
-<div class="line"><a name="l17520"></a><span class="lineno">17520</span>&#160;                {</div>
-<div class="line"><a name="l17521"></a><span class="lineno">17521</span>&#160;                <span class="keywordflow">case</span> VK_ERROR_FEATURE_NOT_PRESENT:</div>
-<div class="line"><a name="l17522"></a><span class="lineno">17522</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17523"></a><span class="lineno">17523</span>&#160;                <span class="keywordflow">case</span> VK_SUCCESS:</div>
-<div class="line"><a name="l17524"></a><span class="lineno">17524</span>&#160;                    finalRes = VK_SUCCESS;</div>
-<div class="line"><a name="l17525"></a><span class="lineno">17525</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17526"></a><span class="lineno">17526</span>&#160;                <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l17527"></a><span class="lineno">17527</span>&#160;                    <span class="keywordflow">return</span> localRes;</div>
-<div class="line"><a name="l17528"></a><span class="lineno">17528</span>&#160;                }</div>
-<div class="line"><a name="l17529"></a><span class="lineno">17529</span>&#160;            }</div>
-<div class="line"><a name="l17530"></a><span class="lineno">17530</span>&#160;        }</div>
-<div class="line"><a name="l17531"></a><span class="lineno">17531</span>&#160;    }</div>
-<div class="line"><a name="l17532"></a><span class="lineno">17532</span>&#160; </div>
-<div class="line"><a name="l17533"></a><span class="lineno">17533</span>&#160;    <span class="keywordflow">return</span> finalRes;</div>
-<div class="line"><a name="l17534"></a><span class="lineno">17534</span>&#160;}</div>
-<div class="line"><a name="l17535"></a><span class="lineno">17535</span>&#160; </div>
-<div class="line"><a name="l17536"></a><span class="lineno">17536</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::CreateLostAllocation(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
-<div class="line"><a name="l17537"></a><span class="lineno">17537</span>&#160;{</div>
-<div class="line"><a name="l17538"></a><span class="lineno">17538</span>&#160;    *pAllocation = m_AllocationObjectAllocator.Allocate(VMA_FRAME_INDEX_LOST, <span class="keyword">false</span>);</div>
-<div class="line"><a name="l17539"></a><span class="lineno">17539</span>&#160;    (*pAllocation)-&gt;InitLost();</div>
-<div class="line"><a name="l17540"></a><span class="lineno">17540</span>&#160;}</div>
-<div class="line"><a name="l17541"></a><span class="lineno">17541</span>&#160; </div>
-<div class="line"><a name="l17542"></a><span class="lineno">17542</span>&#160;<span class="comment">// An object that increments given atomic but decrements it back in the destructor unless Commit() is called.</span></div>
-<div class="line"><a name="l17543"></a><span class="lineno">17543</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
-<div class="line"><a name="l17544"></a><span class="lineno">17544</span>&#160;<span class="keyword">struct </span>AtomicTransactionalIncrement</div>
-<div class="line"><a name="l17545"></a><span class="lineno">17545</span>&#160;{</div>
-<div class="line"><a name="l17546"></a><span class="lineno">17546</span>&#160;<span class="keyword">public</span>:</div>
-<div class="line"><a name="l17547"></a><span class="lineno">17547</span>&#160;    <span class="keyword">typedef</span> std::atomic&lt;T&gt; AtomicT;</div>
-<div class="line"><a name="l17548"></a><span class="lineno">17548</span>&#160;    ~AtomicTransactionalIncrement()</div>
-<div class="line"><a name="l17549"></a><span class="lineno">17549</span>&#160;    {</div>
-<div class="line"><a name="l17550"></a><span class="lineno">17550</span>&#160;        <span class="keywordflow">if</span>(m_Atomic)</div>
-<div class="line"><a name="l17551"></a><span class="lineno">17551</span>&#160;            --(*m_Atomic);</div>
-<div class="line"><a name="l17552"></a><span class="lineno">17552</span>&#160;    }</div>
-<div class="line"><a name="l17553"></a><span class="lineno">17553</span>&#160;    T Increment(AtomicT* atomic)</div>
-<div class="line"><a name="l17554"></a><span class="lineno">17554</span>&#160;    {</div>
-<div class="line"><a name="l17555"></a><span class="lineno">17555</span>&#160;        m_Atomic = atomic;</div>
-<div class="line"><a name="l17556"></a><span class="lineno">17556</span>&#160;        <span class="keywordflow">return</span> m_Atomic-&gt;fetch_add(1);</div>
-<div class="line"><a name="l17557"></a><span class="lineno">17557</span>&#160;    }</div>
-<div class="line"><a name="l17558"></a><span class="lineno">17558</span>&#160;    <span class="keywordtype">void</span> Commit()</div>
-<div class="line"><a name="l17559"></a><span class="lineno">17559</span>&#160;    {</div>
-<div class="line"><a name="l17560"></a><span class="lineno">17560</span>&#160;        m_Atomic = <span class="keyword">nullptr</span>;</div>
-<div class="line"><a name="l17561"></a><span class="lineno">17561</span>&#160;    }</div>
-<div class="line"><a name="l17562"></a><span class="lineno">17562</span>&#160; </div>
-<div class="line"><a name="l17563"></a><span class="lineno">17563</span>&#160;<span class="keyword">private</span>:</div>
-<div class="line"><a name="l17564"></a><span class="lineno">17564</span>&#160;    AtomicT* m_Atomic = <span class="keyword">nullptr</span>;</div>
-<div class="line"><a name="l17565"></a><span class="lineno">17565</span>&#160;};</div>
-<div class="line"><a name="l17566"></a><span class="lineno">17566</span>&#160; </div>
-<div class="line"><a name="l17567"></a><span class="lineno">17567</span>&#160;VkResult VmaAllocator_T::AllocateVulkanMemory(<span class="keyword">const</span> VkMemoryAllocateInfo* pAllocateInfo, VkDeviceMemory* pMemory)</div>
-<div class="line"><a name="l17568"></a><span class="lineno">17568</span>&#160;{</div>
-<div class="line"><a name="l17569"></a><span class="lineno">17569</span>&#160;    AtomicTransactionalIncrement&lt;uint32_t&gt; deviceMemoryCountIncrement;</div>
-<div class="line"><a name="l17570"></a><span class="lineno">17570</span>&#160;    <span class="keyword">const</span> uint64_t prevDeviceMemoryCount = deviceMemoryCountIncrement.Increment(&amp;m_DeviceMemoryCount);</div>
-<div class="line"><a name="l17571"></a><span class="lineno">17571</span>&#160;<span class="preprocessor">#if VMA_DEBUG_DONT_EXCEED_MAX_MEMORY_ALLOCATION_COUNT</span></div>
-<div class="line"><a name="l17572"></a><span class="lineno">17572</span>&#160;    <span class="keywordflow">if</span>(prevDeviceMemoryCount &gt;= m_PhysicalDeviceProperties.limits.maxMemoryAllocationCount)</div>
-<div class="line"><a name="l17573"></a><span class="lineno">17573</span>&#160;    {</div>
-<div class="line"><a name="l17574"></a><span class="lineno">17574</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_TOO_MANY_OBJECTS;</div>
-<div class="line"><a name="l17575"></a><span class="lineno">17575</span>&#160;    }</div>
-<div class="line"><a name="l17576"></a><span class="lineno">17576</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l17577"></a><span class="lineno">17577</span>&#160; </div>
-<div class="line"><a name="l17578"></a><span class="lineno">17578</span>&#160;    <span class="keyword">const</span> uint32_t heapIndex = MemoryTypeIndexToHeapIndex(pAllocateInfo-&gt;memoryTypeIndex);</div>
-<div class="line"><a name="l17579"></a><span class="lineno">17579</span>&#160; </div>
-<div class="line"><a name="l17580"></a><span class="lineno">17580</span>&#160;    <span class="comment">// HeapSizeLimit is in effect for this heap.</span></div>
-<div class="line"><a name="l17581"></a><span class="lineno">17581</span>&#160;    <span class="keywordflow">if</span>((m_HeapSizeLimitMask &amp; (1u &lt;&lt; heapIndex)) != 0)</div>
-<div class="line"><a name="l17582"></a><span class="lineno">17582</span>&#160;    {</div>
-<div class="line"><a name="l17583"></a><span class="lineno">17583</span>&#160;        <span class="keyword">const</span> VkDeviceSize heapSize = m_MemProps.memoryHeaps[heapIndex].size;</div>
-<div class="line"><a name="l17584"></a><span class="lineno">17584</span>&#160;        VkDeviceSize blockBytes = m_Budget.m_BlockBytes[heapIndex];</div>
-<div class="line"><a name="l17585"></a><span class="lineno">17585</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
-<div class="line"><a name="l17586"></a><span class="lineno">17586</span>&#160;        {</div>
-<div class="line"><a name="l17587"></a><span class="lineno">17587</span>&#160;            <span class="keyword">const</span> VkDeviceSize blockBytesAfterAllocation = blockBytes + pAllocateInfo-&gt;allocationSize;</div>
-<div class="line"><a name="l17588"></a><span class="lineno">17588</span>&#160;            <span class="keywordflow">if</span>(blockBytesAfterAllocation &gt; heapSize)</div>
-<div class="line"><a name="l17589"></a><span class="lineno">17589</span>&#160;            {</div>
-<div class="line"><a name="l17590"></a><span class="lineno">17590</span>&#160;                <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l17591"></a><span class="lineno">17591</span>&#160;            }</div>
-<div class="line"><a name="l17592"></a><span class="lineno">17592</span>&#160;            <span class="keywordflow">if</span>(m_Budget.m_BlockBytes[heapIndex].compare_exchange_strong(blockBytes, blockBytesAfterAllocation))</div>
-<div class="line"><a name="l17593"></a><span class="lineno">17593</span>&#160;            {</div>
-<div class="line"><a name="l17594"></a><span class="lineno">17594</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17595"></a><span class="lineno">17595</span>&#160;            }</div>
-<div class="line"><a name="l17596"></a><span class="lineno">17596</span>&#160;        }</div>
-<div class="line"><a name="l17597"></a><span class="lineno">17597</span>&#160;    }</div>
-<div class="line"><a name="l17598"></a><span class="lineno">17598</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17599"></a><span class="lineno">17599</span>&#160;    {</div>
-<div class="line"><a name="l17600"></a><span class="lineno">17600</span>&#160;        m_Budget.m_BlockBytes[heapIndex] += pAllocateInfo-&gt;allocationSize;</div>
-<div class="line"><a name="l17601"></a><span class="lineno">17601</span>&#160;    }</div>
-<div class="line"><a name="l17602"></a><span class="lineno">17602</span>&#160; </div>
-<div class="line"><a name="l17603"></a><span class="lineno">17603</span>&#160;    <span class="comment">// VULKAN CALL vkAllocateMemory.</span></div>
-<div class="line"><a name="l17604"></a><span class="lineno">17604</span>&#160;    VkResult res = (*m_VulkanFunctions.vkAllocateMemory)(m_hDevice, pAllocateInfo, GetAllocationCallbacks(), pMemory);</div>
-<div class="line"><a name="l17605"></a><span class="lineno">17605</span>&#160; </div>
-<div class="line"><a name="l17606"></a><span class="lineno">17606</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l17607"></a><span class="lineno">17607</span>&#160;    {</div>
-<div class="line"><a name="l17608"></a><span class="lineno">17608</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l17609"></a><span class="lineno">17609</span>&#160;        ++m_Budget.m_OperationsSinceBudgetFetch;</div>
-<div class="line"><a name="l17610"></a><span class="lineno">17610</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l17611"></a><span class="lineno">17611</span>&#160; </div>
-<div class="line"><a name="l17612"></a><span class="lineno">17612</span>&#160;        <span class="comment">// Informative callback.</span></div>
-<div class="line"><a name="l17613"></a><span class="lineno">17613</span>&#160;        <span class="keywordflow">if</span>(m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">pfnAllocate</a> != VMA_NULL)</div>
-<div class="line"><a name="l17614"></a><span class="lineno">17614</span>&#160;        {</div>
-<div class="line"><a name="l17615"></a><span class="lineno">17615</span>&#160;            (*m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">pfnAllocate</a>)(<span class="keyword">this</span>, pAllocateInfo-&gt;memoryTypeIndex, *pMemory, pAllocateInfo-&gt;allocationSize, m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6">pUserData</a>);</div>
-<div class="line"><a name="l17616"></a><span class="lineno">17616</span>&#160;        }</div>
-<div class="line"><a name="l17617"></a><span class="lineno">17617</span>&#160; </div>
-<div class="line"><a name="l17618"></a><span class="lineno">17618</span>&#160;        deviceMemoryCountIncrement.Commit();</div>
-<div class="line"><a name="l17619"></a><span class="lineno">17619</span>&#160;    }</div>
-<div class="line"><a name="l17620"></a><span class="lineno">17620</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17621"></a><span class="lineno">17621</span>&#160;    {</div>
-<div class="line"><a name="l17622"></a><span class="lineno">17622</span>&#160;        m_Budget.m_BlockBytes[heapIndex] -= pAllocateInfo-&gt;allocationSize;</div>
-<div class="line"><a name="l17623"></a><span class="lineno">17623</span>&#160;    }</div>
-<div class="line"><a name="l17624"></a><span class="lineno">17624</span>&#160; </div>
-<div class="line"><a name="l17625"></a><span class="lineno">17625</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l17626"></a><span class="lineno">17626</span>&#160;}</div>
-<div class="line"><a name="l17627"></a><span class="lineno">17627</span>&#160; </div>
-<div class="line"><a name="l17628"></a><span class="lineno">17628</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::FreeVulkanMemory(uint32_t memoryType, VkDeviceSize size, VkDeviceMemory hMemory)</div>
-<div class="line"><a name="l17629"></a><span class="lineno">17629</span>&#160;{</div>
-<div class="line"><a name="l17630"></a><span class="lineno">17630</span>&#160;    <span class="comment">// Informative callback.</span></div>
-<div class="line"><a name="l17631"></a><span class="lineno">17631</span>&#160;    <span class="keywordflow">if</span>(m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">pfnFree</a> != VMA_NULL)</div>
-<div class="line"><a name="l17632"></a><span class="lineno">17632</span>&#160;    {</div>
-<div class="line"><a name="l17633"></a><span class="lineno">17633</span>&#160;        (*m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">pfnFree</a>)(<span class="keyword">this</span>, memoryType, hMemory, size, m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6">pUserData</a>);</div>
-<div class="line"><a name="l17634"></a><span class="lineno">17634</span>&#160;    }</div>
-<div class="line"><a name="l17635"></a><span class="lineno">17635</span>&#160; </div>
-<div class="line"><a name="l17636"></a><span class="lineno">17636</span>&#160;    <span class="comment">// VULKAN CALL vkFreeMemory.</span></div>
-<div class="line"><a name="l17637"></a><span class="lineno">17637</span>&#160;    (*m_VulkanFunctions.vkFreeMemory)(m_hDevice, hMemory, GetAllocationCallbacks());</div>
-<div class="line"><a name="l17638"></a><span class="lineno">17638</span>&#160; </div>
-<div class="line"><a name="l17639"></a><span class="lineno">17639</span>&#160;    m_Budget.m_BlockBytes[MemoryTypeIndexToHeapIndex(memoryType)] -= size;</div>
-<div class="line"><a name="l17640"></a><span class="lineno">17640</span>&#160; </div>
-<div class="line"><a name="l17641"></a><span class="lineno">17641</span>&#160;    --m_DeviceMemoryCount;</div>
-<div class="line"><a name="l17642"></a><span class="lineno">17642</span>&#160;}</div>
-<div class="line"><a name="l17643"></a><span class="lineno">17643</span>&#160; </div>
-<div class="line"><a name="l17644"></a><span class="lineno">17644</span>&#160;VkResult VmaAllocator_T::BindVulkanBuffer(</div>
-<div class="line"><a name="l17645"></a><span class="lineno">17645</span>&#160;    VkDeviceMemory memory,</div>
-<div class="line"><a name="l17646"></a><span class="lineno">17646</span>&#160;    VkDeviceSize memoryOffset,</div>
-<div class="line"><a name="l17647"></a><span class="lineno">17647</span>&#160;    VkBuffer buffer,</div>
-<div class="line"><a name="l17648"></a><span class="lineno">17648</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
-<div class="line"><a name="l17649"></a><span class="lineno">17649</span>&#160;{</div>
-<div class="line"><a name="l17650"></a><span class="lineno">17650</span>&#160;    <span class="keywordflow">if</span>(pNext != VMA_NULL)</div>
-<div class="line"><a name="l17651"></a><span class="lineno">17651</span>&#160;    {</div>
-<div class="line"><a name="l17652"></a><span class="lineno">17652</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000 || VMA_BIND_MEMORY2</span></div>
-<div class="line"><a name="l17653"></a><span class="lineno">17653</span>&#160;        <span class="keywordflow">if</span>((m_UseKhrBindMemory2 || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0)) &amp;&amp;</div>
-<div class="line"><a name="l17654"></a><span class="lineno">17654</span>&#160;            m_VulkanFunctions.vkBindBufferMemory2KHR != VMA_NULL)</div>
-<div class="line"><a name="l17655"></a><span class="lineno">17655</span>&#160;        {</div>
-<div class="line"><a name="l17656"></a><span class="lineno">17656</span>&#160;            VkBindBufferMemoryInfoKHR bindBufferMemoryInfo = { VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR };</div>
-<div class="line"><a name="l17657"></a><span class="lineno">17657</span>&#160;            bindBufferMemoryInfo.pNext = pNext;</div>
-<div class="line"><a name="l17658"></a><span class="lineno">17658</span>&#160;            bindBufferMemoryInfo.buffer = buffer;</div>
-<div class="line"><a name="l17659"></a><span class="lineno">17659</span>&#160;            bindBufferMemoryInfo.memory = memory;</div>
-<div class="line"><a name="l17660"></a><span class="lineno">17660</span>&#160;            bindBufferMemoryInfo.memoryOffset = memoryOffset;</div>
-<div class="line"><a name="l17661"></a><span class="lineno">17661</span>&#160;            <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindBufferMemory2KHR)(m_hDevice, 1, &amp;bindBufferMemoryInfo);</div>
-<div class="line"><a name="l17662"></a><span class="lineno">17662</span>&#160;        }</div>
-<div class="line"><a name="l17663"></a><span class="lineno">17663</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17664"></a><span class="lineno">17664</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_VULKAN_VERSION &gt;= 1001000 || VMA_BIND_MEMORY2</span></div>
-<div class="line"><a name="l17665"></a><span class="lineno">17665</span>&#160;        {</div>
-<div class="line"><a name="l17666"></a><span class="lineno">17666</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_EXTENSION_NOT_PRESENT;</div>
-<div class="line"><a name="l17667"></a><span class="lineno">17667</span>&#160;        }</div>
-<div class="line"><a name="l17668"></a><span class="lineno">17668</span>&#160;    }</div>
-<div class="line"><a name="l17669"></a><span class="lineno">17669</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17670"></a><span class="lineno">17670</span>&#160;    {</div>
-<div class="line"><a name="l17671"></a><span class="lineno">17671</span>&#160;        <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindBufferMemory)(m_hDevice, buffer, memory, memoryOffset);</div>
-<div class="line"><a name="l17672"></a><span class="lineno">17672</span>&#160;    }</div>
-<div class="line"><a name="l17673"></a><span class="lineno">17673</span>&#160;}</div>
-<div class="line"><a name="l17674"></a><span class="lineno">17674</span>&#160; </div>
-<div class="line"><a name="l17675"></a><span class="lineno">17675</span>&#160;VkResult VmaAllocator_T::BindVulkanImage(</div>
-<div class="line"><a name="l17676"></a><span class="lineno">17676</span>&#160;    VkDeviceMemory memory,</div>
-<div class="line"><a name="l17677"></a><span class="lineno">17677</span>&#160;    VkDeviceSize memoryOffset,</div>
-<div class="line"><a name="l17678"></a><span class="lineno">17678</span>&#160;    VkImage image,</div>
-<div class="line"><a name="l17679"></a><span class="lineno">17679</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
-<div class="line"><a name="l17680"></a><span class="lineno">17680</span>&#160;{</div>
-<div class="line"><a name="l17681"></a><span class="lineno">17681</span>&#160;    <span class="keywordflow">if</span>(pNext != VMA_NULL)</div>
-<div class="line"><a name="l17682"></a><span class="lineno">17682</span>&#160;    {</div>
-<div class="line"><a name="l17683"></a><span class="lineno">17683</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000 || VMA_BIND_MEMORY2</span></div>
-<div class="line"><a name="l17684"></a><span class="lineno">17684</span>&#160;        <span class="keywordflow">if</span>((m_UseKhrBindMemory2 || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0)) &amp;&amp;</div>
-<div class="line"><a name="l17685"></a><span class="lineno">17685</span>&#160;            m_VulkanFunctions.vkBindImageMemory2KHR != VMA_NULL)</div>
-<div class="line"><a name="l17686"></a><span class="lineno">17686</span>&#160;        {</div>
-<div class="line"><a name="l17687"></a><span class="lineno">17687</span>&#160;            VkBindImageMemoryInfoKHR bindBufferMemoryInfo = { VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR };</div>
-<div class="line"><a name="l17688"></a><span class="lineno">17688</span>&#160;            bindBufferMemoryInfo.pNext = pNext;</div>
-<div class="line"><a name="l17689"></a><span class="lineno">17689</span>&#160;            bindBufferMemoryInfo.image = image;</div>
-<div class="line"><a name="l17690"></a><span class="lineno">17690</span>&#160;            bindBufferMemoryInfo.memory = memory;</div>
-<div class="line"><a name="l17691"></a><span class="lineno">17691</span>&#160;            bindBufferMemoryInfo.memoryOffset = memoryOffset;</div>
-<div class="line"><a name="l17692"></a><span class="lineno">17692</span>&#160;            <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindImageMemory2KHR)(m_hDevice, 1, &amp;bindBufferMemoryInfo);</div>
-<div class="line"><a name="l17693"></a><span class="lineno">17693</span>&#160;        }</div>
-<div class="line"><a name="l17694"></a><span class="lineno">17694</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17695"></a><span class="lineno">17695</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_BIND_MEMORY2</span></div>
-<div class="line"><a name="l17696"></a><span class="lineno">17696</span>&#160;        {</div>
-<div class="line"><a name="l17697"></a><span class="lineno">17697</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_EXTENSION_NOT_PRESENT;</div>
-<div class="line"><a name="l17698"></a><span class="lineno">17698</span>&#160;        }</div>
-<div class="line"><a name="l17699"></a><span class="lineno">17699</span>&#160;    }</div>
-<div class="line"><a name="l17700"></a><span class="lineno">17700</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17701"></a><span class="lineno">17701</span>&#160;    {</div>
-<div class="line"><a name="l17702"></a><span class="lineno">17702</span>&#160;        <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindImageMemory)(m_hDevice, image, memory, memoryOffset);</div>
-<div class="line"><a name="l17703"></a><span class="lineno">17703</span>&#160;    }</div>
-<div class="line"><a name="l17704"></a><span class="lineno">17704</span>&#160;}</div>
-<div class="line"><a name="l17705"></a><span class="lineno">17705</span>&#160; </div>
-<div class="line"><a name="l17706"></a><span class="lineno">17706</span>&#160;VkResult VmaAllocator_T::Map(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation, <span class="keywordtype">void</span>** ppData)</div>
-<div class="line"><a name="l17707"></a><span class="lineno">17707</span>&#160;{</div>
-<div class="line"><a name="l17708"></a><span class="lineno">17708</span>&#160;    <span class="keywordflow">if</span>(hAllocation-&gt;CanBecomeLost())</div>
-<div class="line"><a name="l17709"></a><span class="lineno">17709</span>&#160;    {</div>
-<div class="line"><a name="l17710"></a><span class="lineno">17710</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_MEMORY_MAP_FAILED;</div>
-<div class="line"><a name="l17711"></a><span class="lineno">17711</span>&#160;    }</div>
-<div class="line"><a name="l17712"></a><span class="lineno">17712</span>&#160; </div>
-<div class="line"><a name="l17713"></a><span class="lineno">17713</span>&#160;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</div>
-<div class="line"><a name="l17714"></a><span class="lineno">17714</span>&#160;    {</div>
-<div class="line"><a name="l17715"></a><span class="lineno">17715</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
-<div class="line"><a name="l17716"></a><span class="lineno">17716</span>&#160;        {</div>
-<div class="line"><a name="l17717"></a><span class="lineno">17717</span>&#160;            VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = hAllocation-&gt;GetBlock();</div>
-<div class="line"><a name="l17718"></a><span class="lineno">17718</span>&#160;            <span class="keywordtype">char</span> *pBytes = VMA_NULL;</div>
-<div class="line"><a name="l17719"></a><span class="lineno">17719</span>&#160;            VkResult res = pBlock-&gt;Map(<span class="keyword">this</span>, 1, (<span class="keywordtype">void</span>**)&amp;pBytes);</div>
-<div class="line"><a name="l17720"></a><span class="lineno">17720</span>&#160;            <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l17721"></a><span class="lineno">17721</span>&#160;            {</div>
-<div class="line"><a name="l17722"></a><span class="lineno">17722</span>&#160;                *ppData = pBytes + (ptrdiff_t)hAllocation-&gt;GetOffset();</div>
-<div class="line"><a name="l17723"></a><span class="lineno">17723</span>&#160;                hAllocation-&gt;BlockAllocMap();</div>
-<div class="line"><a name="l17724"></a><span class="lineno">17724</span>&#160;            }</div>
-<div class="line"><a name="l17725"></a><span class="lineno">17725</span>&#160;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l17726"></a><span class="lineno">17726</span>&#160;        }</div>
-<div class="line"><a name="l17727"></a><span class="lineno">17727</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
-<div class="line"><a name="l17728"></a><span class="lineno">17728</span>&#160;        <span class="keywordflow">return</span> hAllocation-&gt;DedicatedAllocMap(<span class="keyword">this</span>, ppData);</div>
-<div class="line"><a name="l17729"></a><span class="lineno">17729</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l17730"></a><span class="lineno">17730</span>&#160;        VMA_ASSERT(0);</div>
-<div class="line"><a name="l17731"></a><span class="lineno">17731</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_MEMORY_MAP_FAILED;</div>
-<div class="line"><a name="l17732"></a><span class="lineno">17732</span>&#160;    }</div>
-<div class="line"><a name="l17733"></a><span class="lineno">17733</span>&#160;}</div>
-<div class="line"><a name="l17734"></a><span class="lineno">17734</span>&#160; </div>
-<div class="line"><a name="l17735"></a><span class="lineno">17735</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::Unmap(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</div>
-<div class="line"><a name="l17736"></a><span class="lineno">17736</span>&#160;{</div>
-<div class="line"><a name="l17737"></a><span class="lineno">17737</span>&#160;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</div>
-<div class="line"><a name="l17738"></a><span class="lineno">17738</span>&#160;    {</div>
-<div class="line"><a name="l17739"></a><span class="lineno">17739</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
-<div class="line"><a name="l17740"></a><span class="lineno">17740</span>&#160;        {</div>
-<div class="line"><a name="l17741"></a><span class="lineno">17741</span>&#160;            VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = hAllocation-&gt;GetBlock();</div>
-<div class="line"><a name="l17742"></a><span class="lineno">17742</span>&#160;            hAllocation-&gt;BlockAllocUnmap();</div>
-<div class="line"><a name="l17743"></a><span class="lineno">17743</span>&#160;            pBlock-&gt;Unmap(<span class="keyword">this</span>, 1);</div>
-<div class="line"><a name="l17744"></a><span class="lineno">17744</span>&#160;        }</div>
-<div class="line"><a name="l17745"></a><span class="lineno">17745</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17746"></a><span class="lineno">17746</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
-<div class="line"><a name="l17747"></a><span class="lineno">17747</span>&#160;        hAllocation-&gt;DedicatedAllocUnmap(<span class="keyword">this</span>);</div>
-<div class="line"><a name="l17748"></a><span class="lineno">17748</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17749"></a><span class="lineno">17749</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l17750"></a><span class="lineno">17750</span>&#160;        VMA_ASSERT(0);</div>
-<div class="line"><a name="l17751"></a><span class="lineno">17751</span>&#160;    }</div>
-<div class="line"><a name="l17752"></a><span class="lineno">17752</span>&#160;}</div>
-<div class="line"><a name="l17753"></a><span class="lineno">17753</span>&#160; </div>
-<div class="line"><a name="l17754"></a><span class="lineno">17754</span>&#160;VkResult VmaAllocator_T::BindBufferMemory(</div>
-<div class="line"><a name="l17755"></a><span class="lineno">17755</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
-<div class="line"><a name="l17756"></a><span class="lineno">17756</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
-<div class="line"><a name="l17757"></a><span class="lineno">17757</span>&#160;    VkBuffer hBuffer,</div>
-<div class="line"><a name="l17758"></a><span class="lineno">17758</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
-<div class="line"><a name="l17759"></a><span class="lineno">17759</span>&#160;{</div>
-<div class="line"><a name="l17760"></a><span class="lineno">17760</span>&#160;    VkResult res = VK_SUCCESS;</div>
-<div class="line"><a name="l17761"></a><span class="lineno">17761</span>&#160;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</div>
-<div class="line"><a name="l17762"></a><span class="lineno">17762</span>&#160;    {</div>
-<div class="line"><a name="l17763"></a><span class="lineno">17763</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
-<div class="line"><a name="l17764"></a><span class="lineno">17764</span>&#160;        res = BindVulkanBuffer(hAllocation-&gt;GetMemory(), allocationLocalOffset, hBuffer, pNext);</div>
-<div class="line"><a name="l17765"></a><span class="lineno">17765</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17766"></a><span class="lineno">17766</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
-<div class="line"><a name="l17767"></a><span class="lineno">17767</span>&#160;    {</div>
-<div class="line"><a name="l17768"></a><span class="lineno">17768</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = hAllocation-&gt;GetBlock();</div>
-<div class="line"><a name="l17769"></a><span class="lineno">17769</span>&#160;        VMA_ASSERT(pBlock &amp;&amp; <span class="stringliteral">&quot;Binding buffer to allocation that doesn&#39;t belong to any block. Is the allocation lost?&quot;</span>);</div>
-<div class="line"><a name="l17770"></a><span class="lineno">17770</span>&#160;        res = pBlock-&gt;BindBufferMemory(<span class="keyword">this</span>, hAllocation, allocationLocalOffset, hBuffer, pNext);</div>
-<div class="line"><a name="l17771"></a><span class="lineno">17771</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17772"></a><span class="lineno">17772</span>&#160;    }</div>
-<div class="line"><a name="l17773"></a><span class="lineno">17773</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l17774"></a><span class="lineno">17774</span>&#160;        VMA_ASSERT(0);</div>
-<div class="line"><a name="l17775"></a><span class="lineno">17775</span>&#160;    }</div>
-<div class="line"><a name="l17776"></a><span class="lineno">17776</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l17777"></a><span class="lineno">17777</span>&#160;}</div>
-<div class="line"><a name="l17778"></a><span class="lineno">17778</span>&#160; </div>
-<div class="line"><a name="l17779"></a><span class="lineno">17779</span>&#160;VkResult VmaAllocator_T::BindImageMemory(</div>
-<div class="line"><a name="l17780"></a><span class="lineno">17780</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
-<div class="line"><a name="l17781"></a><span class="lineno">17781</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
-<div class="line"><a name="l17782"></a><span class="lineno">17782</span>&#160;    VkImage hImage,</div>
-<div class="line"><a name="l17783"></a><span class="lineno">17783</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
-<div class="line"><a name="l17784"></a><span class="lineno">17784</span>&#160;{</div>
-<div class="line"><a name="l17785"></a><span class="lineno">17785</span>&#160;    VkResult res = VK_SUCCESS;</div>
-<div class="line"><a name="l17786"></a><span class="lineno">17786</span>&#160;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</div>
-<div class="line"><a name="l17787"></a><span class="lineno">17787</span>&#160;    {</div>
-<div class="line"><a name="l17788"></a><span class="lineno">17788</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
-<div class="line"><a name="l17789"></a><span class="lineno">17789</span>&#160;        res = BindVulkanImage(hAllocation-&gt;GetMemory(), allocationLocalOffset, hImage, pNext);</div>
-<div class="line"><a name="l17790"></a><span class="lineno">17790</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17791"></a><span class="lineno">17791</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
-<div class="line"><a name="l17792"></a><span class="lineno">17792</span>&#160;    {</div>
-<div class="line"><a name="l17793"></a><span class="lineno">17793</span>&#160;        VmaDeviceMemoryBlock* pBlock = hAllocation-&gt;GetBlock();</div>
-<div class="line"><a name="l17794"></a><span class="lineno">17794</span>&#160;        VMA_ASSERT(pBlock &amp;&amp; <span class="stringliteral">&quot;Binding image to allocation that doesn&#39;t belong to any block. Is the allocation lost?&quot;</span>);</div>
-<div class="line"><a name="l17795"></a><span class="lineno">17795</span>&#160;        res = pBlock-&gt;BindImageMemory(<span class="keyword">this</span>, hAllocation, allocationLocalOffset, hImage, pNext);</div>
-<div class="line"><a name="l17796"></a><span class="lineno">17796</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17797"></a><span class="lineno">17797</span>&#160;    }</div>
-<div class="line"><a name="l17798"></a><span class="lineno">17798</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l17799"></a><span class="lineno">17799</span>&#160;        VMA_ASSERT(0);</div>
-<div class="line"><a name="l17800"></a><span class="lineno">17800</span>&#160;    }</div>
-<div class="line"><a name="l17801"></a><span class="lineno">17801</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l17802"></a><span class="lineno">17802</span>&#160;}</div>
-<div class="line"><a name="l17803"></a><span class="lineno">17803</span>&#160; </div>
-<div class="line"><a name="l17804"></a><span class="lineno">17804</span>&#160;VkResult VmaAllocator_T::FlushOrInvalidateAllocation(</div>
-<div class="line"><a name="l17805"></a><span class="lineno">17805</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
-<div class="line"><a name="l17806"></a><span class="lineno">17806</span>&#160;    VkDeviceSize offset, VkDeviceSize size,</div>
-<div class="line"><a name="l17807"></a><span class="lineno">17807</span>&#160;    VMA_CACHE_OPERATION op)</div>
-<div class="line"><a name="l17808"></a><span class="lineno">17808</span>&#160;{</div>
-<div class="line"><a name="l17809"></a><span class="lineno">17809</span>&#160;    VkResult res = VK_SUCCESS;</div>
-<div class="line"><a name="l17810"></a><span class="lineno">17810</span>&#160; </div>
-<div class="line"><a name="l17811"></a><span class="lineno">17811</span>&#160;    VkMappedMemoryRange memRange = {};</div>
-<div class="line"><a name="l17812"></a><span class="lineno">17812</span>&#160;    <span class="keywordflow">if</span>(GetFlushOrInvalidateRange(hAllocation, offset, size, memRange))</div>
-<div class="line"><a name="l17813"></a><span class="lineno">17813</span>&#160;    {</div>
-<div class="line"><a name="l17814"></a><span class="lineno">17814</span>&#160;        <span class="keywordflow">switch</span>(op)</div>
-<div class="line"><a name="l17815"></a><span class="lineno">17815</span>&#160;        {</div>
-<div class="line"><a name="l17816"></a><span class="lineno">17816</span>&#160;        <span class="keywordflow">case</span> VMA_CACHE_FLUSH:</div>
-<div class="line"><a name="l17817"></a><span class="lineno">17817</span>&#160;            res = (*GetVulkanFunctions().vkFlushMappedMemoryRanges)(m_hDevice, 1, &amp;memRange);</div>
-<div class="line"><a name="l17818"></a><span class="lineno">17818</span>&#160;            <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17819"></a><span class="lineno">17819</span>&#160;        <span class="keywordflow">case</span> VMA_CACHE_INVALIDATE:</div>
-<div class="line"><a name="l17820"></a><span class="lineno">17820</span>&#160;            res = (*GetVulkanFunctions().vkInvalidateMappedMemoryRanges)(m_hDevice, 1, &amp;memRange);</div>
-<div class="line"><a name="l17821"></a><span class="lineno">17821</span>&#160;            <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17822"></a><span class="lineno">17822</span>&#160;        <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l17823"></a><span class="lineno">17823</span>&#160;            VMA_ASSERT(0);</div>
-<div class="line"><a name="l17824"></a><span class="lineno">17824</span>&#160;        }</div>
-<div class="line"><a name="l17825"></a><span class="lineno">17825</span>&#160;    }</div>
-<div class="line"><a name="l17826"></a><span class="lineno">17826</span>&#160;    <span class="comment">// else: Just ignore this call.</span></div>
-<div class="line"><a name="l17827"></a><span class="lineno">17827</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l17828"></a><span class="lineno">17828</span>&#160;}</div>
-<div class="line"><a name="l17829"></a><span class="lineno">17829</span>&#160; </div>
-<div class="line"><a name="l17830"></a><span class="lineno">17830</span>&#160;VkResult VmaAllocator_T::FlushOrInvalidateAllocations(</div>
-<div class="line"><a name="l17831"></a><span class="lineno">17831</span>&#160;    uint32_t allocationCount,</div>
-<div class="line"><a name="l17832"></a><span class="lineno">17832</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* allocations,</div>
-<div class="line"><a name="l17833"></a><span class="lineno">17833</span>&#160;    <span class="keyword">const</span> VkDeviceSize* offsets, <span class="keyword">const</span> VkDeviceSize* sizes,</div>
-<div class="line"><a name="l17834"></a><span class="lineno">17834</span>&#160;    VMA_CACHE_OPERATION op)</div>
-<div class="line"><a name="l17835"></a><span class="lineno">17835</span>&#160;{</div>
-<div class="line"><a name="l17836"></a><span class="lineno">17836</span>&#160;    <span class="keyword">typedef</span> VmaStlAllocator&lt;VkMappedMemoryRange&gt; RangeAllocator;</div>
-<div class="line"><a name="l17837"></a><span class="lineno">17837</span>&#160;    <span class="keyword">typedef</span> VmaSmallVector&lt;VkMappedMemoryRange, RangeAllocator, 16&gt; RangeVector;</div>
-<div class="line"><a name="l17838"></a><span class="lineno">17838</span>&#160;    RangeVector ranges = RangeVector(RangeAllocator(GetAllocationCallbacks()));</div>
-<div class="line"><a name="l17839"></a><span class="lineno">17839</span>&#160; </div>
-<div class="line"><a name="l17840"></a><span class="lineno">17840</span>&#160;    <span class="keywordflow">for</span>(uint32_t allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</div>
-<div class="line"><a name="l17841"></a><span class="lineno">17841</span>&#160;    {</div>
-<div class="line"><a name="l17842"></a><span class="lineno">17842</span>&#160;        <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> alloc = allocations[allocIndex];</div>
-<div class="line"><a name="l17843"></a><span class="lineno">17843</span>&#160;        <span class="keyword">const</span> VkDeviceSize offset = offsets != VMA_NULL ? offsets[allocIndex] : 0;</div>
-<div class="line"><a name="l17844"></a><span class="lineno">17844</span>&#160;        <span class="keyword">const</span> VkDeviceSize size = sizes != VMA_NULL ? sizes[allocIndex] : VK_WHOLE_SIZE;</div>
-<div class="line"><a name="l17845"></a><span class="lineno">17845</span>&#160;        VkMappedMemoryRange newRange;</div>
-<div class="line"><a name="l17846"></a><span class="lineno">17846</span>&#160;        <span class="keywordflow">if</span>(GetFlushOrInvalidateRange(alloc, offset, size, newRange))</div>
-<div class="line"><a name="l17847"></a><span class="lineno">17847</span>&#160;        {</div>
-<div class="line"><a name="l17848"></a><span class="lineno">17848</span>&#160;            ranges.push_back(newRange);</div>
-<div class="line"><a name="l17849"></a><span class="lineno">17849</span>&#160;        }</div>
-<div class="line"><a name="l17850"></a><span class="lineno">17850</span>&#160;    }</div>
-<div class="line"><a name="l17851"></a><span class="lineno">17851</span>&#160; </div>
-<div class="line"><a name="l17852"></a><span class="lineno">17852</span>&#160;    VkResult res = VK_SUCCESS;</div>
-<div class="line"><a name="l17853"></a><span class="lineno">17853</span>&#160;    <span class="keywordflow">if</span>(!ranges.empty())</div>
-<div class="line"><a name="l17854"></a><span class="lineno">17854</span>&#160;    {</div>
-<div class="line"><a name="l17855"></a><span class="lineno">17855</span>&#160;        <span class="keywordflow">switch</span>(op)</div>
-<div class="line"><a name="l17856"></a><span class="lineno">17856</span>&#160;        {</div>
-<div class="line"><a name="l17857"></a><span class="lineno">17857</span>&#160;        <span class="keywordflow">case</span> VMA_CACHE_FLUSH:</div>
-<div class="line"><a name="l17858"></a><span class="lineno">17858</span>&#160;            res = (*GetVulkanFunctions().vkFlushMappedMemoryRanges)(m_hDevice, (uint32_t)ranges.size(), ranges.data());</div>
-<div class="line"><a name="l17859"></a><span class="lineno">17859</span>&#160;            <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17860"></a><span class="lineno">17860</span>&#160;        <span class="keywordflow">case</span> VMA_CACHE_INVALIDATE:</div>
-<div class="line"><a name="l17861"></a><span class="lineno">17861</span>&#160;            res = (*GetVulkanFunctions().vkInvalidateMappedMemoryRanges)(m_hDevice, (uint32_t)ranges.size(), ranges.data());</div>
-<div class="line"><a name="l17862"></a><span class="lineno">17862</span>&#160;            <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17863"></a><span class="lineno">17863</span>&#160;        <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l17864"></a><span class="lineno">17864</span>&#160;            VMA_ASSERT(0);</div>
-<div class="line"><a name="l17865"></a><span class="lineno">17865</span>&#160;        }</div>
-<div class="line"><a name="l17866"></a><span class="lineno">17866</span>&#160;    }</div>
-<div class="line"><a name="l17867"></a><span class="lineno">17867</span>&#160;    <span class="comment">// else: Just ignore this call.</span></div>
-<div class="line"><a name="l17868"></a><span class="lineno">17868</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l17869"></a><span class="lineno">17869</span>&#160;}</div>
-<div class="line"><a name="l17870"></a><span class="lineno">17870</span>&#160; </div>
-<div class="line"><a name="l17871"></a><span class="lineno">17871</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::FreeDedicatedMemory(<span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l17872"></a><span class="lineno">17872</span>&#160;{</div>
-<div class="line"><a name="l17873"></a><span class="lineno">17873</span>&#160;    VMA_ASSERT(allocation &amp;&amp; allocation-&gt;GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED);</div>
-<div class="line"><a name="l17874"></a><span class="lineno">17874</span>&#160; </div>
-<div class="line"><a name="l17875"></a><span class="lineno">17875</span>&#160;    <span class="keyword">const</span> uint32_t memTypeIndex = allocation-&gt;GetMemoryTypeIndex();</div>
-<div class="line"><a name="l17876"></a><span class="lineno">17876</span>&#160;    {</div>
-<div class="line"><a name="l17877"></a><span class="lineno">17877</span>&#160;        VmaMutexLockWrite lock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
-<div class="line"><a name="l17878"></a><span class="lineno">17878</span>&#160;        DedicatedAllocationLinkedList&amp; dedicatedAllocations = m_DedicatedAllocations[memTypeIndex];</div>
-<div class="line"><a name="l17879"></a><span class="lineno">17879</span>&#160;        dedicatedAllocations.Remove(allocation);</div>
-<div class="line"><a name="l17880"></a><span class="lineno">17880</span>&#160;    }</div>
-<div class="line"><a name="l17881"></a><span class="lineno">17881</span>&#160; </div>
-<div class="line"><a name="l17882"></a><span class="lineno">17882</span>&#160;    VkDeviceMemory hMemory = allocation-&gt;GetMemory();</div>
-<div class="line"><a name="l17883"></a><span class="lineno">17883</span>&#160; </div>
-<div class="line"><a name="l17884"></a><span class="lineno">17884</span>&#160;    <span class="comment">/*</span></div>
-<div class="line"><a name="l17885"></a><span class="lineno">17885</span>&#160;<span class="comment">    There is no need to call this, because Vulkan spec allows to skip vkUnmapMemory</span></div>
-<div class="line"><a name="l17886"></a><span class="lineno">17886</span>&#160;<span class="comment">    before vkFreeMemory.</span></div>
-<div class="line"><a name="l17887"></a><span class="lineno">17887</span>&#160;<span class="comment"></span> </div>
-<div class="line"><a name="l17888"></a><span class="lineno">17888</span>&#160;<span class="comment">    if(allocation-&gt;GetMappedData() != VMA_NULL)</span></div>
-<div class="line"><a name="l17889"></a><span class="lineno">17889</span>&#160;<span class="comment">    {</span></div>
-<div class="line"><a name="l17890"></a><span class="lineno">17890</span>&#160;<span class="comment">        (*m_VulkanFunctions.vkUnmapMemory)(m_hDevice, hMemory);</span></div>
-<div class="line"><a name="l17891"></a><span class="lineno">17891</span>&#160;<span class="comment">    }</span></div>
-<div class="line"><a name="l17892"></a><span class="lineno">17892</span>&#160;<span class="comment">    */</span></div>
-<div class="line"><a name="l17893"></a><span class="lineno">17893</span>&#160; </div>
-<div class="line"><a name="l17894"></a><span class="lineno">17894</span>&#160;    FreeVulkanMemory(memTypeIndex, allocation-&gt;GetSize(), hMemory);</div>
-<div class="line"><a name="l17895"></a><span class="lineno">17895</span>&#160; </div>
-<div class="line"><a name="l17896"></a><span class="lineno">17896</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Freed DedicatedMemory MemoryTypeIndex=%u&quot;</span>, memTypeIndex);</div>
-<div class="line"><a name="l17897"></a><span class="lineno">17897</span>&#160;}</div>
-<div class="line"><a name="l17898"></a><span class="lineno">17898</span>&#160; </div>
-<div class="line"><a name="l17899"></a><span class="lineno">17899</span>&#160;uint32_t VmaAllocator_T::CalculateGpuDefragmentationMemoryTypeBits()<span class="keyword"> const</span></div>
-<div class="line"><a name="l17900"></a><span class="lineno">17900</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l17901"></a><span class="lineno">17901</span>&#160;    VkBufferCreateInfo dummyBufCreateInfo;</div>
-<div class="line"><a name="l17902"></a><span class="lineno">17902</span>&#160;    VmaFillGpuDefragmentationBufferCreateInfo(dummyBufCreateInfo);</div>
-<div class="line"><a name="l17903"></a><span class="lineno">17903</span>&#160; </div>
-<div class="line"><a name="l17904"></a><span class="lineno">17904</span>&#160;    uint32_t memoryTypeBits = 0;</div>
-<div class="line"><a name="l17905"></a><span class="lineno">17905</span>&#160; </div>
-<div class="line"><a name="l17906"></a><span class="lineno">17906</span>&#160;    <span class="comment">// Create buffer.</span></div>
-<div class="line"><a name="l17907"></a><span class="lineno">17907</span>&#160;    VkBuffer buf = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l17908"></a><span class="lineno">17908</span>&#160;    VkResult res = (*GetVulkanFunctions().vkCreateBuffer)(</div>
-<div class="line"><a name="l17909"></a><span class="lineno">17909</span>&#160;        m_hDevice, &amp;dummyBufCreateInfo, GetAllocationCallbacks(), &amp;buf);</div>
-<div class="line"><a name="l17910"></a><span class="lineno">17910</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l17911"></a><span class="lineno">17911</span>&#160;    {</div>
-<div class="line"><a name="l17912"></a><span class="lineno">17912</span>&#160;        <span class="comment">// Query for supported memory types.</span></div>
-<div class="line"><a name="l17913"></a><span class="lineno">17913</span>&#160;        VkMemoryRequirements memReq;</div>
-<div class="line"><a name="l17914"></a><span class="lineno">17914</span>&#160;        (*GetVulkanFunctions().vkGetBufferMemoryRequirements)(m_hDevice, buf, &amp;memReq);</div>
-<div class="line"><a name="l17915"></a><span class="lineno">17915</span>&#160;        memoryTypeBits = memReq.memoryTypeBits;</div>
-<div class="line"><a name="l17916"></a><span class="lineno">17916</span>&#160; </div>
-<div class="line"><a name="l17917"></a><span class="lineno">17917</span>&#160;        <span class="comment">// Destroy buffer.</span></div>
-<div class="line"><a name="l17918"></a><span class="lineno">17918</span>&#160;        (*GetVulkanFunctions().vkDestroyBuffer)(m_hDevice, buf, GetAllocationCallbacks());</div>
-<div class="line"><a name="l17919"></a><span class="lineno">17919</span>&#160;    }</div>
-<div class="line"><a name="l17920"></a><span class="lineno">17920</span>&#160; </div>
-<div class="line"><a name="l17921"></a><span class="lineno">17921</span>&#160;    <span class="keywordflow">return</span> memoryTypeBits;</div>
-<div class="line"><a name="l17922"></a><span class="lineno">17922</span>&#160;}</div>
-<div class="line"><a name="l17923"></a><span class="lineno">17923</span>&#160; </div>
-<div class="line"><a name="l17924"></a><span class="lineno">17924</span>&#160;uint32_t VmaAllocator_T::CalculateGlobalMemoryTypeBits()<span class="keyword"> const</span></div>
-<div class="line"><a name="l17925"></a><span class="lineno">17925</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l17926"></a><span class="lineno">17926</span>&#160;    <span class="comment">// Make sure memory information is already fetched.</span></div>
-<div class="line"><a name="l17927"></a><span class="lineno">17927</span>&#160;    VMA_ASSERT(GetMemoryTypeCount() &gt; 0);</div>
-<div class="line"><a name="l17928"></a><span class="lineno">17928</span>&#160; </div>
-<div class="line"><a name="l17929"></a><span class="lineno">17929</span>&#160;    uint32_t memoryTypeBits = UINT32_MAX;</div>
-<div class="line"><a name="l17930"></a><span class="lineno">17930</span>&#160; </div>
-<div class="line"><a name="l17931"></a><span class="lineno">17931</span>&#160;    <span class="keywordflow">if</span>(!m_UseAmdDeviceCoherentMemory)</div>
-<div class="line"><a name="l17932"></a><span class="lineno">17932</span>&#160;    {</div>
-<div class="line"><a name="l17933"></a><span class="lineno">17933</span>&#160;        <span class="comment">// Exclude memory types that have VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD.</span></div>
-<div class="line"><a name="l17934"></a><span class="lineno">17934</span>&#160;        <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
-<div class="line"><a name="l17935"></a><span class="lineno">17935</span>&#160;        {</div>
-<div class="line"><a name="l17936"></a><span class="lineno">17936</span>&#160;            <span class="keywordflow">if</span>((m_MemProps.memoryTypes[memTypeIndex].propertyFlags &amp; VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY) != 0)</div>
-<div class="line"><a name="l17937"></a><span class="lineno">17937</span>&#160;            {</div>
-<div class="line"><a name="l17938"></a><span class="lineno">17938</span>&#160;                memoryTypeBits &amp;= ~(1u &lt;&lt; memTypeIndex);</div>
-<div class="line"><a name="l17939"></a><span class="lineno">17939</span>&#160;            }</div>
-<div class="line"><a name="l17940"></a><span class="lineno">17940</span>&#160;        }</div>
-<div class="line"><a name="l17941"></a><span class="lineno">17941</span>&#160;    }</div>
-<div class="line"><a name="l17942"></a><span class="lineno">17942</span>&#160; </div>
-<div class="line"><a name="l17943"></a><span class="lineno">17943</span>&#160;    <span class="keywordflow">return</span> memoryTypeBits;</div>
-<div class="line"><a name="l17944"></a><span class="lineno">17944</span>&#160;}</div>
-<div class="line"><a name="l17945"></a><span class="lineno">17945</span>&#160; </div>
-<div class="line"><a name="l17946"></a><span class="lineno">17946</span>&#160;<span class="keywordtype">bool</span> VmaAllocator_T::GetFlushOrInvalidateRange(</div>
-<div class="line"><a name="l17947"></a><span class="lineno">17947</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l17948"></a><span class="lineno">17948</span>&#160;    VkDeviceSize offset, VkDeviceSize size,</div>
-<div class="line"><a name="l17949"></a><span class="lineno">17949</span>&#160;    VkMappedMemoryRange&amp; outRange)<span class="keyword"> const</span></div>
-<div class="line"><a name="l17950"></a><span class="lineno">17950</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l17951"></a><span class="lineno">17951</span>&#160;    <span class="keyword">const</span> uint32_t memTypeIndex = allocation-&gt;GetMemoryTypeIndex();</div>
-<div class="line"><a name="l17952"></a><span class="lineno">17952</span>&#160;    <span class="keywordflow">if</span>(size &gt; 0 &amp;&amp; IsMemoryTypeNonCoherent(memTypeIndex))</div>
-<div class="line"><a name="l17953"></a><span class="lineno">17953</span>&#160;    {</div>
-<div class="line"><a name="l17954"></a><span class="lineno">17954</span>&#160;        <span class="keyword">const</span> VkDeviceSize nonCoherentAtomSize = m_PhysicalDeviceProperties.limits.nonCoherentAtomSize;</div>
-<div class="line"><a name="l17955"></a><span class="lineno">17955</span>&#160;        <span class="keyword">const</span> VkDeviceSize allocationSize = allocation-&gt;GetSize();</div>
-<div class="line"><a name="l17956"></a><span class="lineno">17956</span>&#160;        VMA_ASSERT(offset &lt;= allocationSize);</div>
-<div class="line"><a name="l17957"></a><span class="lineno">17957</span>&#160; </div>
-<div class="line"><a name="l17958"></a><span class="lineno">17958</span>&#160;        outRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;</div>
-<div class="line"><a name="l17959"></a><span class="lineno">17959</span>&#160;        outRange.pNext = VMA_NULL;</div>
-<div class="line"><a name="l17960"></a><span class="lineno">17960</span>&#160;        outRange.memory = allocation-&gt;GetMemory();</div>
-<div class="line"><a name="l17961"></a><span class="lineno">17961</span>&#160; </div>
-<div class="line"><a name="l17962"></a><span class="lineno">17962</span>&#160;        <span class="keywordflow">switch</span>(allocation-&gt;GetType())</div>
-<div class="line"><a name="l17963"></a><span class="lineno">17963</span>&#160;        {</div>
-<div class="line"><a name="l17964"></a><span class="lineno">17964</span>&#160;        <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
-<div class="line"><a name="l17965"></a><span class="lineno">17965</span>&#160;            outRange.offset = VmaAlignDown(offset, nonCoherentAtomSize);</div>
-<div class="line"><a name="l17966"></a><span class="lineno">17966</span>&#160;            <span class="keywordflow">if</span>(size == VK_WHOLE_SIZE)</div>
-<div class="line"><a name="l17967"></a><span class="lineno">17967</span>&#160;            {</div>
-<div class="line"><a name="l17968"></a><span class="lineno">17968</span>&#160;                outRange.size = allocationSize - outRange.offset;</div>
-<div class="line"><a name="l17969"></a><span class="lineno">17969</span>&#160;            }</div>
-<div class="line"><a name="l17970"></a><span class="lineno">17970</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17971"></a><span class="lineno">17971</span>&#160;            {</div>
-<div class="line"><a name="l17972"></a><span class="lineno">17972</span>&#160;                VMA_ASSERT(offset + size &lt;= allocationSize);</div>
-<div class="line"><a name="l17973"></a><span class="lineno">17973</span>&#160;                outRange.size = VMA_MIN(</div>
-<div class="line"><a name="l17974"></a><span class="lineno">17974</span>&#160;                    VmaAlignUp(size + (offset - outRange.offset), nonCoherentAtomSize),</div>
-<div class="line"><a name="l17975"></a><span class="lineno">17975</span>&#160;                    allocationSize - outRange.offset);</div>
-<div class="line"><a name="l17976"></a><span class="lineno">17976</span>&#160;            }</div>
-<div class="line"><a name="l17977"></a><span class="lineno">17977</span>&#160;            <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l17978"></a><span class="lineno">17978</span>&#160;        <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
-<div class="line"><a name="l17979"></a><span class="lineno">17979</span>&#160;        {</div>
-<div class="line"><a name="l17980"></a><span class="lineno">17980</span>&#160;            <span class="comment">// 1. Still within this allocation.</span></div>
-<div class="line"><a name="l17981"></a><span class="lineno">17981</span>&#160;            outRange.offset = VmaAlignDown(offset, nonCoherentAtomSize);</div>
-<div class="line"><a name="l17982"></a><span class="lineno">17982</span>&#160;            <span class="keywordflow">if</span>(size == VK_WHOLE_SIZE)</div>
-<div class="line"><a name="l17983"></a><span class="lineno">17983</span>&#160;            {</div>
-<div class="line"><a name="l17984"></a><span class="lineno">17984</span>&#160;                size = allocationSize - offset;</div>
-<div class="line"><a name="l17985"></a><span class="lineno">17985</span>&#160;            }</div>
-<div class="line"><a name="l17986"></a><span class="lineno">17986</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l17987"></a><span class="lineno">17987</span>&#160;            {</div>
-<div class="line"><a name="l17988"></a><span class="lineno">17988</span>&#160;                VMA_ASSERT(offset + size &lt;= allocationSize);</div>
-<div class="line"><a name="l17989"></a><span class="lineno">17989</span>&#160;            }</div>
-<div class="line"><a name="l17990"></a><span class="lineno">17990</span>&#160;            outRange.size = VmaAlignUp(size + (offset - outRange.offset), nonCoherentAtomSize);</div>
-<div class="line"><a name="l17991"></a><span class="lineno">17991</span>&#160; </div>
-<div class="line"><a name="l17992"></a><span class="lineno">17992</span>&#160;            <span class="comment">// 2. Adjust to whole block.</span></div>
-<div class="line"><a name="l17993"></a><span class="lineno">17993</span>&#160;            <span class="keyword">const</span> VkDeviceSize allocationOffset = allocation-&gt;GetOffset();</div>
-<div class="line"><a name="l17994"></a><span class="lineno">17994</span>&#160;            VMA_ASSERT(allocationOffset % nonCoherentAtomSize == 0);</div>
-<div class="line"><a name="l17995"></a><span class="lineno">17995</span>&#160;            <span class="keyword">const</span> VkDeviceSize blockSize = allocation-&gt;GetBlock()-&gt;m_pMetadata-&gt;GetSize();</div>
-<div class="line"><a name="l17996"></a><span class="lineno">17996</span>&#160;            outRange.offset += allocationOffset;</div>
-<div class="line"><a name="l17997"></a><span class="lineno">17997</span>&#160;            outRange.size = VMA_MIN(outRange.size, blockSize - outRange.offset);</div>
-<div class="line"><a name="l17998"></a><span class="lineno">17998</span>&#160; </div>
-<div class="line"><a name="l17999"></a><span class="lineno">17999</span>&#160;            <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l18000"></a><span class="lineno">18000</span>&#160;        }</div>
-<div class="line"><a name="l18001"></a><span class="lineno">18001</span>&#160;        <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l18002"></a><span class="lineno">18002</span>&#160;            VMA_ASSERT(0);</div>
-<div class="line"><a name="l18003"></a><span class="lineno">18003</span>&#160;        }</div>
-<div class="line"><a name="l18004"></a><span class="lineno">18004</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l18005"></a><span class="lineno">18005</span>&#160;    }</div>
-<div class="line"><a name="l18006"></a><span class="lineno">18006</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l18007"></a><span class="lineno">18007</span>&#160;}</div>
-<div class="line"><a name="l18008"></a><span class="lineno">18008</span>&#160; </div>
-<div class="line"><a name="l18009"></a><span class="lineno">18009</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l18010"></a><span class="lineno">18010</span>&#160; </div>
-<div class="line"><a name="l18011"></a><span class="lineno">18011</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::UpdateVulkanBudget()</div>
-<div class="line"><a name="l18012"></a><span class="lineno">18012</span>&#160;{</div>
-<div class="line"><a name="l18013"></a><span class="lineno">18013</span>&#160;    VMA_ASSERT(m_UseExtMemoryBudget);</div>
-<div class="line"><a name="l18014"></a><span class="lineno">18014</span>&#160; </div>
-<div class="line"><a name="l18015"></a><span class="lineno">18015</span>&#160;    VkPhysicalDeviceMemoryProperties2KHR memProps = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR };</div>
-<div class="line"><a name="l18016"></a><span class="lineno">18016</span>&#160; </div>
-<div class="line"><a name="l18017"></a><span class="lineno">18017</span>&#160;    VkPhysicalDeviceMemoryBudgetPropertiesEXT budgetProps = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT };</div>
-<div class="line"><a name="l18018"></a><span class="lineno">18018</span>&#160;    VmaPnextChainPushFront(&amp;memProps, &amp;budgetProps);</div>
-<div class="line"><a name="l18019"></a><span class="lineno">18019</span>&#160; </div>
-<div class="line"><a name="l18020"></a><span class="lineno">18020</span>&#160;    GetVulkanFunctions().vkGetPhysicalDeviceMemoryProperties2KHR(m_PhysicalDevice, &amp;memProps);</div>
-<div class="line"><a name="l18021"></a><span class="lineno">18021</span>&#160; </div>
-<div class="line"><a name="l18022"></a><span class="lineno">18022</span>&#160;    {</div>
-<div class="line"><a name="l18023"></a><span class="lineno">18023</span>&#160;        VmaMutexLockWrite lockWrite(m_Budget.m_BudgetMutex, m_UseMutex);</div>
-<div class="line"><a name="l18024"></a><span class="lineno">18024</span>&#160; </div>
-<div class="line"><a name="l18025"></a><span class="lineno">18025</span>&#160;        <span class="keywordflow">for</span>(uint32_t heapIndex = 0; heapIndex &lt; GetMemoryHeapCount(); ++heapIndex)</div>
-<div class="line"><a name="l18026"></a><span class="lineno">18026</span>&#160;        {</div>
-<div class="line"><a name="l18027"></a><span class="lineno">18027</span>&#160;            m_Budget.m_VulkanUsage[heapIndex] = budgetProps.heapUsage[heapIndex];</div>
-<div class="line"><a name="l18028"></a><span class="lineno">18028</span>&#160;            m_Budget.m_VulkanBudget[heapIndex] = budgetProps.heapBudget[heapIndex];</div>
-<div class="line"><a name="l18029"></a><span class="lineno">18029</span>&#160;            m_Budget.m_BlockBytesAtBudgetFetch[heapIndex] = m_Budget.m_BlockBytes[heapIndex].load();</div>
-<div class="line"><a name="l18030"></a><span class="lineno">18030</span>&#160; </div>
-<div class="line"><a name="l18031"></a><span class="lineno">18031</span>&#160;            <span class="comment">// Some bugged drivers return the budget incorrectly, e.g. 0 or much bigger than heap size.</span></div>
-<div class="line"><a name="l18032"></a><span class="lineno">18032</span>&#160;            <span class="keywordflow">if</span>(m_Budget.m_VulkanBudget[heapIndex] == 0)</div>
-<div class="line"><a name="l18033"></a><span class="lineno">18033</span>&#160;            {</div>
-<div class="line"><a name="l18034"></a><span class="lineno">18034</span>&#160;                m_Budget.m_VulkanBudget[heapIndex] = m_MemProps.memoryHeaps[heapIndex].size * 8 / 10; <span class="comment">// 80% heuristics.</span></div>
-<div class="line"><a name="l18035"></a><span class="lineno">18035</span>&#160;            }</div>
-<div class="line"><a name="l18036"></a><span class="lineno">18036</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_Budget.m_VulkanBudget[heapIndex] &gt; m_MemProps.memoryHeaps[heapIndex].size)</div>
-<div class="line"><a name="l18037"></a><span class="lineno">18037</span>&#160;            {</div>
-<div class="line"><a name="l18038"></a><span class="lineno">18038</span>&#160;                m_Budget.m_VulkanBudget[heapIndex] = m_MemProps.memoryHeaps[heapIndex].size;</div>
-<div class="line"><a name="l18039"></a><span class="lineno">18039</span>&#160;            }</div>
-<div class="line"><a name="l18040"></a><span class="lineno">18040</span>&#160;            <span class="keywordflow">if</span>(m_Budget.m_VulkanUsage[heapIndex] == 0 &amp;&amp; m_Budget.m_BlockBytesAtBudgetFetch[heapIndex] &gt; 0)</div>
-<div class="line"><a name="l18041"></a><span class="lineno">18041</span>&#160;            {</div>
-<div class="line"><a name="l18042"></a><span class="lineno">18042</span>&#160;                m_Budget.m_VulkanUsage[heapIndex] = m_Budget.m_BlockBytesAtBudgetFetch[heapIndex];</div>
-<div class="line"><a name="l18043"></a><span class="lineno">18043</span>&#160;            }</div>
-<div class="line"><a name="l18044"></a><span class="lineno">18044</span>&#160;        }</div>
-<div class="line"><a name="l18045"></a><span class="lineno">18045</span>&#160;        m_Budget.m_OperationsSinceBudgetFetch = 0;</div>
-<div class="line"><a name="l18046"></a><span class="lineno">18046</span>&#160;    }</div>
-<div class="line"><a name="l18047"></a><span class="lineno">18047</span>&#160;}</div>
-<div class="line"><a name="l18048"></a><span class="lineno">18048</span>&#160; </div>
-<div class="line"><a name="l18049"></a><span class="lineno">18049</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l18050"></a><span class="lineno">18050</span>&#160; </div>
-<div class="line"><a name="l18051"></a><span class="lineno">18051</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::FillAllocation(<span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation, uint8_t pattern)</div>
-<div class="line"><a name="l18052"></a><span class="lineno">18052</span>&#160;{</div>
-<div class="line"><a name="l18053"></a><span class="lineno">18053</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS &amp;&amp;</div>
-<div class="line"><a name="l18054"></a><span class="lineno">18054</span>&#160;        !hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
-<div class="line"><a name="l18055"></a><span class="lineno">18055</span>&#160;        (m_MemProps.memoryTypes[hAllocation-&gt;GetMemoryTypeIndex()].propertyFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0)</div>
-<div class="line"><a name="l18056"></a><span class="lineno">18056</span>&#160;    {</div>
-<div class="line"><a name="l18057"></a><span class="lineno">18057</span>&#160;        <span class="keywordtype">void</span>* pData = VMA_NULL;</div>
-<div class="line"><a name="l18058"></a><span class="lineno">18058</span>&#160;        VkResult res = Map(hAllocation, &amp;pData);</div>
-<div class="line"><a name="l18059"></a><span class="lineno">18059</span>&#160;        <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l18060"></a><span class="lineno">18060</span>&#160;        {</div>
-<div class="line"><a name="l18061"></a><span class="lineno">18061</span>&#160;            memset(pData, (<span class="keywordtype">int</span>)pattern, (<span class="keywordtype">size_t</span>)hAllocation-&gt;GetSize());</div>
-<div class="line"><a name="l18062"></a><span class="lineno">18062</span>&#160;            FlushOrInvalidateAllocation(hAllocation, 0, VK_WHOLE_SIZE, VMA_CACHE_FLUSH);</div>
-<div class="line"><a name="l18063"></a><span class="lineno">18063</span>&#160;            Unmap(hAllocation);</div>
-<div class="line"><a name="l18064"></a><span class="lineno">18064</span>&#160;        }</div>
-<div class="line"><a name="l18065"></a><span class="lineno">18065</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l18066"></a><span class="lineno">18066</span>&#160;        {</div>
-<div class="line"><a name="l18067"></a><span class="lineno">18067</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VMA_DEBUG_INITIALIZE_ALLOCATIONS is enabled, but couldn&#39;t map memory to fill allocation.&quot;</span>);</div>
-<div class="line"><a name="l18068"></a><span class="lineno">18068</span>&#160;        }</div>
-<div class="line"><a name="l18069"></a><span class="lineno">18069</span>&#160;    }</div>
-<div class="line"><a name="l18070"></a><span class="lineno">18070</span>&#160;}</div>
-<div class="line"><a name="l18071"></a><span class="lineno">18071</span>&#160; </div>
-<div class="line"><a name="l18072"></a><span class="lineno">18072</span>&#160;uint32_t VmaAllocator_T::GetGpuDefragmentationMemoryTypeBits()</div>
-<div class="line"><a name="l18073"></a><span class="lineno">18073</span>&#160;{</div>
-<div class="line"><a name="l18074"></a><span class="lineno">18074</span>&#160;    uint32_t memoryTypeBits = m_GpuDefragmentationMemoryTypeBits.load();</div>
-<div class="line"><a name="l18075"></a><span class="lineno">18075</span>&#160;    <span class="keywordflow">if</span>(memoryTypeBits == UINT32_MAX)</div>
-<div class="line"><a name="l18076"></a><span class="lineno">18076</span>&#160;    {</div>
-<div class="line"><a name="l18077"></a><span class="lineno">18077</span>&#160;        memoryTypeBits = CalculateGpuDefragmentationMemoryTypeBits();</div>
-<div class="line"><a name="l18078"></a><span class="lineno">18078</span>&#160;        m_GpuDefragmentationMemoryTypeBits.store(memoryTypeBits);</div>
-<div class="line"><a name="l18079"></a><span class="lineno">18079</span>&#160;    }</div>
-<div class="line"><a name="l18080"></a><span class="lineno">18080</span>&#160;    <span class="keywordflow">return</span> memoryTypeBits;</div>
-<div class="line"><a name="l18081"></a><span class="lineno">18081</span>&#160;}</div>
-<div class="line"><a name="l18082"></a><span class="lineno">18082</span>&#160; </div>
-<div class="line"><a name="l18083"></a><span class="lineno">18083</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l18084"></a><span class="lineno">18084</span>&#160; </div>
-<div class="line"><a name="l18085"></a><span class="lineno">18085</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::PrintDetailedMap(VmaJsonWriter&amp; json)</div>
-<div class="line"><a name="l18086"></a><span class="lineno">18086</span>&#160;{</div>
-<div class="line"><a name="l18087"></a><span class="lineno">18087</span>&#160;    <span class="keywordtype">bool</span> dedicatedAllocationsStarted = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l18088"></a><span class="lineno">18088</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
-<div class="line"><a name="l18089"></a><span class="lineno">18089</span>&#160;    {</div>
-<div class="line"><a name="l18090"></a><span class="lineno">18090</span>&#160;        VmaMutexLockRead dedicatedAllocationsLock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
-<div class="line"><a name="l18091"></a><span class="lineno">18091</span>&#160;        DedicatedAllocationLinkedList&amp; dedicatedAllocList = m_DedicatedAllocations[memTypeIndex];</div>
-<div class="line"><a name="l18092"></a><span class="lineno">18092</span>&#160;        <span class="keywordflow">if</span>(!dedicatedAllocList.IsEmpty())</div>
-<div class="line"><a name="l18093"></a><span class="lineno">18093</span>&#160;        {</div>
-<div class="line"><a name="l18094"></a><span class="lineno">18094</span>&#160;            <span class="keywordflow">if</span>(dedicatedAllocationsStarted == <span class="keyword">false</span>)</div>
-<div class="line"><a name="l18095"></a><span class="lineno">18095</span>&#160;            {</div>
-<div class="line"><a name="l18096"></a><span class="lineno">18096</span>&#160;                dedicatedAllocationsStarted = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l18097"></a><span class="lineno">18097</span>&#160;                json.WriteString(<span class="stringliteral">&quot;DedicatedAllocations&quot;</span>);</div>
-<div class="line"><a name="l18098"></a><span class="lineno">18098</span>&#160;                json.BeginObject();</div>
-<div class="line"><a name="l18099"></a><span class="lineno">18099</span>&#160;            }</div>
-<div class="line"><a name="l18100"></a><span class="lineno">18100</span>&#160; </div>
-<div class="line"><a name="l18101"></a><span class="lineno">18101</span>&#160;            json.BeginString(<span class="stringliteral">&quot;Type &quot;</span>);</div>
-<div class="line"><a name="l18102"></a><span class="lineno">18102</span>&#160;            json.ContinueString(memTypeIndex);</div>
-<div class="line"><a name="l18103"></a><span class="lineno">18103</span>&#160;            json.EndString();</div>
-<div class="line"><a name="l18104"></a><span class="lineno">18104</span>&#160; </div>
-<div class="line"><a name="l18105"></a><span class="lineno">18105</span>&#160;            json.BeginArray();</div>
-<div class="line"><a name="l18106"></a><span class="lineno">18106</span>&#160; </div>
-<div class="line"><a name="l18107"></a><span class="lineno">18107</span>&#160;            <span class="keywordflow">for</span>(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> alloc = dedicatedAllocList.Front();</div>
-<div class="line"><a name="l18108"></a><span class="lineno">18108</span>&#160;                alloc != VMA_NULL; alloc = dedicatedAllocList.GetNext(alloc))</div>
-<div class="line"><a name="l18109"></a><span class="lineno">18109</span>&#160;            {</div>
-<div class="line"><a name="l18110"></a><span class="lineno">18110</span>&#160;                json.BeginObject(<span class="keyword">true</span>);</div>
-<div class="line"><a name="l18111"></a><span class="lineno">18111</span>&#160;                alloc-&gt;PrintParameters(json);</div>
-<div class="line"><a name="l18112"></a><span class="lineno">18112</span>&#160;                json.EndObject();</div>
-<div class="line"><a name="l18113"></a><span class="lineno">18113</span>&#160;            }</div>
-<div class="line"><a name="l18114"></a><span class="lineno">18114</span>&#160; </div>
-<div class="line"><a name="l18115"></a><span class="lineno">18115</span>&#160;            json.EndArray();</div>
-<div class="line"><a name="l18116"></a><span class="lineno">18116</span>&#160;        }</div>
-<div class="line"><a name="l18117"></a><span class="lineno">18117</span>&#160;    }</div>
-<div class="line"><a name="l18118"></a><span class="lineno">18118</span>&#160;    <span class="keywordflow">if</span>(dedicatedAllocationsStarted)</div>
-<div class="line"><a name="l18119"></a><span class="lineno">18119</span>&#160;    {</div>
-<div class="line"><a name="l18120"></a><span class="lineno">18120</span>&#160;        json.EndObject();</div>
-<div class="line"><a name="l18121"></a><span class="lineno">18121</span>&#160;    }</div>
-<div class="line"><a name="l18122"></a><span class="lineno">18122</span>&#160; </div>
-<div class="line"><a name="l18123"></a><span class="lineno">18123</span>&#160;    {</div>
-<div class="line"><a name="l18124"></a><span class="lineno">18124</span>&#160;        <span class="keywordtype">bool</span> allocationsStarted = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l18125"></a><span class="lineno">18125</span>&#160;        <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
-<div class="line"><a name="l18126"></a><span class="lineno">18126</span>&#160;        {</div>
-<div class="line"><a name="l18127"></a><span class="lineno">18127</span>&#160;            <span class="keywordflow">if</span>(m_pBlockVectors[memTypeIndex]-&gt;IsEmpty() == <span class="keyword">false</span>)</div>
-<div class="line"><a name="l18128"></a><span class="lineno">18128</span>&#160;            {</div>
-<div class="line"><a name="l18129"></a><span class="lineno">18129</span>&#160;                <span class="keywordflow">if</span>(allocationsStarted == <span class="keyword">false</span>)</div>
-<div class="line"><a name="l18130"></a><span class="lineno">18130</span>&#160;                {</div>
-<div class="line"><a name="l18131"></a><span class="lineno">18131</span>&#160;                    allocationsStarted = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l18132"></a><span class="lineno">18132</span>&#160;                    json.WriteString(<span class="stringliteral">&quot;DefaultPools&quot;</span>);</div>
-<div class="line"><a name="l18133"></a><span class="lineno">18133</span>&#160;                    json.BeginObject();</div>
-<div class="line"><a name="l18134"></a><span class="lineno">18134</span>&#160;                }</div>
-<div class="line"><a name="l18135"></a><span class="lineno">18135</span>&#160; </div>
-<div class="line"><a name="l18136"></a><span class="lineno">18136</span>&#160;                json.BeginString(<span class="stringliteral">&quot;Type &quot;</span>);</div>
-<div class="line"><a name="l18137"></a><span class="lineno">18137</span>&#160;                json.ContinueString(memTypeIndex);</div>
-<div class="line"><a name="l18138"></a><span class="lineno">18138</span>&#160;                json.EndString();</div>
-<div class="line"><a name="l18139"></a><span class="lineno">18139</span>&#160; </div>
-<div class="line"><a name="l18140"></a><span class="lineno">18140</span>&#160;                m_pBlockVectors[memTypeIndex]-&gt;PrintDetailedMap(json);</div>
-<div class="line"><a name="l18141"></a><span class="lineno">18141</span>&#160;            }</div>
-<div class="line"><a name="l18142"></a><span class="lineno">18142</span>&#160;        }</div>
-<div class="line"><a name="l18143"></a><span class="lineno">18143</span>&#160;        <span class="keywordflow">if</span>(allocationsStarted)</div>
-<div class="line"><a name="l18144"></a><span class="lineno">18144</span>&#160;        {</div>
-<div class="line"><a name="l18145"></a><span class="lineno">18145</span>&#160;            json.EndObject();</div>
-<div class="line"><a name="l18146"></a><span class="lineno">18146</span>&#160;        }</div>
-<div class="line"><a name="l18147"></a><span class="lineno">18147</span>&#160;    }</div>
-<div class="line"><a name="l18148"></a><span class="lineno">18148</span>&#160; </div>
-<div class="line"><a name="l18149"></a><span class="lineno">18149</span>&#160;    <span class="comment">// Custom pools</span></div>
-<div class="line"><a name="l18150"></a><span class="lineno">18150</span>&#160;    {</div>
-<div class="line"><a name="l18151"></a><span class="lineno">18151</span>&#160;        VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);</div>
-<div class="line"><a name="l18152"></a><span class="lineno">18152</span>&#160;        <span class="keywordflow">if</span>(!m_Pools.IsEmpty())</div>
-<div class="line"><a name="l18153"></a><span class="lineno">18153</span>&#160;        {</div>
-<div class="line"><a name="l18154"></a><span class="lineno">18154</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Pools&quot;</span>);</div>
-<div class="line"><a name="l18155"></a><span class="lineno">18155</span>&#160;            json.BeginObject();</div>
-<div class="line"><a name="l18156"></a><span class="lineno">18156</span>&#160;            <span class="keywordflow">for</span>(<a class="code" href="struct_vma_pool.html">VmaPool</a> pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool))</div>
-<div class="line"><a name="l18157"></a><span class="lineno">18157</span>&#160;            {</div>
-<div class="line"><a name="l18158"></a><span class="lineno">18158</span>&#160;                json.BeginString();</div>
-<div class="line"><a name="l18159"></a><span class="lineno">18159</span>&#160;                json.ContinueString(pool-&gt;GetId());</div>
-<div class="line"><a name="l18160"></a><span class="lineno">18160</span>&#160;                json.EndString();</div>
-<div class="line"><a name="l18161"></a><span class="lineno">18161</span>&#160; </div>
-<div class="line"><a name="l18162"></a><span class="lineno">18162</span>&#160;                pool-&gt;m_BlockVector.PrintDetailedMap(json);</div>
-<div class="line"><a name="l18163"></a><span class="lineno">18163</span>&#160;            }</div>
-<div class="line"><a name="l18164"></a><span class="lineno">18164</span>&#160;            json.EndObject();</div>
-<div class="line"><a name="l18165"></a><span class="lineno">18165</span>&#160;        }</div>
-<div class="line"><a name="l18166"></a><span class="lineno">18166</span>&#160;    }</div>
-<div class="line"><a name="l18167"></a><span class="lineno">18167</span>&#160;}</div>
-<div class="line"><a name="l18168"></a><span class="lineno">18168</span>&#160; </div>
-<div class="line"><a name="l18169"></a><span class="lineno">18169</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l18170"></a><span class="lineno">18170</span>&#160; </div>
-<div class="line"><a name="l18172"></a><span class="lineno">18172</span>&#160;<span class="comment">// Public interface</span></div>
-<div class="line"><a name="l18173"></a><span class="lineno">18173</span>&#160; </div>
-<div class="line"><a name="l18174"></a><span class="lineno">18174</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a>(</div>
-<div class="line"><a name="l18175"></a><span class="lineno">18175</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a>* pCreateInfo,</div>
-<div class="line"><a name="l18176"></a><span class="lineno">18176</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a>* pAllocator)</div>
-<div class="line"><a name="l18177"></a><span class="lineno">18177</span>&#160;{</div>
-<div class="line"><a name="l18178"></a><span class="lineno">18178</span>&#160;    VMA_ASSERT(pCreateInfo &amp;&amp; pAllocator);</div>
-<div class="line"><a name="l18179"></a><span class="lineno">18179</span>&#160;    VMA_ASSERT(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">vulkanApiVersion</a> == 0 ||</div>
-<div class="line"><a name="l18180"></a><span class="lineno">18180</span>&#160;        (VK_VERSION_MAJOR(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">vulkanApiVersion</a>) == 1 &amp;&amp; VK_VERSION_MINOR(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">vulkanApiVersion</a>) &lt;= 2));</div>
-<div class="line"><a name="l18181"></a><span class="lineno">18181</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreateAllocator&quot;</span>);</div>
-<div class="line"><a name="l18182"></a><span class="lineno">18182</span>&#160;    *pAllocator = vma_new(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d">pAllocationCallbacks</a>, VmaAllocator_T)(pCreateInfo);</div>
-<div class="line"><a name="l18183"></a><span class="lineno">18183</span>&#160;    <span class="keywordflow">return</span> (*pAllocator)-&gt;Init(pCreateInfo);</div>
-<div class="line"><a name="l18184"></a><span class="lineno">18184</span>&#160;}</div>
-<div class="line"><a name="l18185"></a><span class="lineno">18185</span>&#160; </div>
-<div class="line"><a name="l18186"></a><span class="lineno">18186</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d">vmaDestroyAllocator</a>(</div>
-<div class="line"><a name="l18187"></a><span class="lineno">18187</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator)</div>
-<div class="line"><a name="l18188"></a><span class="lineno">18188</span>&#160;{</div>
-<div class="line"><a name="l18189"></a><span class="lineno">18189</span>&#160;    <span class="keywordflow">if</span>(allocator != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l18190"></a><span class="lineno">18190</span>&#160;    {</div>
-<div class="line"><a name="l18191"></a><span class="lineno">18191</span>&#160;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyAllocator&quot;</span>);</div>
-<div class="line"><a name="l18192"></a><span class="lineno">18192</span>&#160;        VkAllocationCallbacks allocationCallbacks = allocator-&gt;m_AllocationCallbacks;</div>
-<div class="line"><a name="l18193"></a><span class="lineno">18193</span>&#160;        vma_delete(&amp;allocationCallbacks, allocator);</div>
-<div class="line"><a name="l18194"></a><span class="lineno">18194</span>&#160;    }</div>
-<div class="line"><a name="l18195"></a><span class="lineno">18195</span>&#160;}</div>
-<div class="line"><a name="l18196"></a><span class="lineno">18196</span>&#160; </div>
-<div class="line"><a name="l18197"></a><span class="lineno">18197</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#afa02231a791b37255720d566a52683e7">vmaGetAllocatorInfo</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="code" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a>* pAllocatorInfo)</div>
-<div class="line"><a name="l18198"></a><span class="lineno">18198</span>&#160;{</div>
-<div class="line"><a name="l18199"></a><span class="lineno">18199</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pAllocatorInfo);</div>
-<div class="line"><a name="l18200"></a><span class="lineno">18200</span>&#160;    pAllocatorInfo-&gt;<a class="code" href="struct_vma_allocator_info.html#a2ed6a4d2d3fea039d66a13f15d0ce5fe">instance</a> = allocator-&gt;m_hInstance;</div>
-<div class="line"><a name="l18201"></a><span class="lineno">18201</span>&#160;    pAllocatorInfo-&gt;<a class="code" href="struct_vma_allocator_info.html#aba2b703f96e51d567717e1fb2935b47a">physicalDevice</a> = allocator-&gt;GetPhysicalDevice();</div>
-<div class="line"><a name="l18202"></a><span class="lineno">18202</span>&#160;    pAllocatorInfo-&gt;<a class="code" href="struct_vma_allocator_info.html#a012b4c485bf3b0ea8921352c5ee0c357">device</a> = allocator-&gt;m_hDevice;</div>
-<div class="line"><a name="l18203"></a><span class="lineno">18203</span>&#160;}</div>
-<div class="line"><a name="l18204"></a><span class="lineno">18204</span>&#160; </div>
-<div class="line"><a name="l18205"></a><span class="lineno">18205</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0">vmaGetPhysicalDeviceProperties</a>(</div>
-<div class="line"><a name="l18206"></a><span class="lineno">18206</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18207"></a><span class="lineno">18207</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceProperties **ppPhysicalDeviceProperties)</div>
-<div class="line"><a name="l18208"></a><span class="lineno">18208</span>&#160;{</div>
-<div class="line"><a name="l18209"></a><span class="lineno">18209</span>&#160;    VMA_ASSERT(allocator &amp;&amp; ppPhysicalDeviceProperties);</div>
-<div class="line"><a name="l18210"></a><span class="lineno">18210</span>&#160;    *ppPhysicalDeviceProperties = &amp;allocator-&gt;m_PhysicalDeviceProperties;</div>
-<div class="line"><a name="l18211"></a><span class="lineno">18211</span>&#160;}</div>
-<div class="line"><a name="l18212"></a><span class="lineno">18212</span>&#160; </div>
-<div class="line"><a name="l18213"></a><span class="lineno">18213</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19">vmaGetMemoryProperties</a>(</div>
-<div class="line"><a name="l18214"></a><span class="lineno">18214</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18215"></a><span class="lineno">18215</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceMemoryProperties** ppPhysicalDeviceMemoryProperties)</div>
-<div class="line"><a name="l18216"></a><span class="lineno">18216</span>&#160;{</div>
-<div class="line"><a name="l18217"></a><span class="lineno">18217</span>&#160;    VMA_ASSERT(allocator &amp;&amp; ppPhysicalDeviceMemoryProperties);</div>
-<div class="line"><a name="l18218"></a><span class="lineno">18218</span>&#160;    *ppPhysicalDeviceMemoryProperties = &amp;allocator-&gt;m_MemProps;</div>
-<div class="line"><a name="l18219"></a><span class="lineno">18219</span>&#160;}</div>
-<div class="line"><a name="l18220"></a><span class="lineno">18220</span>&#160; </div>
-<div class="line"><a name="l18221"></a><span class="lineno">18221</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca">vmaGetMemoryTypeProperties</a>(</div>
-<div class="line"><a name="l18222"></a><span class="lineno">18222</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18223"></a><span class="lineno">18223</span>&#160;    uint32_t memoryTypeIndex,</div>
-<div class="line"><a name="l18224"></a><span class="lineno">18224</span>&#160;    VkMemoryPropertyFlags* pFlags)</div>
-<div class="line"><a name="l18225"></a><span class="lineno">18225</span>&#160;{</div>
-<div class="line"><a name="l18226"></a><span class="lineno">18226</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pFlags);</div>
-<div class="line"><a name="l18227"></a><span class="lineno">18227</span>&#160;    VMA_ASSERT(memoryTypeIndex &lt; allocator-&gt;GetMemoryTypeCount());</div>
-<div class="line"><a name="l18228"></a><span class="lineno">18228</span>&#160;    *pFlags = allocator-&gt;m_MemProps.memoryTypes[memoryTypeIndex].propertyFlags;</div>
-<div class="line"><a name="l18229"></a><span class="lineno">18229</span>&#160;}</div>
-<div class="line"><a name="l18230"></a><span class="lineno">18230</span>&#160; </div>
-<div class="line"><a name="l18231"></a><span class="lineno">18231</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236">vmaSetCurrentFrameIndex</a>(</div>
-<div class="line"><a name="l18232"></a><span class="lineno">18232</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18233"></a><span class="lineno">18233</span>&#160;    uint32_t frameIndex)</div>
-<div class="line"><a name="l18234"></a><span class="lineno">18234</span>&#160;{</div>
-<div class="line"><a name="l18235"></a><span class="lineno">18235</span>&#160;    VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l18236"></a><span class="lineno">18236</span>&#160;    VMA_ASSERT(frameIndex != VMA_FRAME_INDEX_LOST);</div>
-<div class="line"><a name="l18237"></a><span class="lineno">18237</span>&#160; </div>
-<div class="line"><a name="l18238"></a><span class="lineno">18238</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18239"></a><span class="lineno">18239</span>&#160; </div>
-<div class="line"><a name="l18240"></a><span class="lineno">18240</span>&#160;    allocator-&gt;SetCurrentFrameIndex(frameIndex);</div>
-<div class="line"><a name="l18241"></a><span class="lineno">18241</span>&#160;}</div>
-<div class="line"><a name="l18242"></a><span class="lineno">18242</span>&#160; </div>
-<div class="line"><a name="l18243"></a><span class="lineno">18243</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3">vmaCalculateStats</a>(</div>
-<div class="line"><a name="l18244"></a><span class="lineno">18244</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18245"></a><span class="lineno">18245</span>&#160;    <a class="code" href="struct_vma_stats.html">VmaStats</a>* pStats)</div>
-<div class="line"><a name="l18246"></a><span class="lineno">18246</span>&#160;{</div>
-<div class="line"><a name="l18247"></a><span class="lineno">18247</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pStats);</div>
-<div class="line"><a name="l18248"></a><span class="lineno">18248</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18249"></a><span class="lineno">18249</span>&#160;    allocator-&gt;CalculateStats(pStats);</div>
-<div class="line"><a name="l18250"></a><span class="lineno">18250</span>&#160;}</div>
-<div class="line"><a name="l18251"></a><span class="lineno">18251</span>&#160; </div>
-<div class="line"><a name="l18252"></a><span class="lineno">18252</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aec0ed24ebea2d0099eed5f801daaefba">vmaGetBudget</a>(</div>
-<div class="line"><a name="l18253"></a><span class="lineno">18253</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18254"></a><span class="lineno">18254</span>&#160;    <a class="code" href="struct_vma_budget.html">VmaBudget</a>* pBudget)</div>
-<div class="line"><a name="l18255"></a><span class="lineno">18255</span>&#160;{</div>
-<div class="line"><a name="l18256"></a><span class="lineno">18256</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pBudget);</div>
-<div class="line"><a name="l18257"></a><span class="lineno">18257</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18258"></a><span class="lineno">18258</span>&#160;    allocator-&gt;GetBudget(pBudget, 0, allocator-&gt;GetMemoryHeapCount());</div>
-<div class="line"><a name="l18259"></a><span class="lineno">18259</span>&#160;}</div>
-<div class="line"><a name="l18260"></a><span class="lineno">18260</span>&#160; </div>
-<div class="line"><a name="l18261"></a><span class="lineno">18261</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l18262"></a><span class="lineno">18262</span>&#160; </div>
-<div class="line"><a name="l18263"></a><span class="lineno">18263</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0">vmaBuildStatsString</a>(</div>
-<div class="line"><a name="l18264"></a><span class="lineno">18264</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18265"></a><span class="lineno">18265</span>&#160;    <span class="keywordtype">char</span>** ppStatsString,</div>
-<div class="line"><a name="l18266"></a><span class="lineno">18266</span>&#160;    VkBool32 detailedMap)</div>
-<div class="line"><a name="l18267"></a><span class="lineno">18267</span>&#160;{</div>
-<div class="line"><a name="l18268"></a><span class="lineno">18268</span>&#160;    VMA_ASSERT(allocator &amp;&amp; ppStatsString);</div>
-<div class="line"><a name="l18269"></a><span class="lineno">18269</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18270"></a><span class="lineno">18270</span>&#160; </div>
-<div class="line"><a name="l18271"></a><span class="lineno">18271</span>&#160;    VmaStringBuilder sb(allocator);</div>
-<div class="line"><a name="l18272"></a><span class="lineno">18272</span>&#160;    {</div>
-<div class="line"><a name="l18273"></a><span class="lineno">18273</span>&#160;        VmaJsonWriter json(allocator-&gt;GetAllocationCallbacks(), sb);</div>
-<div class="line"><a name="l18274"></a><span class="lineno">18274</span>&#160;        json.BeginObject();</div>
-<div class="line"><a name="l18275"></a><span class="lineno">18275</span>&#160; </div>
-<div class="line"><a name="l18276"></a><span class="lineno">18276</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> budget[VK_MAX_MEMORY_HEAPS];</div>
-<div class="line"><a name="l18277"></a><span class="lineno">18277</span>&#160;        allocator-&gt;GetBudget(budget, 0, allocator-&gt;GetMemoryHeapCount());</div>
-<div class="line"><a name="l18278"></a><span class="lineno">18278</span>&#160; </div>
-<div class="line"><a name="l18279"></a><span class="lineno">18279</span>&#160;        <a class="code" href="struct_vma_stats.html">VmaStats</a> stats;</div>
-<div class="line"><a name="l18280"></a><span class="lineno">18280</span>&#160;        allocator-&gt;CalculateStats(&amp;stats);</div>
-<div class="line"><a name="l18281"></a><span class="lineno">18281</span>&#160; </div>
-<div class="line"><a name="l18282"></a><span class="lineno">18282</span>&#160;        json.WriteString(<span class="stringliteral">&quot;Total&quot;</span>);</div>
-<div class="line"><a name="l18283"></a><span class="lineno">18283</span>&#160;        VmaPrintStatInfo(json, stats.<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>);</div>
-<div class="line"><a name="l18284"></a><span class="lineno">18284</span>&#160; </div>
-<div class="line"><a name="l18285"></a><span class="lineno">18285</span>&#160;        <span class="keywordflow">for</span>(uint32_t heapIndex = 0; heapIndex &lt; allocator-&gt;GetMemoryHeapCount(); ++heapIndex)</div>
-<div class="line"><a name="l18286"></a><span class="lineno">18286</span>&#160;        {</div>
-<div class="line"><a name="l18287"></a><span class="lineno">18287</span>&#160;            json.BeginString(<span class="stringliteral">&quot;Heap &quot;</span>);</div>
-<div class="line"><a name="l18288"></a><span class="lineno">18288</span>&#160;            json.ContinueString(heapIndex);</div>
-<div class="line"><a name="l18289"></a><span class="lineno">18289</span>&#160;            json.EndString();</div>
-<div class="line"><a name="l18290"></a><span class="lineno">18290</span>&#160;            json.BeginObject();</div>
-<div class="line"><a name="l18291"></a><span class="lineno">18291</span>&#160; </div>
-<div class="line"><a name="l18292"></a><span class="lineno">18292</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Size&quot;</span>);</div>
-<div class="line"><a name="l18293"></a><span class="lineno">18293</span>&#160;            json.WriteNumber(allocator-&gt;m_MemProps.memoryHeaps[heapIndex].size);</div>
-<div class="line"><a name="l18294"></a><span class="lineno">18294</span>&#160; </div>
-<div class="line"><a name="l18295"></a><span class="lineno">18295</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Flags&quot;</span>);</div>
-<div class="line"><a name="l18296"></a><span class="lineno">18296</span>&#160;            json.BeginArray(<span class="keyword">true</span>);</div>
-<div class="line"><a name="l18297"></a><span class="lineno">18297</span>&#160;            <span class="keywordflow">if</span>((allocator-&gt;m_MemProps.memoryHeaps[heapIndex].flags &amp; VK_MEMORY_HEAP_DEVICE_LOCAL_BIT) != 0)</div>
-<div class="line"><a name="l18298"></a><span class="lineno">18298</span>&#160;            {</div>
-<div class="line"><a name="l18299"></a><span class="lineno">18299</span>&#160;                json.WriteString(<span class="stringliteral">&quot;DEVICE_LOCAL&quot;</span>);</div>
-<div class="line"><a name="l18300"></a><span class="lineno">18300</span>&#160;            }</div>
-<div class="line"><a name="l18301"></a><span class="lineno">18301</span>&#160;            json.EndArray();</div>
-<div class="line"><a name="l18302"></a><span class="lineno">18302</span>&#160; </div>
-<div class="line"><a name="l18303"></a><span class="lineno">18303</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Budget&quot;</span>);</div>
-<div class="line"><a name="l18304"></a><span class="lineno">18304</span>&#160;            json.BeginObject();</div>
-<div class="line"><a name="l18305"></a><span class="lineno">18305</span>&#160;            {</div>
-<div class="line"><a name="l18306"></a><span class="lineno">18306</span>&#160;                json.WriteString(<span class="stringliteral">&quot;BlockBytes&quot;</span>);</div>
-<div class="line"><a name="l18307"></a><span class="lineno">18307</span>&#160;                json.WriteNumber(budget[heapIndex].blockBytes);</div>
-<div class="line"><a name="l18308"></a><span class="lineno">18308</span>&#160;                json.WriteString(<span class="stringliteral">&quot;AllocationBytes&quot;</span>);</div>
-<div class="line"><a name="l18309"></a><span class="lineno">18309</span>&#160;                json.WriteNumber(budget[heapIndex].allocationBytes);</div>
-<div class="line"><a name="l18310"></a><span class="lineno">18310</span>&#160;                json.WriteString(<span class="stringliteral">&quot;Usage&quot;</span>);</div>
-<div class="line"><a name="l18311"></a><span class="lineno">18311</span>&#160;                json.WriteNumber(budget[heapIndex].usage);</div>
-<div class="line"><a name="l18312"></a><span class="lineno">18312</span>&#160;                json.WriteString(<span class="stringliteral">&quot;Budget&quot;</span>);</div>
-<div class="line"><a name="l18313"></a><span class="lineno">18313</span>&#160;                json.WriteNumber(budget[heapIndex].budget);</div>
-<div class="line"><a name="l18314"></a><span class="lineno">18314</span>&#160;            }</div>
-<div class="line"><a name="l18315"></a><span class="lineno">18315</span>&#160;            json.EndObject();</div>
-<div class="line"><a name="l18316"></a><span class="lineno">18316</span>&#160; </div>
-<div class="line"><a name="l18317"></a><span class="lineno">18317</span>&#160;            <span class="keywordflow">if</span>(stats.<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[heapIndex].<a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a> &gt; 0)</div>
-<div class="line"><a name="l18318"></a><span class="lineno">18318</span>&#160;            {</div>
-<div class="line"><a name="l18319"></a><span class="lineno">18319</span>&#160;                json.WriteString(<span class="stringliteral">&quot;Stats&quot;</span>);</div>
-<div class="line"><a name="l18320"></a><span class="lineno">18320</span>&#160;                VmaPrintStatInfo(json, stats.<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[heapIndex]);</div>
-<div class="line"><a name="l18321"></a><span class="lineno">18321</span>&#160;            }</div>
-<div class="line"><a name="l18322"></a><span class="lineno">18322</span>&#160; </div>
-<div class="line"><a name="l18323"></a><span class="lineno">18323</span>&#160;            <span class="keywordflow">for</span>(uint32_t typeIndex = 0; typeIndex &lt; allocator-&gt;GetMemoryTypeCount(); ++typeIndex)</div>
-<div class="line"><a name="l18324"></a><span class="lineno">18324</span>&#160;            {</div>
-<div class="line"><a name="l18325"></a><span class="lineno">18325</span>&#160;                <span class="keywordflow">if</span>(allocator-&gt;MemoryTypeIndexToHeapIndex(typeIndex) == heapIndex)</div>
-<div class="line"><a name="l18326"></a><span class="lineno">18326</span>&#160;                {</div>
-<div class="line"><a name="l18327"></a><span class="lineno">18327</span>&#160;                    json.BeginString(<span class="stringliteral">&quot;Type &quot;</span>);</div>
-<div class="line"><a name="l18328"></a><span class="lineno">18328</span>&#160;                    json.ContinueString(typeIndex);</div>
-<div class="line"><a name="l18329"></a><span class="lineno">18329</span>&#160;                    json.EndString();</div>
-<div class="line"><a name="l18330"></a><span class="lineno">18330</span>&#160; </div>
-<div class="line"><a name="l18331"></a><span class="lineno">18331</span>&#160;                    json.BeginObject();</div>
-<div class="line"><a name="l18332"></a><span class="lineno">18332</span>&#160; </div>
-<div class="line"><a name="l18333"></a><span class="lineno">18333</span>&#160;                    json.WriteString(<span class="stringliteral">&quot;Flags&quot;</span>);</div>
-<div class="line"><a name="l18334"></a><span class="lineno">18334</span>&#160;                    json.BeginArray(<span class="keyword">true</span>);</div>
-<div class="line"><a name="l18335"></a><span class="lineno">18335</span>&#160;                    VkMemoryPropertyFlags flags = allocator-&gt;m_MemProps.memoryTypes[typeIndex].propertyFlags;</div>
-<div class="line"><a name="l18336"></a><span class="lineno">18336</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) != 0)</div>
-<div class="line"><a name="l18337"></a><span class="lineno">18337</span>&#160;                    {</div>
-<div class="line"><a name="l18338"></a><span class="lineno">18338</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;DEVICE_LOCAL&quot;</span>);</div>
-<div class="line"><a name="l18339"></a><span class="lineno">18339</span>&#160;                    }</div>
-<div class="line"><a name="l18340"></a><span class="lineno">18340</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0)</div>
-<div class="line"><a name="l18341"></a><span class="lineno">18341</span>&#160;                    {</div>
-<div class="line"><a name="l18342"></a><span class="lineno">18342</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;HOST_VISIBLE&quot;</span>);</div>
-<div class="line"><a name="l18343"></a><span class="lineno">18343</span>&#160;                    }</div>
-<div class="line"><a name="l18344"></a><span class="lineno">18344</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) != 0)</div>
-<div class="line"><a name="l18345"></a><span class="lineno">18345</span>&#160;                    {</div>
-<div class="line"><a name="l18346"></a><span class="lineno">18346</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;HOST_COHERENT&quot;</span>);</div>
-<div class="line"><a name="l18347"></a><span class="lineno">18347</span>&#160;                    }</div>
-<div class="line"><a name="l18348"></a><span class="lineno">18348</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_HOST_CACHED_BIT) != 0)</div>
-<div class="line"><a name="l18349"></a><span class="lineno">18349</span>&#160;                    {</div>
-<div class="line"><a name="l18350"></a><span class="lineno">18350</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;HOST_CACHED&quot;</span>);</div>
-<div class="line"><a name="l18351"></a><span class="lineno">18351</span>&#160;                    }</div>
-<div class="line"><a name="l18352"></a><span class="lineno">18352</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT) != 0)</div>
-<div class="line"><a name="l18353"></a><span class="lineno">18353</span>&#160;                    {</div>
-<div class="line"><a name="l18354"></a><span class="lineno">18354</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;LAZILY_ALLOCATED&quot;</span>);</div>
-<div class="line"><a name="l18355"></a><span class="lineno">18355</span>&#160;                    }</div>
-<div class="line"><a name="l18356"></a><span class="lineno">18356</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l18357"></a><span class="lineno">18357</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_PROTECTED_BIT) != 0)</div>
-<div class="line"><a name="l18358"></a><span class="lineno">18358</span>&#160;                    {</div>
-<div class="line"><a name="l18359"></a><span class="lineno">18359</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;PROTECTED&quot;</span>);</div>
-<div class="line"><a name="l18360"></a><span class="lineno">18360</span>&#160;                    }</div>
-<div class="line"><a name="l18361"></a><span class="lineno">18361</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l18362"></a><span class="lineno">18362</span>&#160;<span class="preprocessor">#if VK_AMD_device_coherent_memory</span></div>
-<div class="line"><a name="l18363"></a><span class="lineno">18363</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY) != 0)</div>
-<div class="line"><a name="l18364"></a><span class="lineno">18364</span>&#160;                    {</div>
-<div class="line"><a name="l18365"></a><span class="lineno">18365</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;DEVICE_COHERENT&quot;</span>);</div>
-<div class="line"><a name="l18366"></a><span class="lineno">18366</span>&#160;                    }</div>
-<div class="line"><a name="l18367"></a><span class="lineno">18367</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY) != 0)</div>
-<div class="line"><a name="l18368"></a><span class="lineno">18368</span>&#160;                    {</div>
-<div class="line"><a name="l18369"></a><span class="lineno">18369</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;DEVICE_UNCACHED&quot;</span>);</div>
-<div class="line"><a name="l18370"></a><span class="lineno">18370</span>&#160;                    }</div>
-<div class="line"><a name="l18371"></a><span class="lineno">18371</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VK_AMD_device_coherent_memory</span></div>
-<div class="line"><a name="l18372"></a><span class="lineno">18372</span>&#160;                    json.EndArray();</div>
-<div class="line"><a name="l18373"></a><span class="lineno">18373</span>&#160; </div>
-<div class="line"><a name="l18374"></a><span class="lineno">18374</span>&#160;                    <span class="keywordflow">if</span>(stats.<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[typeIndex].<a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a> &gt; 0)</div>
-<div class="line"><a name="l18375"></a><span class="lineno">18375</span>&#160;                    {</div>
-<div class="line"><a name="l18376"></a><span class="lineno">18376</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;Stats&quot;</span>);</div>
-<div class="line"><a name="l18377"></a><span class="lineno">18377</span>&#160;                        VmaPrintStatInfo(json, stats.<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[typeIndex]);</div>
-<div class="line"><a name="l18378"></a><span class="lineno">18378</span>&#160;                    }</div>
-<div class="line"><a name="l18379"></a><span class="lineno">18379</span>&#160; </div>
-<div class="line"><a name="l18380"></a><span class="lineno">18380</span>&#160;                    json.EndObject();</div>
-<div class="line"><a name="l18381"></a><span class="lineno">18381</span>&#160;                }</div>
-<div class="line"><a name="l18382"></a><span class="lineno">18382</span>&#160;            }</div>
-<div class="line"><a name="l18383"></a><span class="lineno">18383</span>&#160; </div>
-<div class="line"><a name="l18384"></a><span class="lineno">18384</span>&#160;            json.EndObject();</div>
-<div class="line"><a name="l18385"></a><span class="lineno">18385</span>&#160;        }</div>
-<div class="line"><a name="l18386"></a><span class="lineno">18386</span>&#160;        <span class="keywordflow">if</span>(detailedMap == VK_TRUE)</div>
-<div class="line"><a name="l18387"></a><span class="lineno">18387</span>&#160;        {</div>
-<div class="line"><a name="l18388"></a><span class="lineno">18388</span>&#160;            allocator-&gt;PrintDetailedMap(json);</div>
-<div class="line"><a name="l18389"></a><span class="lineno">18389</span>&#160;        }</div>
-<div class="line"><a name="l18390"></a><span class="lineno">18390</span>&#160; </div>
-<div class="line"><a name="l18391"></a><span class="lineno">18391</span>&#160;        json.EndObject();</div>
-<div class="line"><a name="l18392"></a><span class="lineno">18392</span>&#160;    }</div>
-<div class="line"><a name="l18393"></a><span class="lineno">18393</span>&#160; </div>
-<div class="line"><a name="l18394"></a><span class="lineno">18394</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> len = sb.GetLength();</div>
-<div class="line"><a name="l18395"></a><span class="lineno">18395</span>&#160;    <span class="keywordtype">char</span>* <span class="keyword">const</span> pChars = vma_new_array(allocator, <span class="keywordtype">char</span>, len + 1);</div>
-<div class="line"><a name="l18396"></a><span class="lineno">18396</span>&#160;    <span class="keywordflow">if</span>(len &gt; 0)</div>
-<div class="line"><a name="l18397"></a><span class="lineno">18397</span>&#160;    {</div>
-<div class="line"><a name="l18398"></a><span class="lineno">18398</span>&#160;        memcpy(pChars, sb.GetData(), len);</div>
-<div class="line"><a name="l18399"></a><span class="lineno">18399</span>&#160;    }</div>
-<div class="line"><a name="l18400"></a><span class="lineno">18400</span>&#160;    pChars[len] = <span class="charliteral">&#39;\0&#39;</span>;</div>
-<div class="line"><a name="l18401"></a><span class="lineno">18401</span>&#160;    *ppStatsString = pChars;</div>
-<div class="line"><a name="l18402"></a><span class="lineno">18402</span>&#160;}</div>
-<div class="line"><a name="l18403"></a><span class="lineno">18403</span>&#160; </div>
-<div class="line"><a name="l18404"></a><span class="lineno">18404</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288">vmaFreeStatsString</a>(</div>
-<div class="line"><a name="l18405"></a><span class="lineno">18405</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18406"></a><span class="lineno">18406</span>&#160;    <span class="keywordtype">char</span>* pStatsString)</div>
-<div class="line"><a name="l18407"></a><span class="lineno">18407</span>&#160;{</div>
-<div class="line"><a name="l18408"></a><span class="lineno">18408</span>&#160;    <span class="keywordflow">if</span>(pStatsString != VMA_NULL)</div>
-<div class="line"><a name="l18409"></a><span class="lineno">18409</span>&#160;    {</div>
-<div class="line"><a name="l18410"></a><span class="lineno">18410</span>&#160;        VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l18411"></a><span class="lineno">18411</span>&#160;        <span class="keywordtype">size_t</span> len = strlen(pStatsString);</div>
-<div class="line"><a name="l18412"></a><span class="lineno">18412</span>&#160;        vma_delete_array(allocator, pStatsString, len + 1);</div>
-<div class="line"><a name="l18413"></a><span class="lineno">18413</span>&#160;    }</div>
-<div class="line"><a name="l18414"></a><span class="lineno">18414</span>&#160;}</div>
-<div class="line"><a name="l18415"></a><span class="lineno">18415</span>&#160; </div>
-<div class="line"><a name="l18416"></a><span class="lineno">18416</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l18417"></a><span class="lineno">18417</span>&#160; </div>
-<div class="line"><a name="l18418"></a><span class="lineno">18418</span>&#160;<span class="comment">/*</span></div>
-<div class="line"><a name="l18419"></a><span class="lineno">18419</span>&#160;<span class="comment">This function is not protected by any mutex because it just reads immutable data.</span></div>
-<div class="line"><a name="l18420"></a><span class="lineno">18420</span>&#160;<span class="comment">*/</span></div>
-<div class="line"><a name="l18421"></a><span class="lineno">18421</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(</div>
-<div class="line"><a name="l18422"></a><span class="lineno">18422</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18423"></a><span class="lineno">18423</span>&#160;    uint32_t memoryTypeBits,</div>
-<div class="line"><a name="l18424"></a><span class="lineno">18424</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div>
-<div class="line"><a name="l18425"></a><span class="lineno">18425</span>&#160;    uint32_t* pMemoryTypeIndex)</div>
-<div class="line"><a name="l18426"></a><span class="lineno">18426</span>&#160;{</div>
-<div class="line"><a name="l18427"></a><span class="lineno">18427</span>&#160;    VMA_ASSERT(allocator != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l18428"></a><span class="lineno">18428</span>&#160;    VMA_ASSERT(pAllocationCreateInfo != VMA_NULL);</div>
-<div class="line"><a name="l18429"></a><span class="lineno">18429</span>&#160;    VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);</div>
-<div class="line"><a name="l18430"></a><span class="lineno">18430</span>&#160; </div>
-<div class="line"><a name="l18431"></a><span class="lineno">18431</span>&#160;    memoryTypeBits &amp;= allocator-&gt;GetGlobalMemoryTypeBits();</div>
-<div class="line"><a name="l18432"></a><span class="lineno">18432</span>&#160; </div>
-<div class="line"><a name="l18433"></a><span class="lineno">18433</span>&#160;    <span class="keywordflow">if</span>(pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a> != 0)</div>
-<div class="line"><a name="l18434"></a><span class="lineno">18434</span>&#160;    {</div>
-<div class="line"><a name="l18435"></a><span class="lineno">18435</span>&#160;        memoryTypeBits &amp;= pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>;</div>
-<div class="line"><a name="l18436"></a><span class="lineno">18436</span>&#160;    }</div>
-<div class="line"><a name="l18437"></a><span class="lineno">18437</span>&#160; </div>
-<div class="line"><a name="l18438"></a><span class="lineno">18438</span>&#160;    uint32_t requiredFlags = pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>;</div>
-<div class="line"><a name="l18439"></a><span class="lineno">18439</span>&#160;    uint32_t preferredFlags = pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>;</div>
-<div class="line"><a name="l18440"></a><span class="lineno">18440</span>&#160;    uint32_t notPreferredFlags = 0;</div>
-<div class="line"><a name="l18441"></a><span class="lineno">18441</span>&#160; </div>
-<div class="line"><a name="l18442"></a><span class="lineno">18442</span>&#160;    <span class="comment">// Convert usage to requiredFlags and preferredFlags.</span></div>
-<div class="line"><a name="l18443"></a><span class="lineno">18443</span>&#160;    <span class="keywordflow">switch</span>(pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>)</div>
-<div class="line"><a name="l18444"></a><span class="lineno">18444</span>&#160;    {</div>
-<div class="line"><a name="l18445"></a><span class="lineno">18445</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a>:</div>
-<div class="line"><a name="l18446"></a><span class="lineno">18446</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l18447"></a><span class="lineno">18447</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>:</div>
-<div class="line"><a name="l18448"></a><span class="lineno">18448</span>&#160;        <span class="keywordflow">if</span>(!allocator-&gt;IsIntegratedGpu() || (preferredFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)</div>
-<div class="line"><a name="l18449"></a><span class="lineno">18449</span>&#160;        {</div>
-<div class="line"><a name="l18450"></a><span class="lineno">18450</span>&#160;            preferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;</div>
-<div class="line"><a name="l18451"></a><span class="lineno">18451</span>&#160;        }</div>
-<div class="line"><a name="l18452"></a><span class="lineno">18452</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l18453"></a><span class="lineno">18453</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a>:</div>
-<div class="line"><a name="l18454"></a><span class="lineno">18454</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;</div>
-<div class="line"><a name="l18455"></a><span class="lineno">18455</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l18456"></a><span class="lineno">18456</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a>:</div>
-<div class="line"><a name="l18457"></a><span class="lineno">18457</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;</div>
-<div class="line"><a name="l18458"></a><span class="lineno">18458</span>&#160;        <span class="keywordflow">if</span>(!allocator-&gt;IsIntegratedGpu() || (preferredFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)</div>
-<div class="line"><a name="l18459"></a><span class="lineno">18459</span>&#160;        {</div>
-<div class="line"><a name="l18460"></a><span class="lineno">18460</span>&#160;            preferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;</div>
-<div class="line"><a name="l18461"></a><span class="lineno">18461</span>&#160;        }</div>
-<div class="line"><a name="l18462"></a><span class="lineno">18462</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l18463"></a><span class="lineno">18463</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a>:</div>
-<div class="line"><a name="l18464"></a><span class="lineno">18464</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;</div>
-<div class="line"><a name="l18465"></a><span class="lineno">18465</span>&#160;        preferredFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT;</div>
-<div class="line"><a name="l18466"></a><span class="lineno">18466</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l18467"></a><span class="lineno">18467</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500">VMA_MEMORY_USAGE_CPU_COPY</a>:</div>
-<div class="line"><a name="l18468"></a><span class="lineno">18468</span>&#160;        notPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;</div>
-<div class="line"><a name="l18469"></a><span class="lineno">18469</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l18470"></a><span class="lineno">18470</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED</a>:</div>
-<div class="line"><a name="l18471"></a><span class="lineno">18471</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;</div>
-<div class="line"><a name="l18472"></a><span class="lineno">18472</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l18473"></a><span class="lineno">18473</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l18474"></a><span class="lineno">18474</span>&#160;        VMA_ASSERT(0);</div>
-<div class="line"><a name="l18475"></a><span class="lineno">18475</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l18476"></a><span class="lineno">18476</span>&#160;    }</div>
-<div class="line"><a name="l18477"></a><span class="lineno">18477</span>&#160; </div>
-<div class="line"><a name="l18478"></a><span class="lineno">18478</span>&#160;    <span class="comment">// Avoid DEVICE_COHERENT unless explicitly requested.</span></div>
-<div class="line"><a name="l18479"></a><span class="lineno">18479</span>&#160;    <span class="keywordflow">if</span>(((pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a> | pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>) &amp;</div>
-<div class="line"><a name="l18480"></a><span class="lineno">18480</span>&#160;        (VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY | VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY)) == 0)</div>
-<div class="line"><a name="l18481"></a><span class="lineno">18481</span>&#160;    {</div>
-<div class="line"><a name="l18482"></a><span class="lineno">18482</span>&#160;        notPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY;</div>
-<div class="line"><a name="l18483"></a><span class="lineno">18483</span>&#160;    }</div>
-<div class="line"><a name="l18484"></a><span class="lineno">18484</span>&#160; </div>
-<div class="line"><a name="l18485"></a><span class="lineno">18485</span>&#160;    *pMemoryTypeIndex = UINT32_MAX;</div>
-<div class="line"><a name="l18486"></a><span class="lineno">18486</span>&#160;    uint32_t minCost = UINT32_MAX;</div>
-<div class="line"><a name="l18487"></a><span class="lineno">18487</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0, memTypeBit = 1;</div>
-<div class="line"><a name="l18488"></a><span class="lineno">18488</span>&#160;        memTypeIndex &lt; allocator-&gt;GetMemoryTypeCount();</div>
-<div class="line"><a name="l18489"></a><span class="lineno">18489</span>&#160;        ++memTypeIndex, memTypeBit &lt;&lt;= 1)</div>
-<div class="line"><a name="l18490"></a><span class="lineno">18490</span>&#160;    {</div>
-<div class="line"><a name="l18491"></a><span class="lineno">18491</span>&#160;        <span class="comment">// This memory type is acceptable according to memoryTypeBits bitmask.</span></div>
-<div class="line"><a name="l18492"></a><span class="lineno">18492</span>&#160;        <span class="keywordflow">if</span>((memTypeBit &amp; memoryTypeBits) != 0)</div>
-<div class="line"><a name="l18493"></a><span class="lineno">18493</span>&#160;        {</div>
-<div class="line"><a name="l18494"></a><span class="lineno">18494</span>&#160;            <span class="keyword">const</span> VkMemoryPropertyFlags currFlags =</div>
-<div class="line"><a name="l18495"></a><span class="lineno">18495</span>&#160;                allocator-&gt;m_MemProps.memoryTypes[memTypeIndex].propertyFlags;</div>
-<div class="line"><a name="l18496"></a><span class="lineno">18496</span>&#160;            <span class="comment">// This memory type contains requiredFlags.</span></div>
-<div class="line"><a name="l18497"></a><span class="lineno">18497</span>&#160;            <span class="keywordflow">if</span>((requiredFlags &amp; ~currFlags) == 0)</div>
-<div class="line"><a name="l18498"></a><span class="lineno">18498</span>&#160;            {</div>
-<div class="line"><a name="l18499"></a><span class="lineno">18499</span>&#160;                <span class="comment">// Calculate cost as number of bits from preferredFlags not present in this memory type.</span></div>
-<div class="line"><a name="l18500"></a><span class="lineno">18500</span>&#160;                uint32_t currCost = VmaCountBitsSet(preferredFlags &amp; ~currFlags) +</div>
-<div class="line"><a name="l18501"></a><span class="lineno">18501</span>&#160;                    VmaCountBitsSet(currFlags &amp; notPreferredFlags);</div>
-<div class="line"><a name="l18502"></a><span class="lineno">18502</span>&#160;                <span class="comment">// Remember memory type with lowest cost.</span></div>
-<div class="line"><a name="l18503"></a><span class="lineno">18503</span>&#160;                <span class="keywordflow">if</span>(currCost &lt; minCost)</div>
-<div class="line"><a name="l18504"></a><span class="lineno">18504</span>&#160;                {</div>
-<div class="line"><a name="l18505"></a><span class="lineno">18505</span>&#160;                    *pMemoryTypeIndex = memTypeIndex;</div>
-<div class="line"><a name="l18506"></a><span class="lineno">18506</span>&#160;                    <span class="keywordflow">if</span>(currCost == 0)</div>
-<div class="line"><a name="l18507"></a><span class="lineno">18507</span>&#160;                    {</div>
-<div class="line"><a name="l18508"></a><span class="lineno">18508</span>&#160;                        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l18509"></a><span class="lineno">18509</span>&#160;                    }</div>
-<div class="line"><a name="l18510"></a><span class="lineno">18510</span>&#160;                    minCost = currCost;</div>
-<div class="line"><a name="l18511"></a><span class="lineno">18511</span>&#160;                }</div>
-<div class="line"><a name="l18512"></a><span class="lineno">18512</span>&#160;            }</div>
-<div class="line"><a name="l18513"></a><span class="lineno">18513</span>&#160;        }</div>
-<div class="line"><a name="l18514"></a><span class="lineno">18514</span>&#160;    }</div>
-<div class="line"><a name="l18515"></a><span class="lineno">18515</span>&#160;    <span class="keywordflow">return</span> (*pMemoryTypeIndex != UINT32_MAX) ? VK_SUCCESS : VK_ERROR_FEATURE_NOT_PRESENT;</div>
-<div class="line"><a name="l18516"></a><span class="lineno">18516</span>&#160;}</div>
-<div class="line"><a name="l18517"></a><span class="lineno">18517</span>&#160; </div>
-<div class="line"><a name="l18518"></a><span class="lineno">18518</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888">vmaFindMemoryTypeIndexForBufferInfo</a>(</div>
-<div class="line"><a name="l18519"></a><span class="lineno">18519</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18520"></a><span class="lineno">18520</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* pBufferCreateInfo,</div>
-<div class="line"><a name="l18521"></a><span class="lineno">18521</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div>
-<div class="line"><a name="l18522"></a><span class="lineno">18522</span>&#160;    uint32_t* pMemoryTypeIndex)</div>
-<div class="line"><a name="l18523"></a><span class="lineno">18523</span>&#160;{</div>
-<div class="line"><a name="l18524"></a><span class="lineno">18524</span>&#160;    VMA_ASSERT(allocator != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l18525"></a><span class="lineno">18525</span>&#160;    VMA_ASSERT(pBufferCreateInfo != VMA_NULL);</div>
-<div class="line"><a name="l18526"></a><span class="lineno">18526</span>&#160;    VMA_ASSERT(pAllocationCreateInfo != VMA_NULL);</div>
-<div class="line"><a name="l18527"></a><span class="lineno">18527</span>&#160;    VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);</div>
-<div class="line"><a name="l18528"></a><span class="lineno">18528</span>&#160; </div>
-<div class="line"><a name="l18529"></a><span class="lineno">18529</span>&#160;    <span class="keyword">const</span> VkDevice hDev = allocator-&gt;m_hDevice;</div>
-<div class="line"><a name="l18530"></a><span class="lineno">18530</span>&#160;    VkBuffer hBuffer = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l18531"></a><span class="lineno">18531</span>&#160;    VkResult res = allocator-&gt;GetVulkanFunctions().vkCreateBuffer(</div>
-<div class="line"><a name="l18532"></a><span class="lineno">18532</span>&#160;        hDev, pBufferCreateInfo, allocator-&gt;GetAllocationCallbacks(), &amp;hBuffer);</div>
-<div class="line"><a name="l18533"></a><span class="lineno">18533</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l18534"></a><span class="lineno">18534</span>&#160;    {</div>
-<div class="line"><a name="l18535"></a><span class="lineno">18535</span>&#160;        VkMemoryRequirements memReq = {};</div>
-<div class="line"><a name="l18536"></a><span class="lineno">18536</span>&#160;        allocator-&gt;GetVulkanFunctions().vkGetBufferMemoryRequirements(</div>
-<div class="line"><a name="l18537"></a><span class="lineno">18537</span>&#160;            hDev, hBuffer, &amp;memReq);</div>
-<div class="line"><a name="l18538"></a><span class="lineno">18538</span>&#160; </div>
-<div class="line"><a name="l18539"></a><span class="lineno">18539</span>&#160;        res = <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(</div>
-<div class="line"><a name="l18540"></a><span class="lineno">18540</span>&#160;            allocator,</div>
-<div class="line"><a name="l18541"></a><span class="lineno">18541</span>&#160;            memReq.memoryTypeBits,</div>
-<div class="line"><a name="l18542"></a><span class="lineno">18542</span>&#160;            pAllocationCreateInfo,</div>
-<div class="line"><a name="l18543"></a><span class="lineno">18543</span>&#160;            pMemoryTypeIndex);</div>
-<div class="line"><a name="l18544"></a><span class="lineno">18544</span>&#160; </div>
-<div class="line"><a name="l18545"></a><span class="lineno">18545</span>&#160;        allocator-&gt;GetVulkanFunctions().vkDestroyBuffer(</div>
-<div class="line"><a name="l18546"></a><span class="lineno">18546</span>&#160;            hDev, hBuffer, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l18547"></a><span class="lineno">18547</span>&#160;    }</div>
-<div class="line"><a name="l18548"></a><span class="lineno">18548</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l18549"></a><span class="lineno">18549</span>&#160;}</div>
-<div class="line"><a name="l18550"></a><span class="lineno">18550</span>&#160; </div>
-<div class="line"><a name="l18551"></a><span class="lineno">18551</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472">vmaFindMemoryTypeIndexForImageInfo</a>(</div>
-<div class="line"><a name="l18552"></a><span class="lineno">18552</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18553"></a><span class="lineno">18553</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo* pImageCreateInfo,</div>
-<div class="line"><a name="l18554"></a><span class="lineno">18554</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div>
-<div class="line"><a name="l18555"></a><span class="lineno">18555</span>&#160;    uint32_t* pMemoryTypeIndex)</div>
-<div class="line"><a name="l18556"></a><span class="lineno">18556</span>&#160;{</div>
-<div class="line"><a name="l18557"></a><span class="lineno">18557</span>&#160;    VMA_ASSERT(allocator != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l18558"></a><span class="lineno">18558</span>&#160;    VMA_ASSERT(pImageCreateInfo != VMA_NULL);</div>
-<div class="line"><a name="l18559"></a><span class="lineno">18559</span>&#160;    VMA_ASSERT(pAllocationCreateInfo != VMA_NULL);</div>
-<div class="line"><a name="l18560"></a><span class="lineno">18560</span>&#160;    VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);</div>
-<div class="line"><a name="l18561"></a><span class="lineno">18561</span>&#160; </div>
-<div class="line"><a name="l18562"></a><span class="lineno">18562</span>&#160;    <span class="keyword">const</span> VkDevice hDev = allocator-&gt;m_hDevice;</div>
-<div class="line"><a name="l18563"></a><span class="lineno">18563</span>&#160;    VkImage hImage = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l18564"></a><span class="lineno">18564</span>&#160;    VkResult res = allocator-&gt;GetVulkanFunctions().vkCreateImage(</div>
-<div class="line"><a name="l18565"></a><span class="lineno">18565</span>&#160;        hDev, pImageCreateInfo, allocator-&gt;GetAllocationCallbacks(), &amp;hImage);</div>
-<div class="line"><a name="l18566"></a><span class="lineno">18566</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l18567"></a><span class="lineno">18567</span>&#160;    {</div>
-<div class="line"><a name="l18568"></a><span class="lineno">18568</span>&#160;        VkMemoryRequirements memReq = {};</div>
-<div class="line"><a name="l18569"></a><span class="lineno">18569</span>&#160;        allocator-&gt;GetVulkanFunctions().vkGetImageMemoryRequirements(</div>
-<div class="line"><a name="l18570"></a><span class="lineno">18570</span>&#160;            hDev, hImage, &amp;memReq);</div>
-<div class="line"><a name="l18571"></a><span class="lineno">18571</span>&#160; </div>
-<div class="line"><a name="l18572"></a><span class="lineno">18572</span>&#160;        res = <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(</div>
-<div class="line"><a name="l18573"></a><span class="lineno">18573</span>&#160;            allocator,</div>
-<div class="line"><a name="l18574"></a><span class="lineno">18574</span>&#160;            memReq.memoryTypeBits,</div>
-<div class="line"><a name="l18575"></a><span class="lineno">18575</span>&#160;            pAllocationCreateInfo,</div>
-<div class="line"><a name="l18576"></a><span class="lineno">18576</span>&#160;            pMemoryTypeIndex);</div>
-<div class="line"><a name="l18577"></a><span class="lineno">18577</span>&#160; </div>
-<div class="line"><a name="l18578"></a><span class="lineno">18578</span>&#160;        allocator-&gt;GetVulkanFunctions().vkDestroyImage(</div>
-<div class="line"><a name="l18579"></a><span class="lineno">18579</span>&#160;            hDev, hImage, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l18580"></a><span class="lineno">18580</span>&#160;    }</div>
-<div class="line"><a name="l18581"></a><span class="lineno">18581</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l18582"></a><span class="lineno">18582</span>&#160;}</div>
-<div class="line"><a name="l18583"></a><span class="lineno">18583</span>&#160; </div>
-<div class="line"><a name="l18584"></a><span class="lineno">18584</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50">vmaCreatePool</a>(</div>
-<div class="line"><a name="l18585"></a><span class="lineno">18585</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18586"></a><span class="lineno">18586</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a>* pCreateInfo,</div>
-<div class="line"><a name="l18587"></a><span class="lineno">18587</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a>* pPool)</div>
-<div class="line"><a name="l18588"></a><span class="lineno">18588</span>&#160;{</div>
-<div class="line"><a name="l18589"></a><span class="lineno">18589</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pCreateInfo &amp;&amp; pPool);</div>
-<div class="line"><a name="l18590"></a><span class="lineno">18590</span>&#160; </div>
-<div class="line"><a name="l18591"></a><span class="lineno">18591</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreatePool&quot;</span>);</div>
-<div class="line"><a name="l18592"></a><span class="lineno">18592</span>&#160; </div>
-<div class="line"><a name="l18593"></a><span class="lineno">18593</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18594"></a><span class="lineno">18594</span>&#160; </div>
-<div class="line"><a name="l18595"></a><span class="lineno">18595</span>&#160;    VkResult res = allocator-&gt;CreatePool(pCreateInfo, pPool);</div>
-<div class="line"><a name="l18596"></a><span class="lineno">18596</span>&#160; </div>
-<div class="line"><a name="l18597"></a><span class="lineno">18597</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l18598"></a><span class="lineno">18598</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l18599"></a><span class="lineno">18599</span>&#160;    {</div>
-<div class="line"><a name="l18600"></a><span class="lineno">18600</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordCreatePool(allocator-&gt;GetCurrentFrameIndex(), *pCreateInfo, *pPool);</div>
-<div class="line"><a name="l18601"></a><span class="lineno">18601</span>&#160;    }</div>
-<div class="line"><a name="l18602"></a><span class="lineno">18602</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l18603"></a><span class="lineno">18603</span>&#160; </div>
-<div class="line"><a name="l18604"></a><span class="lineno">18604</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l18605"></a><span class="lineno">18605</span>&#160;}</div>
-<div class="line"><a name="l18606"></a><span class="lineno">18606</span>&#160; </div>
-<div class="line"><a name="l18607"></a><span class="lineno">18607</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1">vmaDestroyPool</a>(</div>
-<div class="line"><a name="l18608"></a><span class="lineno">18608</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18609"></a><span class="lineno">18609</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</div>
-<div class="line"><a name="l18610"></a><span class="lineno">18610</span>&#160;{</div>
-<div class="line"><a name="l18611"></a><span class="lineno">18611</span>&#160;    VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l18612"></a><span class="lineno">18612</span>&#160; </div>
-<div class="line"><a name="l18613"></a><span class="lineno">18613</span>&#160;    <span class="keywordflow">if</span>(pool == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l18614"></a><span class="lineno">18614</span>&#160;    {</div>
-<div class="line"><a name="l18615"></a><span class="lineno">18615</span>&#160;        <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l18616"></a><span class="lineno">18616</span>&#160;    }</div>
-<div class="line"><a name="l18617"></a><span class="lineno">18617</span>&#160; </div>
-<div class="line"><a name="l18618"></a><span class="lineno">18618</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyPool&quot;</span>);</div>
-<div class="line"><a name="l18619"></a><span class="lineno">18619</span>&#160; </div>
-<div class="line"><a name="l18620"></a><span class="lineno">18620</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18621"></a><span class="lineno">18621</span>&#160; </div>
-<div class="line"><a name="l18622"></a><span class="lineno">18622</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l18623"></a><span class="lineno">18623</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l18624"></a><span class="lineno">18624</span>&#160;    {</div>
-<div class="line"><a name="l18625"></a><span class="lineno">18625</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordDestroyPool(allocator-&gt;GetCurrentFrameIndex(), pool);</div>
-<div class="line"><a name="l18626"></a><span class="lineno">18626</span>&#160;    }</div>
-<div class="line"><a name="l18627"></a><span class="lineno">18627</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l18628"></a><span class="lineno">18628</span>&#160; </div>
-<div class="line"><a name="l18629"></a><span class="lineno">18629</span>&#160;    allocator-&gt;DestroyPool(pool);</div>
-<div class="line"><a name="l18630"></a><span class="lineno">18630</span>&#160;}</div>
-<div class="line"><a name="l18631"></a><span class="lineno">18631</span>&#160; </div>
-<div class="line"><a name="l18632"></a><span class="lineno">18632</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153">vmaGetPoolStats</a>(</div>
-<div class="line"><a name="l18633"></a><span class="lineno">18633</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18634"></a><span class="lineno">18634</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
-<div class="line"><a name="l18635"></a><span class="lineno">18635</span>&#160;    <a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>* pPoolStats)</div>
-<div class="line"><a name="l18636"></a><span class="lineno">18636</span>&#160;{</div>
-<div class="line"><a name="l18637"></a><span class="lineno">18637</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool &amp;&amp; pPoolStats);</div>
-<div class="line"><a name="l18638"></a><span class="lineno">18638</span>&#160; </div>
-<div class="line"><a name="l18639"></a><span class="lineno">18639</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18640"></a><span class="lineno">18640</span>&#160; </div>
-<div class="line"><a name="l18641"></a><span class="lineno">18641</span>&#160;    allocator-&gt;GetPoolStats(pool, pPoolStats);</div>
-<div class="line"><a name="l18642"></a><span class="lineno">18642</span>&#160;}</div>
-<div class="line"><a name="l18643"></a><span class="lineno">18643</span>&#160; </div>
-<div class="line"><a name="l18644"></a><span class="lineno">18644</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a736bd6cbda886f36c891727e73bd4024">vmaMakePoolAllocationsLost</a>(</div>
-<div class="line"><a name="l18645"></a><span class="lineno">18645</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18646"></a><span class="lineno">18646</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
-<div class="line"><a name="l18647"></a><span class="lineno">18647</span>&#160;    <span class="keywordtype">size_t</span>* pLostAllocationCount)</div>
-<div class="line"><a name="l18648"></a><span class="lineno">18648</span>&#160;{</div>
-<div class="line"><a name="l18649"></a><span class="lineno">18649</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool);</div>
-<div class="line"><a name="l18650"></a><span class="lineno">18650</span>&#160; </div>
-<div class="line"><a name="l18651"></a><span class="lineno">18651</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18652"></a><span class="lineno">18652</span>&#160; </div>
-<div class="line"><a name="l18653"></a><span class="lineno">18653</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l18654"></a><span class="lineno">18654</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l18655"></a><span class="lineno">18655</span>&#160;    {</div>
-<div class="line"><a name="l18656"></a><span class="lineno">18656</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordMakePoolAllocationsLost(allocator-&gt;GetCurrentFrameIndex(), pool);</div>
-<div class="line"><a name="l18657"></a><span class="lineno">18657</span>&#160;    }</div>
-<div class="line"><a name="l18658"></a><span class="lineno">18658</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l18659"></a><span class="lineno">18659</span>&#160; </div>
-<div class="line"><a name="l18660"></a><span class="lineno">18660</span>&#160;    allocator-&gt;MakePoolAllocationsLost(pool, pLostAllocationCount);</div>
-<div class="line"><a name="l18661"></a><span class="lineno">18661</span>&#160;}</div>
-<div class="line"><a name="l18662"></a><span class="lineno">18662</span>&#160; </div>
-<div class="line"><a name="l18663"></a><span class="lineno">18663</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89">vmaCheckPoolCorruption</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</div>
-<div class="line"><a name="l18664"></a><span class="lineno">18664</span>&#160;{</div>
-<div class="line"><a name="l18665"></a><span class="lineno">18665</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool);</div>
-<div class="line"><a name="l18666"></a><span class="lineno">18666</span>&#160; </div>
-<div class="line"><a name="l18667"></a><span class="lineno">18667</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18668"></a><span class="lineno">18668</span>&#160; </div>
-<div class="line"><a name="l18669"></a><span class="lineno">18669</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCheckPoolCorruption&quot;</span>);</div>
-<div class="line"><a name="l18670"></a><span class="lineno">18670</span>&#160; </div>
-<div class="line"><a name="l18671"></a><span class="lineno">18671</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;CheckPoolCorruption(pool);</div>
-<div class="line"><a name="l18672"></a><span class="lineno">18672</span>&#160;}</div>
-<div class="line"><a name="l18673"></a><span class="lineno">18673</span>&#160; </div>
-<div class="line"><a name="l18674"></a><span class="lineno">18674</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#af09b4e4eafdbee812e8d73ddf960f030">vmaGetPoolName</a>(</div>
-<div class="line"><a name="l18675"></a><span class="lineno">18675</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18676"></a><span class="lineno">18676</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
-<div class="line"><a name="l18677"></a><span class="lineno">18677</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>** ppName)</div>
-<div class="line"><a name="l18678"></a><span class="lineno">18678</span>&#160;{</div>
-<div class="line"><a name="l18679"></a><span class="lineno">18679</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool &amp;&amp; ppName);</div>
-<div class="line"><a name="l18680"></a><span class="lineno">18680</span>&#160; </div>
-<div class="line"><a name="l18681"></a><span class="lineno">18681</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaGetPoolName&quot;</span>);</div>
-<div class="line"><a name="l18682"></a><span class="lineno">18682</span>&#160; </div>
-<div class="line"><a name="l18683"></a><span class="lineno">18683</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18684"></a><span class="lineno">18684</span>&#160; </div>
-<div class="line"><a name="l18685"></a><span class="lineno">18685</span>&#160;    *ppName = pool-&gt;GetName();</div>
-<div class="line"><a name="l18686"></a><span class="lineno">18686</span>&#160;}</div>
-<div class="line"><a name="l18687"></a><span class="lineno">18687</span>&#160; </div>
-<div class="line"><a name="l18688"></a><span class="lineno">18688</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58">vmaSetPoolName</a>(</div>
-<div class="line"><a name="l18689"></a><span class="lineno">18689</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18690"></a><span class="lineno">18690</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
-<div class="line"><a name="l18691"></a><span class="lineno">18691</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* pName)</div>
-<div class="line"><a name="l18692"></a><span class="lineno">18692</span>&#160;{</div>
-<div class="line"><a name="l18693"></a><span class="lineno">18693</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool);</div>
-<div class="line"><a name="l18694"></a><span class="lineno">18694</span>&#160; </div>
-<div class="line"><a name="l18695"></a><span class="lineno">18695</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaSetPoolName&quot;</span>);</div>
-<div class="line"><a name="l18696"></a><span class="lineno">18696</span>&#160; </div>
-<div class="line"><a name="l18697"></a><span class="lineno">18697</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18698"></a><span class="lineno">18698</span>&#160; </div>
-<div class="line"><a name="l18699"></a><span class="lineno">18699</span>&#160;    pool-&gt;SetName(pName);</div>
-<div class="line"><a name="l18700"></a><span class="lineno">18700</span>&#160; </div>
-<div class="line"><a name="l18701"></a><span class="lineno">18701</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l18702"></a><span class="lineno">18702</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l18703"></a><span class="lineno">18703</span>&#160;    {</div>
-<div class="line"><a name="l18704"></a><span class="lineno">18704</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordSetPoolName(allocator-&gt;GetCurrentFrameIndex(), pool, pName);</div>
-<div class="line"><a name="l18705"></a><span class="lineno">18705</span>&#160;    }</div>
-<div class="line"><a name="l18706"></a><span class="lineno">18706</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l18707"></a><span class="lineno">18707</span>&#160;}</div>
-<div class="line"><a name="l18708"></a><span class="lineno">18708</span>&#160; </div>
-<div class="line"><a name="l18709"></a><span class="lineno">18709</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8">vmaAllocateMemory</a>(</div>
-<div class="line"><a name="l18710"></a><span class="lineno">18710</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18711"></a><span class="lineno">18711</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements* pVkMemoryRequirements,</div>
-<div class="line"><a name="l18712"></a><span class="lineno">18712</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pCreateInfo,</div>
-<div class="line"><a name="l18713"></a><span class="lineno">18713</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
-<div class="line"><a name="l18714"></a><span class="lineno">18714</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
-<div class="line"><a name="l18715"></a><span class="lineno">18715</span>&#160;{</div>
-<div class="line"><a name="l18716"></a><span class="lineno">18716</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pVkMemoryRequirements &amp;&amp; pCreateInfo &amp;&amp; pAllocation);</div>
-<div class="line"><a name="l18717"></a><span class="lineno">18717</span>&#160; </div>
-<div class="line"><a name="l18718"></a><span class="lineno">18718</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemory&quot;</span>);</div>
-<div class="line"><a name="l18719"></a><span class="lineno">18719</span>&#160; </div>
-<div class="line"><a name="l18720"></a><span class="lineno">18720</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18721"></a><span class="lineno">18721</span>&#160; </div>
-<div class="line"><a name="l18722"></a><span class="lineno">18722</span>&#160;    VkResult result = allocator-&gt;AllocateMemory(</div>
-<div class="line"><a name="l18723"></a><span class="lineno">18723</span>&#160;        *pVkMemoryRequirements,</div>
-<div class="line"><a name="l18724"></a><span class="lineno">18724</span>&#160;        <span class="keyword">false</span>, <span class="comment">// requiresDedicatedAllocation</span></div>
-<div class="line"><a name="l18725"></a><span class="lineno">18725</span>&#160;        <span class="keyword">false</span>, <span class="comment">// prefersDedicatedAllocation</span></div>
-<div class="line"><a name="l18726"></a><span class="lineno">18726</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
-<div class="line"><a name="l18727"></a><span class="lineno">18727</span>&#160;        UINT32_MAX, <span class="comment">// dedicatedBufferUsage</span></div>
-<div class="line"><a name="l18728"></a><span class="lineno">18728</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
-<div class="line"><a name="l18729"></a><span class="lineno">18729</span>&#160;        *pCreateInfo,</div>
-<div class="line"><a name="l18730"></a><span class="lineno">18730</span>&#160;        VMA_SUBALLOCATION_TYPE_UNKNOWN,</div>
-<div class="line"><a name="l18731"></a><span class="lineno">18731</span>&#160;        1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l18732"></a><span class="lineno">18732</span>&#160;        pAllocation);</div>
-<div class="line"><a name="l18733"></a><span class="lineno">18733</span>&#160; </div>
-<div class="line"><a name="l18734"></a><span class="lineno">18734</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l18735"></a><span class="lineno">18735</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l18736"></a><span class="lineno">18736</span>&#160;    {</div>
-<div class="line"><a name="l18737"></a><span class="lineno">18737</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemory(</div>
-<div class="line"><a name="l18738"></a><span class="lineno">18738</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l18739"></a><span class="lineno">18739</span>&#160;            *pVkMemoryRequirements,</div>
-<div class="line"><a name="l18740"></a><span class="lineno">18740</span>&#160;            *pCreateInfo,</div>
-<div class="line"><a name="l18741"></a><span class="lineno">18741</span>&#160;            *pAllocation);</div>
-<div class="line"><a name="l18742"></a><span class="lineno">18742</span>&#160;    }</div>
-<div class="line"><a name="l18743"></a><span class="lineno">18743</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l18744"></a><span class="lineno">18744</span>&#160; </div>
-<div class="line"><a name="l18745"></a><span class="lineno">18745</span>&#160;    <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL &amp;&amp; result == VK_SUCCESS)</div>
-<div class="line"><a name="l18746"></a><span class="lineno">18746</span>&#160;    {</div>
-<div class="line"><a name="l18747"></a><span class="lineno">18747</span>&#160;        allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
-<div class="line"><a name="l18748"></a><span class="lineno">18748</span>&#160;    }</div>
-<div class="line"><a name="l18749"></a><span class="lineno">18749</span>&#160; </div>
-<div class="line"><a name="l18750"></a><span class="lineno">18750</span>&#160;    <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l18751"></a><span class="lineno">18751</span>&#160;}</div>
-<div class="line"><a name="l18752"></a><span class="lineno">18752</span>&#160; </div>
-<div class="line"><a name="l18753"></a><span class="lineno">18753</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1">vmaAllocateMemoryPages</a>(</div>
-<div class="line"><a name="l18754"></a><span class="lineno">18754</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18755"></a><span class="lineno">18755</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements* pVkMemoryRequirements,</div>
-<div class="line"><a name="l18756"></a><span class="lineno">18756</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pCreateInfo,</div>
-<div class="line"><a name="l18757"></a><span class="lineno">18757</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l18758"></a><span class="lineno">18758</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations,</div>
-<div class="line"><a name="l18759"></a><span class="lineno">18759</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
-<div class="line"><a name="l18760"></a><span class="lineno">18760</span>&#160;{</div>
-<div class="line"><a name="l18761"></a><span class="lineno">18761</span>&#160;    <span class="keywordflow">if</span>(allocationCount == 0)</div>
-<div class="line"><a name="l18762"></a><span class="lineno">18762</span>&#160;    {</div>
-<div class="line"><a name="l18763"></a><span class="lineno">18763</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l18764"></a><span class="lineno">18764</span>&#160;    }</div>
-<div class="line"><a name="l18765"></a><span class="lineno">18765</span>&#160; </div>
-<div class="line"><a name="l18766"></a><span class="lineno">18766</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pVkMemoryRequirements &amp;&amp; pCreateInfo &amp;&amp; pAllocations);</div>
-<div class="line"><a name="l18767"></a><span class="lineno">18767</span>&#160; </div>
-<div class="line"><a name="l18768"></a><span class="lineno">18768</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemoryPages&quot;</span>);</div>
-<div class="line"><a name="l18769"></a><span class="lineno">18769</span>&#160; </div>
-<div class="line"><a name="l18770"></a><span class="lineno">18770</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18771"></a><span class="lineno">18771</span>&#160; </div>
-<div class="line"><a name="l18772"></a><span class="lineno">18772</span>&#160;    VkResult result = allocator-&gt;AllocateMemory(</div>
-<div class="line"><a name="l18773"></a><span class="lineno">18773</span>&#160;        *pVkMemoryRequirements,</div>
-<div class="line"><a name="l18774"></a><span class="lineno">18774</span>&#160;        <span class="keyword">false</span>, <span class="comment">// requiresDedicatedAllocation</span></div>
-<div class="line"><a name="l18775"></a><span class="lineno">18775</span>&#160;        <span class="keyword">false</span>, <span class="comment">// prefersDedicatedAllocation</span></div>
-<div class="line"><a name="l18776"></a><span class="lineno">18776</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
-<div class="line"><a name="l18777"></a><span class="lineno">18777</span>&#160;        UINT32_MAX, <span class="comment">// dedicatedBufferUsage</span></div>
-<div class="line"><a name="l18778"></a><span class="lineno">18778</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
-<div class="line"><a name="l18779"></a><span class="lineno">18779</span>&#160;        *pCreateInfo,</div>
-<div class="line"><a name="l18780"></a><span class="lineno">18780</span>&#160;        VMA_SUBALLOCATION_TYPE_UNKNOWN,</div>
-<div class="line"><a name="l18781"></a><span class="lineno">18781</span>&#160;        allocationCount,</div>
-<div class="line"><a name="l18782"></a><span class="lineno">18782</span>&#160;        pAllocations);</div>
-<div class="line"><a name="l18783"></a><span class="lineno">18783</span>&#160; </div>
-<div class="line"><a name="l18784"></a><span class="lineno">18784</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l18785"></a><span class="lineno">18785</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l18786"></a><span class="lineno">18786</span>&#160;    {</div>
-<div class="line"><a name="l18787"></a><span class="lineno">18787</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemoryPages(</div>
-<div class="line"><a name="l18788"></a><span class="lineno">18788</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l18789"></a><span class="lineno">18789</span>&#160;            *pVkMemoryRequirements,</div>
-<div class="line"><a name="l18790"></a><span class="lineno">18790</span>&#160;            *pCreateInfo,</div>
-<div class="line"><a name="l18791"></a><span class="lineno">18791</span>&#160;            (uint64_t)allocationCount,</div>
-<div class="line"><a name="l18792"></a><span class="lineno">18792</span>&#160;            pAllocations);</div>
-<div class="line"><a name="l18793"></a><span class="lineno">18793</span>&#160;    }</div>
-<div class="line"><a name="l18794"></a><span class="lineno">18794</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l18795"></a><span class="lineno">18795</span>&#160; </div>
-<div class="line"><a name="l18796"></a><span class="lineno">18796</span>&#160;    <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL &amp;&amp; result == VK_SUCCESS)</div>
-<div class="line"><a name="l18797"></a><span class="lineno">18797</span>&#160;    {</div>
-<div class="line"><a name="l18798"></a><span class="lineno">18798</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; allocationCount; ++i)</div>
-<div class="line"><a name="l18799"></a><span class="lineno">18799</span>&#160;        {</div>
-<div class="line"><a name="l18800"></a><span class="lineno">18800</span>&#160;            allocator-&gt;GetAllocationInfo(pAllocations[i], pAllocationInfo + i);</div>
-<div class="line"><a name="l18801"></a><span class="lineno">18801</span>&#160;        }</div>
-<div class="line"><a name="l18802"></a><span class="lineno">18802</span>&#160;    }</div>
-<div class="line"><a name="l18803"></a><span class="lineno">18803</span>&#160; </div>
-<div class="line"><a name="l18804"></a><span class="lineno">18804</span>&#160;    <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l18805"></a><span class="lineno">18805</span>&#160;}</div>
-<div class="line"><a name="l18806"></a><span class="lineno">18806</span>&#160; </div>
-<div class="line"><a name="l18807"></a><span class="lineno">18807</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer</a>(</div>
-<div class="line"><a name="l18808"></a><span class="lineno">18808</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18809"></a><span class="lineno">18809</span>&#160;    VkBuffer buffer,</div>
-<div class="line"><a name="l18810"></a><span class="lineno">18810</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pCreateInfo,</div>
-<div class="line"><a name="l18811"></a><span class="lineno">18811</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
-<div class="line"><a name="l18812"></a><span class="lineno">18812</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
-<div class="line"><a name="l18813"></a><span class="lineno">18813</span>&#160;{</div>
-<div class="line"><a name="l18814"></a><span class="lineno">18814</span>&#160;    VMA_ASSERT(allocator &amp;&amp; buffer != VK_NULL_HANDLE &amp;&amp; pCreateInfo &amp;&amp; pAllocation);</div>
-<div class="line"><a name="l18815"></a><span class="lineno">18815</span>&#160; </div>
-<div class="line"><a name="l18816"></a><span class="lineno">18816</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemoryForBuffer&quot;</span>);</div>
-<div class="line"><a name="l18817"></a><span class="lineno">18817</span>&#160; </div>
-<div class="line"><a name="l18818"></a><span class="lineno">18818</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18819"></a><span class="lineno">18819</span>&#160; </div>
-<div class="line"><a name="l18820"></a><span class="lineno">18820</span>&#160;    VkMemoryRequirements vkMemReq = {};</div>
-<div class="line"><a name="l18821"></a><span class="lineno">18821</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l18822"></a><span class="lineno">18822</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l18823"></a><span class="lineno">18823</span>&#160;    allocator-&gt;GetBufferMemoryRequirements(buffer, vkMemReq,</div>
-<div class="line"><a name="l18824"></a><span class="lineno">18824</span>&#160;        requiresDedicatedAllocation,</div>
-<div class="line"><a name="l18825"></a><span class="lineno">18825</span>&#160;        prefersDedicatedAllocation);</div>
-<div class="line"><a name="l18826"></a><span class="lineno">18826</span>&#160; </div>
-<div class="line"><a name="l18827"></a><span class="lineno">18827</span>&#160;    VkResult result = allocator-&gt;AllocateMemory(</div>
-<div class="line"><a name="l18828"></a><span class="lineno">18828</span>&#160;        vkMemReq,</div>
-<div class="line"><a name="l18829"></a><span class="lineno">18829</span>&#160;        requiresDedicatedAllocation,</div>
-<div class="line"><a name="l18830"></a><span class="lineno">18830</span>&#160;        prefersDedicatedAllocation,</div>
-<div class="line"><a name="l18831"></a><span class="lineno">18831</span>&#160;        buffer, <span class="comment">// dedicatedBuffer</span></div>
-<div class="line"><a name="l18832"></a><span class="lineno">18832</span>&#160;        UINT32_MAX, <span class="comment">// dedicatedBufferUsage</span></div>
-<div class="line"><a name="l18833"></a><span class="lineno">18833</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
-<div class="line"><a name="l18834"></a><span class="lineno">18834</span>&#160;        *pCreateInfo,</div>
-<div class="line"><a name="l18835"></a><span class="lineno">18835</span>&#160;        VMA_SUBALLOCATION_TYPE_BUFFER,</div>
-<div class="line"><a name="l18836"></a><span class="lineno">18836</span>&#160;        1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l18837"></a><span class="lineno">18837</span>&#160;        pAllocation);</div>
-<div class="line"><a name="l18838"></a><span class="lineno">18838</span>&#160; </div>
-<div class="line"><a name="l18839"></a><span class="lineno">18839</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l18840"></a><span class="lineno">18840</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l18841"></a><span class="lineno">18841</span>&#160;    {</div>
-<div class="line"><a name="l18842"></a><span class="lineno">18842</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemoryForBuffer(</div>
-<div class="line"><a name="l18843"></a><span class="lineno">18843</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l18844"></a><span class="lineno">18844</span>&#160;            vkMemReq,</div>
-<div class="line"><a name="l18845"></a><span class="lineno">18845</span>&#160;            requiresDedicatedAllocation,</div>
-<div class="line"><a name="l18846"></a><span class="lineno">18846</span>&#160;            prefersDedicatedAllocation,</div>
-<div class="line"><a name="l18847"></a><span class="lineno">18847</span>&#160;            *pCreateInfo,</div>
-<div class="line"><a name="l18848"></a><span class="lineno">18848</span>&#160;            *pAllocation);</div>
-<div class="line"><a name="l18849"></a><span class="lineno">18849</span>&#160;    }</div>
-<div class="line"><a name="l18850"></a><span class="lineno">18850</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l18851"></a><span class="lineno">18851</span>&#160; </div>
-<div class="line"><a name="l18852"></a><span class="lineno">18852</span>&#160;    <span class="keywordflow">if</span>(pAllocationInfo &amp;&amp; result == VK_SUCCESS)</div>
-<div class="line"><a name="l18853"></a><span class="lineno">18853</span>&#160;    {</div>
-<div class="line"><a name="l18854"></a><span class="lineno">18854</span>&#160;        allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
-<div class="line"><a name="l18855"></a><span class="lineno">18855</span>&#160;    }</div>
-<div class="line"><a name="l18856"></a><span class="lineno">18856</span>&#160; </div>
-<div class="line"><a name="l18857"></a><span class="lineno">18857</span>&#160;    <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l18858"></a><span class="lineno">18858</span>&#160;}</div>
-<div class="line"><a name="l18859"></a><span class="lineno">18859</span>&#160; </div>
-<div class="line"><a name="l18860"></a><span class="lineno">18860</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb">vmaAllocateMemoryForImage</a>(</div>
-<div class="line"><a name="l18861"></a><span class="lineno">18861</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18862"></a><span class="lineno">18862</span>&#160;    VkImage image,</div>
-<div class="line"><a name="l18863"></a><span class="lineno">18863</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pCreateInfo,</div>
-<div class="line"><a name="l18864"></a><span class="lineno">18864</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
-<div class="line"><a name="l18865"></a><span class="lineno">18865</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
-<div class="line"><a name="l18866"></a><span class="lineno">18866</span>&#160;{</div>
-<div class="line"><a name="l18867"></a><span class="lineno">18867</span>&#160;    VMA_ASSERT(allocator &amp;&amp; image != VK_NULL_HANDLE &amp;&amp; pCreateInfo &amp;&amp; pAllocation);</div>
-<div class="line"><a name="l18868"></a><span class="lineno">18868</span>&#160; </div>
-<div class="line"><a name="l18869"></a><span class="lineno">18869</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemoryForImage&quot;</span>);</div>
-<div class="line"><a name="l18870"></a><span class="lineno">18870</span>&#160; </div>
-<div class="line"><a name="l18871"></a><span class="lineno">18871</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18872"></a><span class="lineno">18872</span>&#160; </div>
-<div class="line"><a name="l18873"></a><span class="lineno">18873</span>&#160;    VkMemoryRequirements vkMemReq = {};</div>
-<div class="line"><a name="l18874"></a><span class="lineno">18874</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l18875"></a><span class="lineno">18875</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l18876"></a><span class="lineno">18876</span>&#160;    allocator-&gt;GetImageMemoryRequirements(image, vkMemReq,</div>
-<div class="line"><a name="l18877"></a><span class="lineno">18877</span>&#160;        requiresDedicatedAllocation, prefersDedicatedAllocation);</div>
-<div class="line"><a name="l18878"></a><span class="lineno">18878</span>&#160; </div>
-<div class="line"><a name="l18879"></a><span class="lineno">18879</span>&#160;    VkResult result = allocator-&gt;AllocateMemory(</div>
-<div class="line"><a name="l18880"></a><span class="lineno">18880</span>&#160;        vkMemReq,</div>
-<div class="line"><a name="l18881"></a><span class="lineno">18881</span>&#160;        requiresDedicatedAllocation,</div>
-<div class="line"><a name="l18882"></a><span class="lineno">18882</span>&#160;        prefersDedicatedAllocation,</div>
-<div class="line"><a name="l18883"></a><span class="lineno">18883</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
-<div class="line"><a name="l18884"></a><span class="lineno">18884</span>&#160;        UINT32_MAX, <span class="comment">// dedicatedBufferUsage</span></div>
-<div class="line"><a name="l18885"></a><span class="lineno">18885</span>&#160;        image, <span class="comment">// dedicatedImage</span></div>
-<div class="line"><a name="l18886"></a><span class="lineno">18886</span>&#160;        *pCreateInfo,</div>
-<div class="line"><a name="l18887"></a><span class="lineno">18887</span>&#160;        VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN,</div>
-<div class="line"><a name="l18888"></a><span class="lineno">18888</span>&#160;        1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l18889"></a><span class="lineno">18889</span>&#160;        pAllocation);</div>
-<div class="line"><a name="l18890"></a><span class="lineno">18890</span>&#160; </div>
-<div class="line"><a name="l18891"></a><span class="lineno">18891</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l18892"></a><span class="lineno">18892</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l18893"></a><span class="lineno">18893</span>&#160;    {</div>
-<div class="line"><a name="l18894"></a><span class="lineno">18894</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemoryForImage(</div>
-<div class="line"><a name="l18895"></a><span class="lineno">18895</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l18896"></a><span class="lineno">18896</span>&#160;            vkMemReq,</div>
-<div class="line"><a name="l18897"></a><span class="lineno">18897</span>&#160;            requiresDedicatedAllocation,</div>
-<div class="line"><a name="l18898"></a><span class="lineno">18898</span>&#160;            prefersDedicatedAllocation,</div>
-<div class="line"><a name="l18899"></a><span class="lineno">18899</span>&#160;            *pCreateInfo,</div>
-<div class="line"><a name="l18900"></a><span class="lineno">18900</span>&#160;            *pAllocation);</div>
-<div class="line"><a name="l18901"></a><span class="lineno">18901</span>&#160;    }</div>
-<div class="line"><a name="l18902"></a><span class="lineno">18902</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l18903"></a><span class="lineno">18903</span>&#160; </div>
-<div class="line"><a name="l18904"></a><span class="lineno">18904</span>&#160;    <span class="keywordflow">if</span>(pAllocationInfo &amp;&amp; result == VK_SUCCESS)</div>
-<div class="line"><a name="l18905"></a><span class="lineno">18905</span>&#160;    {</div>
-<div class="line"><a name="l18906"></a><span class="lineno">18906</span>&#160;        allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
-<div class="line"><a name="l18907"></a><span class="lineno">18907</span>&#160;    }</div>
-<div class="line"><a name="l18908"></a><span class="lineno">18908</span>&#160; </div>
-<div class="line"><a name="l18909"></a><span class="lineno">18909</span>&#160;    <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l18910"></a><span class="lineno">18910</span>&#160;}</div>
-<div class="line"><a name="l18911"></a><span class="lineno">18911</span>&#160; </div>
-<div class="line"><a name="l18912"></a><span class="lineno">18912</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a>(</div>
-<div class="line"><a name="l18913"></a><span class="lineno">18913</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18914"></a><span class="lineno">18914</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l18915"></a><span class="lineno">18915</span>&#160;{</div>
-<div class="line"><a name="l18916"></a><span class="lineno">18916</span>&#160;    VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l18917"></a><span class="lineno">18917</span>&#160; </div>
-<div class="line"><a name="l18918"></a><span class="lineno">18918</span>&#160;    <span class="keywordflow">if</span>(allocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l18919"></a><span class="lineno">18919</span>&#160;    {</div>
-<div class="line"><a name="l18920"></a><span class="lineno">18920</span>&#160;        <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l18921"></a><span class="lineno">18921</span>&#160;    }</div>
-<div class="line"><a name="l18922"></a><span class="lineno">18922</span>&#160; </div>
-<div class="line"><a name="l18923"></a><span class="lineno">18923</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaFreeMemory&quot;</span>);</div>
-<div class="line"><a name="l18924"></a><span class="lineno">18924</span>&#160; </div>
-<div class="line"><a name="l18925"></a><span class="lineno">18925</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18926"></a><span class="lineno">18926</span>&#160; </div>
-<div class="line"><a name="l18927"></a><span class="lineno">18927</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l18928"></a><span class="lineno">18928</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l18929"></a><span class="lineno">18929</span>&#160;    {</div>
-<div class="line"><a name="l18930"></a><span class="lineno">18930</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordFreeMemory(</div>
-<div class="line"><a name="l18931"></a><span class="lineno">18931</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l18932"></a><span class="lineno">18932</span>&#160;            allocation);</div>
-<div class="line"><a name="l18933"></a><span class="lineno">18933</span>&#160;    }</div>
-<div class="line"><a name="l18934"></a><span class="lineno">18934</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l18935"></a><span class="lineno">18935</span>&#160; </div>
-<div class="line"><a name="l18936"></a><span class="lineno">18936</span>&#160;    allocator-&gt;FreeMemory(</div>
-<div class="line"><a name="l18937"></a><span class="lineno">18937</span>&#160;        1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l18938"></a><span class="lineno">18938</span>&#160;        &amp;allocation);</div>
-<div class="line"><a name="l18939"></a><span class="lineno">18939</span>&#160;}</div>
-<div class="line"><a name="l18940"></a><span class="lineno">18940</span>&#160; </div>
-<div class="line"><a name="l18941"></a><span class="lineno">18941</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e">vmaFreeMemoryPages</a>(</div>
-<div class="line"><a name="l18942"></a><span class="lineno">18942</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18943"></a><span class="lineno">18943</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l18944"></a><span class="lineno">18944</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
-<div class="line"><a name="l18945"></a><span class="lineno">18945</span>&#160;{</div>
-<div class="line"><a name="l18946"></a><span class="lineno">18946</span>&#160;    <span class="keywordflow">if</span>(allocationCount == 0)</div>
-<div class="line"><a name="l18947"></a><span class="lineno">18947</span>&#160;    {</div>
-<div class="line"><a name="l18948"></a><span class="lineno">18948</span>&#160;        <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l18949"></a><span class="lineno">18949</span>&#160;    }</div>
-<div class="line"><a name="l18950"></a><span class="lineno">18950</span>&#160; </div>
-<div class="line"><a name="l18951"></a><span class="lineno">18951</span>&#160;    VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l18952"></a><span class="lineno">18952</span>&#160; </div>
-<div class="line"><a name="l18953"></a><span class="lineno">18953</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaFreeMemoryPages&quot;</span>);</div>
-<div class="line"><a name="l18954"></a><span class="lineno">18954</span>&#160; </div>
-<div class="line"><a name="l18955"></a><span class="lineno">18955</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18956"></a><span class="lineno">18956</span>&#160; </div>
-<div class="line"><a name="l18957"></a><span class="lineno">18957</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l18958"></a><span class="lineno">18958</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l18959"></a><span class="lineno">18959</span>&#160;    {</div>
-<div class="line"><a name="l18960"></a><span class="lineno">18960</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordFreeMemoryPages(</div>
-<div class="line"><a name="l18961"></a><span class="lineno">18961</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l18962"></a><span class="lineno">18962</span>&#160;            (uint64_t)allocationCount,</div>
-<div class="line"><a name="l18963"></a><span class="lineno">18963</span>&#160;            pAllocations);</div>
-<div class="line"><a name="l18964"></a><span class="lineno">18964</span>&#160;    }</div>
-<div class="line"><a name="l18965"></a><span class="lineno">18965</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l18966"></a><span class="lineno">18966</span>&#160; </div>
-<div class="line"><a name="l18967"></a><span class="lineno">18967</span>&#160;    allocator-&gt;FreeMemory(allocationCount, pAllocations);</div>
-<div class="line"><a name="l18968"></a><span class="lineno">18968</span>&#160;}</div>
-<div class="line"><a name="l18969"></a><span class="lineno">18969</span>&#160; </div>
-<div class="line"><a name="l18970"></a><span class="lineno">18970</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(</div>
-<div class="line"><a name="l18971"></a><span class="lineno">18971</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18972"></a><span class="lineno">18972</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l18973"></a><span class="lineno">18973</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
-<div class="line"><a name="l18974"></a><span class="lineno">18974</span>&#160;{</div>
-<div class="line"><a name="l18975"></a><span class="lineno">18975</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; pAllocationInfo);</div>
-<div class="line"><a name="l18976"></a><span class="lineno">18976</span>&#160; </div>
-<div class="line"><a name="l18977"></a><span class="lineno">18977</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18978"></a><span class="lineno">18978</span>&#160; </div>
-<div class="line"><a name="l18979"></a><span class="lineno">18979</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l18980"></a><span class="lineno">18980</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l18981"></a><span class="lineno">18981</span>&#160;    {</div>
-<div class="line"><a name="l18982"></a><span class="lineno">18982</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordGetAllocationInfo(</div>
-<div class="line"><a name="l18983"></a><span class="lineno">18983</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l18984"></a><span class="lineno">18984</span>&#160;            allocation);</div>
-<div class="line"><a name="l18985"></a><span class="lineno">18985</span>&#160;    }</div>
-<div class="line"><a name="l18986"></a><span class="lineno">18986</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l18987"></a><span class="lineno">18987</span>&#160; </div>
-<div class="line"><a name="l18988"></a><span class="lineno">18988</span>&#160;    allocator-&gt;GetAllocationInfo(allocation, pAllocationInfo);</div>
-<div class="line"><a name="l18989"></a><span class="lineno">18989</span>&#160;}</div>
-<div class="line"><a name="l18990"></a><span class="lineno">18990</span>&#160; </div>
-<div class="line"><a name="l18991"></a><span class="lineno">18991</span>&#160;VMA_CALL_PRE VkBool32 VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a43d8ba9673c846f049089a5029d5c73a">vmaTouchAllocation</a>(</div>
-<div class="line"><a name="l18992"></a><span class="lineno">18992</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l18993"></a><span class="lineno">18993</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l18994"></a><span class="lineno">18994</span>&#160;{</div>
-<div class="line"><a name="l18995"></a><span class="lineno">18995</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
-<div class="line"><a name="l18996"></a><span class="lineno">18996</span>&#160; </div>
-<div class="line"><a name="l18997"></a><span class="lineno">18997</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l18998"></a><span class="lineno">18998</span>&#160; </div>
-<div class="line"><a name="l18999"></a><span class="lineno">18999</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19000"></a><span class="lineno">19000</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19001"></a><span class="lineno">19001</span>&#160;    {</div>
-<div class="line"><a name="l19002"></a><span class="lineno">19002</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordTouchAllocation(</div>
-<div class="line"><a name="l19003"></a><span class="lineno">19003</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l19004"></a><span class="lineno">19004</span>&#160;            allocation);</div>
-<div class="line"><a name="l19005"></a><span class="lineno">19005</span>&#160;    }</div>
-<div class="line"><a name="l19006"></a><span class="lineno">19006</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19007"></a><span class="lineno">19007</span>&#160; </div>
-<div class="line"><a name="l19008"></a><span class="lineno">19008</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;TouchAllocation(allocation);</div>
-<div class="line"><a name="l19009"></a><span class="lineno">19009</span>&#160;}</div>
-<div class="line"><a name="l19010"></a><span class="lineno">19010</span>&#160; </div>
-<div class="line"><a name="l19011"></a><span class="lineno">19011</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f">vmaSetAllocationUserData</a>(</div>
-<div class="line"><a name="l19012"></a><span class="lineno">19012</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19013"></a><span class="lineno">19013</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l19014"></a><span class="lineno">19014</span>&#160;    <span class="keywordtype">void</span>* pUserData)</div>
-<div class="line"><a name="l19015"></a><span class="lineno">19015</span>&#160;{</div>
-<div class="line"><a name="l19016"></a><span class="lineno">19016</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
-<div class="line"><a name="l19017"></a><span class="lineno">19017</span>&#160; </div>
-<div class="line"><a name="l19018"></a><span class="lineno">19018</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19019"></a><span class="lineno">19019</span>&#160; </div>
-<div class="line"><a name="l19020"></a><span class="lineno">19020</span>&#160;    allocation-&gt;SetUserData(allocator, pUserData);</div>
-<div class="line"><a name="l19021"></a><span class="lineno">19021</span>&#160; </div>
-<div class="line"><a name="l19022"></a><span class="lineno">19022</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19023"></a><span class="lineno">19023</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19024"></a><span class="lineno">19024</span>&#160;    {</div>
-<div class="line"><a name="l19025"></a><span class="lineno">19025</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordSetAllocationUserData(</div>
-<div class="line"><a name="l19026"></a><span class="lineno">19026</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l19027"></a><span class="lineno">19027</span>&#160;            allocation,</div>
-<div class="line"><a name="l19028"></a><span class="lineno">19028</span>&#160;            pUserData);</div>
-<div class="line"><a name="l19029"></a><span class="lineno">19029</span>&#160;    }</div>
-<div class="line"><a name="l19030"></a><span class="lineno">19030</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19031"></a><span class="lineno">19031</span>&#160;}</div>
-<div class="line"><a name="l19032"></a><span class="lineno">19032</span>&#160; </div>
-<div class="line"><a name="l19033"></a><span class="lineno">19033</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae5c9657d9e94756269145b01c05d16f1">vmaCreateLostAllocation</a>(</div>
-<div class="line"><a name="l19034"></a><span class="lineno">19034</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19035"></a><span class="lineno">19035</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
-<div class="line"><a name="l19036"></a><span class="lineno">19036</span>&#160;{</div>
-<div class="line"><a name="l19037"></a><span class="lineno">19037</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pAllocation);</div>
-<div class="line"><a name="l19038"></a><span class="lineno">19038</span>&#160; </div>
-<div class="line"><a name="l19039"></a><span class="lineno">19039</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK;</div>
-<div class="line"><a name="l19040"></a><span class="lineno">19040</span>&#160; </div>
-<div class="line"><a name="l19041"></a><span class="lineno">19041</span>&#160;    allocator-&gt;CreateLostAllocation(pAllocation);</div>
-<div class="line"><a name="l19042"></a><span class="lineno">19042</span>&#160; </div>
-<div class="line"><a name="l19043"></a><span class="lineno">19043</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19044"></a><span class="lineno">19044</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19045"></a><span class="lineno">19045</span>&#160;    {</div>
-<div class="line"><a name="l19046"></a><span class="lineno">19046</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordCreateLostAllocation(</div>
-<div class="line"><a name="l19047"></a><span class="lineno">19047</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l19048"></a><span class="lineno">19048</span>&#160;            *pAllocation);</div>
-<div class="line"><a name="l19049"></a><span class="lineno">19049</span>&#160;    }</div>
-<div class="line"><a name="l19050"></a><span class="lineno">19050</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19051"></a><span class="lineno">19051</span>&#160;}</div>
-<div class="line"><a name="l19052"></a><span class="lineno">19052</span>&#160; </div>
-<div class="line"><a name="l19053"></a><span class="lineno">19053</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069">vmaMapMemory</a>(</div>
-<div class="line"><a name="l19054"></a><span class="lineno">19054</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19055"></a><span class="lineno">19055</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l19056"></a><span class="lineno">19056</span>&#160;    <span class="keywordtype">void</span>** ppData)</div>
-<div class="line"><a name="l19057"></a><span class="lineno">19057</span>&#160;{</div>
-<div class="line"><a name="l19058"></a><span class="lineno">19058</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; ppData);</div>
-<div class="line"><a name="l19059"></a><span class="lineno">19059</span>&#160; </div>
-<div class="line"><a name="l19060"></a><span class="lineno">19060</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19061"></a><span class="lineno">19061</span>&#160; </div>
-<div class="line"><a name="l19062"></a><span class="lineno">19062</span>&#160;    VkResult res = allocator-&gt;Map(allocation, ppData);</div>
-<div class="line"><a name="l19063"></a><span class="lineno">19063</span>&#160; </div>
-<div class="line"><a name="l19064"></a><span class="lineno">19064</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19065"></a><span class="lineno">19065</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19066"></a><span class="lineno">19066</span>&#160;    {</div>
-<div class="line"><a name="l19067"></a><span class="lineno">19067</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordMapMemory(</div>
-<div class="line"><a name="l19068"></a><span class="lineno">19068</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l19069"></a><span class="lineno">19069</span>&#160;            allocation);</div>
-<div class="line"><a name="l19070"></a><span class="lineno">19070</span>&#160;    }</div>
-<div class="line"><a name="l19071"></a><span class="lineno">19071</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19072"></a><span class="lineno">19072</span>&#160; </div>
-<div class="line"><a name="l19073"></a><span class="lineno">19073</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19074"></a><span class="lineno">19074</span>&#160;}</div>
-<div class="line"><a name="l19075"></a><span class="lineno">19075</span>&#160; </div>
-<div class="line"><a name="l19076"></a><span class="lineno">19076</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a>(</div>
-<div class="line"><a name="l19077"></a><span class="lineno">19077</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19078"></a><span class="lineno">19078</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l19079"></a><span class="lineno">19079</span>&#160;{</div>
-<div class="line"><a name="l19080"></a><span class="lineno">19080</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
-<div class="line"><a name="l19081"></a><span class="lineno">19081</span>&#160; </div>
-<div class="line"><a name="l19082"></a><span class="lineno">19082</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19083"></a><span class="lineno">19083</span>&#160; </div>
-<div class="line"><a name="l19084"></a><span class="lineno">19084</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19085"></a><span class="lineno">19085</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19086"></a><span class="lineno">19086</span>&#160;    {</div>
-<div class="line"><a name="l19087"></a><span class="lineno">19087</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordUnmapMemory(</div>
-<div class="line"><a name="l19088"></a><span class="lineno">19088</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l19089"></a><span class="lineno">19089</span>&#160;            allocation);</div>
-<div class="line"><a name="l19090"></a><span class="lineno">19090</span>&#160;    }</div>
-<div class="line"><a name="l19091"></a><span class="lineno">19091</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19092"></a><span class="lineno">19092</span>&#160; </div>
-<div class="line"><a name="l19093"></a><span class="lineno">19093</span>&#160;    allocator-&gt;Unmap(allocation);</div>
-<div class="line"><a name="l19094"></a><span class="lineno">19094</span>&#160;}</div>
-<div class="line"><a name="l19095"></a><span class="lineno">19095</span>&#160; </div>
-<div class="line"><a name="l19096"></a><span class="lineno">19096</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f">vmaFlushAllocation</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</div>
-<div class="line"><a name="l19097"></a><span class="lineno">19097</span>&#160;{</div>
-<div class="line"><a name="l19098"></a><span class="lineno">19098</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
-<div class="line"><a name="l19099"></a><span class="lineno">19099</span>&#160; </div>
-<div class="line"><a name="l19100"></a><span class="lineno">19100</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaFlushAllocation&quot;</span>);</div>
-<div class="line"><a name="l19101"></a><span class="lineno">19101</span>&#160; </div>
-<div class="line"><a name="l19102"></a><span class="lineno">19102</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19103"></a><span class="lineno">19103</span>&#160; </div>
-<div class="line"><a name="l19104"></a><span class="lineno">19104</span>&#160;    <span class="keyword">const</span> VkResult res = allocator-&gt;FlushOrInvalidateAllocation(allocation, offset, size, VMA_CACHE_FLUSH);</div>
-<div class="line"><a name="l19105"></a><span class="lineno">19105</span>&#160; </div>
-<div class="line"><a name="l19106"></a><span class="lineno">19106</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19107"></a><span class="lineno">19107</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19108"></a><span class="lineno">19108</span>&#160;    {</div>
-<div class="line"><a name="l19109"></a><span class="lineno">19109</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordFlushAllocation(</div>
-<div class="line"><a name="l19110"></a><span class="lineno">19110</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l19111"></a><span class="lineno">19111</span>&#160;            allocation, offset, size);</div>
-<div class="line"><a name="l19112"></a><span class="lineno">19112</span>&#160;    }</div>
-<div class="line"><a name="l19113"></a><span class="lineno">19113</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19114"></a><span class="lineno">19114</span>&#160; </div>
-<div class="line"><a name="l19115"></a><span class="lineno">19115</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19116"></a><span class="lineno">19116</span>&#160;}</div>
-<div class="line"><a name="l19117"></a><span class="lineno">19117</span>&#160; </div>
-<div class="line"><a name="l19118"></a><span class="lineno">19118</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae">vmaInvalidateAllocation</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</div>
-<div class="line"><a name="l19119"></a><span class="lineno">19119</span>&#160;{</div>
-<div class="line"><a name="l19120"></a><span class="lineno">19120</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
-<div class="line"><a name="l19121"></a><span class="lineno">19121</span>&#160; </div>
-<div class="line"><a name="l19122"></a><span class="lineno">19122</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaInvalidateAllocation&quot;</span>);</div>
-<div class="line"><a name="l19123"></a><span class="lineno">19123</span>&#160; </div>
-<div class="line"><a name="l19124"></a><span class="lineno">19124</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19125"></a><span class="lineno">19125</span>&#160; </div>
-<div class="line"><a name="l19126"></a><span class="lineno">19126</span>&#160;    <span class="keyword">const</span> VkResult res = allocator-&gt;FlushOrInvalidateAllocation(allocation, offset, size, VMA_CACHE_INVALIDATE);</div>
-<div class="line"><a name="l19127"></a><span class="lineno">19127</span>&#160; </div>
-<div class="line"><a name="l19128"></a><span class="lineno">19128</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19129"></a><span class="lineno">19129</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19130"></a><span class="lineno">19130</span>&#160;    {</div>
-<div class="line"><a name="l19131"></a><span class="lineno">19131</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordInvalidateAllocation(</div>
-<div class="line"><a name="l19132"></a><span class="lineno">19132</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l19133"></a><span class="lineno">19133</span>&#160;            allocation, offset, size);</div>
-<div class="line"><a name="l19134"></a><span class="lineno">19134</span>&#160;    }</div>
-<div class="line"><a name="l19135"></a><span class="lineno">19135</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19136"></a><span class="lineno">19136</span>&#160; </div>
-<div class="line"><a name="l19137"></a><span class="lineno">19137</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19138"></a><span class="lineno">19138</span>&#160;}</div>
-<div class="line"><a name="l19139"></a><span class="lineno">19139</span>&#160; </div>
-<div class="line"><a name="l19140"></a><span class="lineno">19140</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc">vmaFlushAllocations</a>(</div>
-<div class="line"><a name="l19141"></a><span class="lineno">19141</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19142"></a><span class="lineno">19142</span>&#160;    uint32_t allocationCount,</div>
-<div class="line"><a name="l19143"></a><span class="lineno">19143</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* allocations,</div>
-<div class="line"><a name="l19144"></a><span class="lineno">19144</span>&#160;    <span class="keyword">const</span> VkDeviceSize* offsets,</div>
-<div class="line"><a name="l19145"></a><span class="lineno">19145</span>&#160;    <span class="keyword">const</span> VkDeviceSize* sizes)</div>
-<div class="line"><a name="l19146"></a><span class="lineno">19146</span>&#160;{</div>
-<div class="line"><a name="l19147"></a><span class="lineno">19147</span>&#160;    VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l19148"></a><span class="lineno">19148</span>&#160; </div>
-<div class="line"><a name="l19149"></a><span class="lineno">19149</span>&#160;    <span class="keywordflow">if</span>(allocationCount == 0)</div>
-<div class="line"><a name="l19150"></a><span class="lineno">19150</span>&#160;    {</div>
-<div class="line"><a name="l19151"></a><span class="lineno">19151</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l19152"></a><span class="lineno">19152</span>&#160;    }</div>
-<div class="line"><a name="l19153"></a><span class="lineno">19153</span>&#160; </div>
-<div class="line"><a name="l19154"></a><span class="lineno">19154</span>&#160;    VMA_ASSERT(allocations);</div>
-<div class="line"><a name="l19155"></a><span class="lineno">19155</span>&#160; </div>
-<div class="line"><a name="l19156"></a><span class="lineno">19156</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaFlushAllocations&quot;</span>);</div>
-<div class="line"><a name="l19157"></a><span class="lineno">19157</span>&#160; </div>
-<div class="line"><a name="l19158"></a><span class="lineno">19158</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19159"></a><span class="lineno">19159</span>&#160; </div>
-<div class="line"><a name="l19160"></a><span class="lineno">19160</span>&#160;    <span class="keyword">const</span> VkResult res = allocator-&gt;FlushOrInvalidateAllocations(allocationCount, allocations, offsets, sizes, VMA_CACHE_FLUSH);</div>
-<div class="line"><a name="l19161"></a><span class="lineno">19161</span>&#160; </div>
-<div class="line"><a name="l19162"></a><span class="lineno">19162</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19163"></a><span class="lineno">19163</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19164"></a><span class="lineno">19164</span>&#160;    {</div>
-<div class="line"><a name="l19165"></a><span class="lineno">19165</span>&#160;        <span class="comment">//TODO</span></div>
-<div class="line"><a name="l19166"></a><span class="lineno">19166</span>&#160;    }</div>
-<div class="line"><a name="l19167"></a><span class="lineno">19167</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19168"></a><span class="lineno">19168</span>&#160; </div>
-<div class="line"><a name="l19169"></a><span class="lineno">19169</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19170"></a><span class="lineno">19170</span>&#160;}</div>
-<div class="line"><a name="l19171"></a><span class="lineno">19171</span>&#160; </div>
-<div class="line"><a name="l19172"></a><span class="lineno">19172</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ab25b558d75f7378ec944a1522fdcc3c5">vmaInvalidateAllocations</a>(</div>
-<div class="line"><a name="l19173"></a><span class="lineno">19173</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19174"></a><span class="lineno">19174</span>&#160;    uint32_t allocationCount,</div>
-<div class="line"><a name="l19175"></a><span class="lineno">19175</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* allocations,</div>
-<div class="line"><a name="l19176"></a><span class="lineno">19176</span>&#160;    <span class="keyword">const</span> VkDeviceSize* offsets,</div>
-<div class="line"><a name="l19177"></a><span class="lineno">19177</span>&#160;    <span class="keyword">const</span> VkDeviceSize* sizes)</div>
-<div class="line"><a name="l19178"></a><span class="lineno">19178</span>&#160;{</div>
-<div class="line"><a name="l19179"></a><span class="lineno">19179</span>&#160;    VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l19180"></a><span class="lineno">19180</span>&#160; </div>
-<div class="line"><a name="l19181"></a><span class="lineno">19181</span>&#160;    <span class="keywordflow">if</span>(allocationCount == 0)</div>
-<div class="line"><a name="l19182"></a><span class="lineno">19182</span>&#160;    {</div>
-<div class="line"><a name="l19183"></a><span class="lineno">19183</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l19184"></a><span class="lineno">19184</span>&#160;    }</div>
-<div class="line"><a name="l19185"></a><span class="lineno">19185</span>&#160; </div>
-<div class="line"><a name="l19186"></a><span class="lineno">19186</span>&#160;    VMA_ASSERT(allocations);</div>
-<div class="line"><a name="l19187"></a><span class="lineno">19187</span>&#160; </div>
-<div class="line"><a name="l19188"></a><span class="lineno">19188</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaInvalidateAllocations&quot;</span>);</div>
-<div class="line"><a name="l19189"></a><span class="lineno">19189</span>&#160; </div>
-<div class="line"><a name="l19190"></a><span class="lineno">19190</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19191"></a><span class="lineno">19191</span>&#160; </div>
-<div class="line"><a name="l19192"></a><span class="lineno">19192</span>&#160;    <span class="keyword">const</span> VkResult res = allocator-&gt;FlushOrInvalidateAllocations(allocationCount, allocations, offsets, sizes, VMA_CACHE_INVALIDATE);</div>
-<div class="line"><a name="l19193"></a><span class="lineno">19193</span>&#160; </div>
-<div class="line"><a name="l19194"></a><span class="lineno">19194</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19195"></a><span class="lineno">19195</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19196"></a><span class="lineno">19196</span>&#160;    {</div>
-<div class="line"><a name="l19197"></a><span class="lineno">19197</span>&#160;        <span class="comment">//TODO</span></div>
-<div class="line"><a name="l19198"></a><span class="lineno">19198</span>&#160;    }</div>
-<div class="line"><a name="l19199"></a><span class="lineno">19199</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19200"></a><span class="lineno">19200</span>&#160; </div>
-<div class="line"><a name="l19201"></a><span class="lineno">19201</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19202"></a><span class="lineno">19202</span>&#160;}</div>
-<div class="line"><a name="l19203"></a><span class="lineno">19203</span>&#160; </div>
-<div class="line"><a name="l19204"></a><span class="lineno">19204</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98">vmaCheckCorruption</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryTypeBits)</div>
-<div class="line"><a name="l19205"></a><span class="lineno">19205</span>&#160;{</div>
-<div class="line"><a name="l19206"></a><span class="lineno">19206</span>&#160;    VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l19207"></a><span class="lineno">19207</span>&#160; </div>
-<div class="line"><a name="l19208"></a><span class="lineno">19208</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCheckCorruption&quot;</span>);</div>
-<div class="line"><a name="l19209"></a><span class="lineno">19209</span>&#160; </div>
-<div class="line"><a name="l19210"></a><span class="lineno">19210</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19211"></a><span class="lineno">19211</span>&#160; </div>
-<div class="line"><a name="l19212"></a><span class="lineno">19212</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;CheckCorruption(memoryTypeBits);</div>
-<div class="line"><a name="l19213"></a><span class="lineno">19213</span>&#160;}</div>
-<div class="line"><a name="l19214"></a><span class="lineno">19214</span>&#160; </div>
-<div class="line"><a name="l19215"></a><span class="lineno">19215</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac">vmaDefragment</a>(</div>
-<div class="line"><a name="l19216"></a><span class="lineno">19216</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19217"></a><span class="lineno">19217</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations,</div>
-<div class="line"><a name="l19218"></a><span class="lineno">19218</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l19219"></a><span class="lineno">19219</span>&#160;    VkBool32* pAllocationsChanged,</div>
-<div class="line"><a name="l19220"></a><span class="lineno">19220</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> *pDefragmentationInfo,</div>
-<div class="line"><a name="l19221"></a><span class="lineno">19221</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pDefragmentationStats)</div>
-<div class="line"><a name="l19222"></a><span class="lineno">19222</span>&#160;{</div>
-<div class="line"><a name="l19223"></a><span class="lineno">19223</span>&#160;    <span class="comment">// Deprecated interface, reimplemented using new one.</span></div>
-<div class="line"><a name="l19224"></a><span class="lineno">19224</span>&#160; </div>
-<div class="line"><a name="l19225"></a><span class="lineno">19225</span>&#160;    <a class="code" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> info2 = {};</div>
-<div class="line"><a name="l19226"></a><span class="lineno">19226</span>&#160;    info2.<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a> = (uint32_t)allocationCount;</div>
-<div class="line"><a name="l19227"></a><span class="lineno">19227</span>&#160;    info2.<a class="code" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">pAllocations</a> = pAllocations;</div>
-<div class="line"><a name="l19228"></a><span class="lineno">19228</span>&#160;    info2.<a class="code" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">pAllocationsChanged</a> = pAllocationsChanged;</div>
-<div class="line"><a name="l19229"></a><span class="lineno">19229</span>&#160;    <span class="keywordflow">if</span>(pDefragmentationInfo != VMA_NULL)</div>
-<div class="line"><a name="l19230"></a><span class="lineno">19230</span>&#160;    {</div>
-<div class="line"><a name="l19231"></a><span class="lineno">19231</span>&#160;        info2.<a class="code" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a> = pDefragmentationInfo-&gt;<a class="code" href="struct_vma_defragmentation_info.html#aa7c7304e13c71f604c907196c4e28fbc">maxAllocationsToMove</a>;</div>
-<div class="line"><a name="l19232"></a><span class="lineno">19232</span>&#160;        info2.<a class="code" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">maxCpuBytesToMove</a> = pDefragmentationInfo-&gt;<a class="code" href="struct_vma_defragmentation_info.html#acb311c940a777270e67e1b81c5ab6a1d">maxBytesToMove</a>;</div>
-<div class="line"><a name="l19233"></a><span class="lineno">19233</span>&#160;    }</div>
-<div class="line"><a name="l19234"></a><span class="lineno">19234</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l19235"></a><span class="lineno">19235</span>&#160;    {</div>
-<div class="line"><a name="l19236"></a><span class="lineno">19236</span>&#160;        info2.<a class="code" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a> = UINT32_MAX;</div>
-<div class="line"><a name="l19237"></a><span class="lineno">19237</span>&#160;        info2.<a class="code" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">maxCpuBytesToMove</a> = VK_WHOLE_SIZE;</div>
-<div class="line"><a name="l19238"></a><span class="lineno">19238</span>&#160;    }</div>
-<div class="line"><a name="l19239"></a><span class="lineno">19239</span>&#160;    <span class="comment">// info2.flags, maxGpuAllocationsToMove, maxGpuBytesToMove, commandBuffer deliberately left zero.</span></div>
-<div class="line"><a name="l19240"></a><span class="lineno">19240</span>&#160; </div>
-<div class="line"><a name="l19241"></a><span class="lineno">19241</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> ctx;</div>
-<div class="line"><a name="l19242"></a><span class="lineno">19242</span>&#160;    VkResult res = <a class="code" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a>(allocator, &amp;info2, pDefragmentationStats, &amp;ctx);</div>
-<div class="line"><a name="l19243"></a><span class="lineno">19243</span>&#160;    <span class="keywordflow">if</span>(res == VK_NOT_READY)</div>
-<div class="line"><a name="l19244"></a><span class="lineno">19244</span>&#160;    {</div>
-<div class="line"><a name="l19245"></a><span class="lineno">19245</span>&#160;        res = <a class="code" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a>( allocator, ctx);</div>
-<div class="line"><a name="l19246"></a><span class="lineno">19246</span>&#160;    }</div>
-<div class="line"><a name="l19247"></a><span class="lineno">19247</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19248"></a><span class="lineno">19248</span>&#160;}</div>
-<div class="line"><a name="l19249"></a><span class="lineno">19249</span>&#160; </div>
-<div class="line"><a name="l19250"></a><span class="lineno">19250</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a>(</div>
-<div class="line"><a name="l19251"></a><span class="lineno">19251</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19252"></a><span class="lineno">19252</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a>* pInfo,</div>
-<div class="line"><a name="l19253"></a><span class="lineno">19253</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats,</div>
-<div class="line"><a name="l19254"></a><span class="lineno">19254</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> *pContext)</div>
-<div class="line"><a name="l19255"></a><span class="lineno">19255</span>&#160;{</div>
-<div class="line"><a name="l19256"></a><span class="lineno">19256</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pInfo &amp;&amp; pContext);</div>
-<div class="line"><a name="l19257"></a><span class="lineno">19257</span>&#160; </div>
-<div class="line"><a name="l19258"></a><span class="lineno">19258</span>&#160;    <span class="comment">// Degenerate case: Nothing to defragment.</span></div>
-<div class="line"><a name="l19259"></a><span class="lineno">19259</span>&#160;    <span class="keywordflow">if</span>(pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a> == 0 &amp;&amp; pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">poolCount</a> == 0)</div>
-<div class="line"><a name="l19260"></a><span class="lineno">19260</span>&#160;    {</div>
-<div class="line"><a name="l19261"></a><span class="lineno">19261</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l19262"></a><span class="lineno">19262</span>&#160;    }</div>
-<div class="line"><a name="l19263"></a><span class="lineno">19263</span>&#160; </div>
-<div class="line"><a name="l19264"></a><span class="lineno">19264</span>&#160;    VMA_ASSERT(pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a> == 0 || pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">pAllocations</a> != VMA_NULL);</div>
-<div class="line"><a name="l19265"></a><span class="lineno">19265</span>&#160;    VMA_ASSERT(pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">poolCount</a> == 0 || pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b">pPools</a> != VMA_NULL);</div>
-<div class="line"><a name="l19266"></a><span class="lineno">19266</span>&#160;    VMA_HEAVY_ASSERT(VmaValidatePointerArray(pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a>, pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">pAllocations</a>));</div>
-<div class="line"><a name="l19267"></a><span class="lineno">19267</span>&#160;    VMA_HEAVY_ASSERT(VmaValidatePointerArray(pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">poolCount</a>, pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b">pPools</a>));</div>
-<div class="line"><a name="l19268"></a><span class="lineno">19268</span>&#160; </div>
-<div class="line"><a name="l19269"></a><span class="lineno">19269</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDefragmentationBegin&quot;</span>);</div>
-<div class="line"><a name="l19270"></a><span class="lineno">19270</span>&#160; </div>
-<div class="line"><a name="l19271"></a><span class="lineno">19271</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19272"></a><span class="lineno">19272</span>&#160; </div>
-<div class="line"><a name="l19273"></a><span class="lineno">19273</span>&#160;    VkResult res = allocator-&gt;DefragmentationBegin(*pInfo, pStats, pContext);</div>
-<div class="line"><a name="l19274"></a><span class="lineno">19274</span>&#160; </div>
-<div class="line"><a name="l19275"></a><span class="lineno">19275</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19276"></a><span class="lineno">19276</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19277"></a><span class="lineno">19277</span>&#160;    {</div>
-<div class="line"><a name="l19278"></a><span class="lineno">19278</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordDefragmentationBegin(</div>
-<div class="line"><a name="l19279"></a><span class="lineno">19279</span>&#160;            allocator-&gt;GetCurrentFrameIndex(), *pInfo, *pContext);</div>
-<div class="line"><a name="l19280"></a><span class="lineno">19280</span>&#160;    }</div>
-<div class="line"><a name="l19281"></a><span class="lineno">19281</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19282"></a><span class="lineno">19282</span>&#160; </div>
-<div class="line"><a name="l19283"></a><span class="lineno">19283</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19284"></a><span class="lineno">19284</span>&#160;}</div>
-<div class="line"><a name="l19285"></a><span class="lineno">19285</span>&#160; </div>
-<div class="line"><a name="l19286"></a><span class="lineno">19286</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a>(</div>
-<div class="line"><a name="l19287"></a><span class="lineno">19287</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19288"></a><span class="lineno">19288</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</div>
-<div class="line"><a name="l19289"></a><span class="lineno">19289</span>&#160;{</div>
-<div class="line"><a name="l19290"></a><span class="lineno">19290</span>&#160;    VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l19291"></a><span class="lineno">19291</span>&#160; </div>
-<div class="line"><a name="l19292"></a><span class="lineno">19292</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDefragmentationEnd&quot;</span>);</div>
-<div class="line"><a name="l19293"></a><span class="lineno">19293</span>&#160; </div>
-<div class="line"><a name="l19294"></a><span class="lineno">19294</span>&#160;    <span class="keywordflow">if</span>(context != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l19295"></a><span class="lineno">19295</span>&#160;    {</div>
-<div class="line"><a name="l19296"></a><span class="lineno">19296</span>&#160;        VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19297"></a><span class="lineno">19297</span>&#160; </div>
-<div class="line"><a name="l19298"></a><span class="lineno">19298</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19299"></a><span class="lineno">19299</span>&#160;        <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19300"></a><span class="lineno">19300</span>&#160;        {</div>
-<div class="line"><a name="l19301"></a><span class="lineno">19301</span>&#160;            allocator-&gt;GetRecorder()-&gt;RecordDefragmentationEnd(</div>
-<div class="line"><a name="l19302"></a><span class="lineno">19302</span>&#160;                allocator-&gt;GetCurrentFrameIndex(), context);</div>
-<div class="line"><a name="l19303"></a><span class="lineno">19303</span>&#160;        }</div>
-<div class="line"><a name="l19304"></a><span class="lineno">19304</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19305"></a><span class="lineno">19305</span>&#160; </div>
-<div class="line"><a name="l19306"></a><span class="lineno">19306</span>&#160;        <span class="keywordflow">return</span> allocator-&gt;DefragmentationEnd(context);</div>
-<div class="line"><a name="l19307"></a><span class="lineno">19307</span>&#160;    }</div>
-<div class="line"><a name="l19308"></a><span class="lineno">19308</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l19309"></a><span class="lineno">19309</span>&#160;    {</div>
-<div class="line"><a name="l19310"></a><span class="lineno">19310</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l19311"></a><span class="lineno">19311</span>&#160;    }</div>
-<div class="line"><a name="l19312"></a><span class="lineno">19312</span>&#160;}</div>
-<div class="line"><a name="l19313"></a><span class="lineno">19313</span>&#160; </div>
-<div class="line"><a name="l19314"></a><span class="lineno">19314</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b">vmaBeginDefragmentationPass</a>(</div>
-<div class="line"><a name="l19315"></a><span class="lineno">19315</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19316"></a><span class="lineno">19316</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context,</div>
-<div class="line"><a name="l19317"></a><span class="lineno">19317</span>&#160;    <a class="code" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a>* pInfo</div>
-<div class="line"><a name="l19318"></a><span class="lineno">19318</span>&#160;    )</div>
-<div class="line"><a name="l19319"></a><span class="lineno">19319</span>&#160;{</div>
-<div class="line"><a name="l19320"></a><span class="lineno">19320</span>&#160;    VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l19321"></a><span class="lineno">19321</span>&#160;    VMA_ASSERT(pInfo);</div>
-<div class="line"><a name="l19322"></a><span class="lineno">19322</span>&#160; </div>
-<div class="line"><a name="l19323"></a><span class="lineno">19323</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBeginDefragmentationPass&quot;</span>);</div>
-<div class="line"><a name="l19324"></a><span class="lineno">19324</span>&#160; </div>
-<div class="line"><a name="l19325"></a><span class="lineno">19325</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19326"></a><span class="lineno">19326</span>&#160; </div>
-<div class="line"><a name="l19327"></a><span class="lineno">19327</span>&#160;    <span class="keywordflow">if</span>(context == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l19328"></a><span class="lineno">19328</span>&#160;    {</div>
-<div class="line"><a name="l19329"></a><span class="lineno">19329</span>&#160;        pInfo-&gt;<a class="code" href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c">moveCount</a> = 0;</div>
-<div class="line"><a name="l19330"></a><span class="lineno">19330</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l19331"></a><span class="lineno">19331</span>&#160;    }</div>
-<div class="line"><a name="l19332"></a><span class="lineno">19332</span>&#160; </div>
-<div class="line"><a name="l19333"></a><span class="lineno">19333</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;DefragmentationPassBegin(pInfo, context);</div>
-<div class="line"><a name="l19334"></a><span class="lineno">19334</span>&#160;}</div>
-<div class="line"><a name="l19335"></a><span class="lineno">19335</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a1b9ffa538bed905af55c747cc48963bd">vmaEndDefragmentationPass</a>(</div>
-<div class="line"><a name="l19336"></a><span class="lineno">19336</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19337"></a><span class="lineno">19337</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</div>
-<div class="line"><a name="l19338"></a><span class="lineno">19338</span>&#160;{</div>
-<div class="line"><a name="l19339"></a><span class="lineno">19339</span>&#160;    VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l19340"></a><span class="lineno">19340</span>&#160; </div>
-<div class="line"><a name="l19341"></a><span class="lineno">19341</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaEndDefragmentationPass&quot;</span>);</div>
-<div class="line"><a name="l19342"></a><span class="lineno">19342</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19343"></a><span class="lineno">19343</span>&#160; </div>
-<div class="line"><a name="l19344"></a><span class="lineno">19344</span>&#160;    <span class="keywordflow">if</span>(context == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l19345"></a><span class="lineno">19345</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l19346"></a><span class="lineno">19346</span>&#160; </div>
-<div class="line"><a name="l19347"></a><span class="lineno">19347</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;DefragmentationPassEnd(context);</div>
-<div class="line"><a name="l19348"></a><span class="lineno">19348</span>&#160;}</div>
-<div class="line"><a name="l19349"></a><span class="lineno">19349</span>&#160; </div>
-<div class="line"><a name="l19350"></a><span class="lineno">19350</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a>(</div>
-<div class="line"><a name="l19351"></a><span class="lineno">19351</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19352"></a><span class="lineno">19352</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l19353"></a><span class="lineno">19353</span>&#160;    VkBuffer buffer)</div>
-<div class="line"><a name="l19354"></a><span class="lineno">19354</span>&#160;{</div>
-<div class="line"><a name="l19355"></a><span class="lineno">19355</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; buffer);</div>
-<div class="line"><a name="l19356"></a><span class="lineno">19356</span>&#160; </div>
-<div class="line"><a name="l19357"></a><span class="lineno">19357</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindBufferMemory&quot;</span>);</div>
-<div class="line"><a name="l19358"></a><span class="lineno">19358</span>&#160; </div>
-<div class="line"><a name="l19359"></a><span class="lineno">19359</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19360"></a><span class="lineno">19360</span>&#160; </div>
-<div class="line"><a name="l19361"></a><span class="lineno">19361</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;BindBufferMemory(allocation, 0, buffer, VMA_NULL);</div>
-<div class="line"><a name="l19362"></a><span class="lineno">19362</span>&#160;}</div>
-<div class="line"><a name="l19363"></a><span class="lineno">19363</span>&#160; </div>
-<div class="line"><a name="l19364"></a><span class="lineno">19364</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a">vmaBindBufferMemory2</a>(</div>
-<div class="line"><a name="l19365"></a><span class="lineno">19365</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19366"></a><span class="lineno">19366</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l19367"></a><span class="lineno">19367</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
-<div class="line"><a name="l19368"></a><span class="lineno">19368</span>&#160;    VkBuffer buffer,</div>
-<div class="line"><a name="l19369"></a><span class="lineno">19369</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
-<div class="line"><a name="l19370"></a><span class="lineno">19370</span>&#160;{</div>
-<div class="line"><a name="l19371"></a><span class="lineno">19371</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; buffer);</div>
-<div class="line"><a name="l19372"></a><span class="lineno">19372</span>&#160; </div>
-<div class="line"><a name="l19373"></a><span class="lineno">19373</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindBufferMemory2&quot;</span>);</div>
-<div class="line"><a name="l19374"></a><span class="lineno">19374</span>&#160; </div>
-<div class="line"><a name="l19375"></a><span class="lineno">19375</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19376"></a><span class="lineno">19376</span>&#160; </div>
-<div class="line"><a name="l19377"></a><span class="lineno">19377</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;BindBufferMemory(allocation, allocationLocalOffset, buffer, pNext);</div>
-<div class="line"><a name="l19378"></a><span class="lineno">19378</span>&#160;}</div>
-<div class="line"><a name="l19379"></a><span class="lineno">19379</span>&#160; </div>
-<div class="line"><a name="l19380"></a><span class="lineno">19380</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a>(</div>
-<div class="line"><a name="l19381"></a><span class="lineno">19381</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19382"></a><span class="lineno">19382</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l19383"></a><span class="lineno">19383</span>&#160;    VkImage image)</div>
-<div class="line"><a name="l19384"></a><span class="lineno">19384</span>&#160;{</div>
-<div class="line"><a name="l19385"></a><span class="lineno">19385</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; image);</div>
-<div class="line"><a name="l19386"></a><span class="lineno">19386</span>&#160; </div>
-<div class="line"><a name="l19387"></a><span class="lineno">19387</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindImageMemory&quot;</span>);</div>
-<div class="line"><a name="l19388"></a><span class="lineno">19388</span>&#160; </div>
-<div class="line"><a name="l19389"></a><span class="lineno">19389</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19390"></a><span class="lineno">19390</span>&#160; </div>
-<div class="line"><a name="l19391"></a><span class="lineno">19391</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;BindImageMemory(allocation, 0, image, VMA_NULL);</div>
-<div class="line"><a name="l19392"></a><span class="lineno">19392</span>&#160;}</div>
-<div class="line"><a name="l19393"></a><span class="lineno">19393</span>&#160; </div>
-<div class="line"><a name="l19394"></a><span class="lineno">19394</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc">vmaBindImageMemory2</a>(</div>
-<div class="line"><a name="l19395"></a><span class="lineno">19395</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19396"></a><span class="lineno">19396</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l19397"></a><span class="lineno">19397</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
-<div class="line"><a name="l19398"></a><span class="lineno">19398</span>&#160;    VkImage image,</div>
-<div class="line"><a name="l19399"></a><span class="lineno">19399</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
-<div class="line"><a name="l19400"></a><span class="lineno">19400</span>&#160;{</div>
-<div class="line"><a name="l19401"></a><span class="lineno">19401</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; image);</div>
-<div class="line"><a name="l19402"></a><span class="lineno">19402</span>&#160; </div>
-<div class="line"><a name="l19403"></a><span class="lineno">19403</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindImageMemory2&quot;</span>);</div>
-<div class="line"><a name="l19404"></a><span class="lineno">19404</span>&#160; </div>
-<div class="line"><a name="l19405"></a><span class="lineno">19405</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19406"></a><span class="lineno">19406</span>&#160; </div>
-<div class="line"><a name="l19407"></a><span class="lineno">19407</span>&#160;        <span class="keywordflow">return</span> allocator-&gt;BindImageMemory(allocation, allocationLocalOffset, image, pNext);</div>
-<div class="line"><a name="l19408"></a><span class="lineno">19408</span>&#160;}</div>
-<div class="line"><a name="l19409"></a><span class="lineno">19409</span>&#160; </div>
-<div class="line"><a name="l19410"></a><span class="lineno">19410</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(</div>
-<div class="line"><a name="l19411"></a><span class="lineno">19411</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19412"></a><span class="lineno">19412</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* pBufferCreateInfo,</div>
-<div class="line"><a name="l19413"></a><span class="lineno">19413</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div>
-<div class="line"><a name="l19414"></a><span class="lineno">19414</span>&#160;    VkBuffer* pBuffer,</div>
-<div class="line"><a name="l19415"></a><span class="lineno">19415</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
-<div class="line"><a name="l19416"></a><span class="lineno">19416</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
-<div class="line"><a name="l19417"></a><span class="lineno">19417</span>&#160;{</div>
-<div class="line"><a name="l19418"></a><span class="lineno">19418</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pBufferCreateInfo &amp;&amp; pAllocationCreateInfo &amp;&amp; pBuffer &amp;&amp; pAllocation);</div>
-<div class="line"><a name="l19419"></a><span class="lineno">19419</span>&#160; </div>
-<div class="line"><a name="l19420"></a><span class="lineno">19420</span>&#160;    <span class="keywordflow">if</span>(pBufferCreateInfo-&gt;size == 0)</div>
-<div class="line"><a name="l19421"></a><span class="lineno">19421</span>&#160;    {</div>
-<div class="line"><a name="l19422"></a><span class="lineno">19422</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
-<div class="line"><a name="l19423"></a><span class="lineno">19423</span>&#160;    }</div>
-<div class="line"><a name="l19424"></a><span class="lineno">19424</span>&#160;    <span class="keywordflow">if</span>((pBufferCreateInfo-&gt;usage &amp; VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_COPY) != 0 &amp;&amp;</div>
-<div class="line"><a name="l19425"></a><span class="lineno">19425</span>&#160;        !allocator-&gt;m_UseKhrBufferDeviceAddress)</div>
-<div class="line"><a name="l19426"></a><span class="lineno">19426</span>&#160;    {</div>
-<div class="line"><a name="l19427"></a><span class="lineno">19427</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Creating a buffer with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT is not valid if VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT was not used.&quot;</span>);</div>
-<div class="line"><a name="l19428"></a><span class="lineno">19428</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
-<div class="line"><a name="l19429"></a><span class="lineno">19429</span>&#160;    }</div>
-<div class="line"><a name="l19430"></a><span class="lineno">19430</span>&#160; </div>
-<div class="line"><a name="l19431"></a><span class="lineno">19431</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreateBuffer&quot;</span>);</div>
-<div class="line"><a name="l19432"></a><span class="lineno">19432</span>&#160; </div>
-<div class="line"><a name="l19433"></a><span class="lineno">19433</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19434"></a><span class="lineno">19434</span>&#160; </div>
-<div class="line"><a name="l19435"></a><span class="lineno">19435</span>&#160;    *pBuffer = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19436"></a><span class="lineno">19436</span>&#160;    *pAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19437"></a><span class="lineno">19437</span>&#160; </div>
-<div class="line"><a name="l19438"></a><span class="lineno">19438</span>&#160;    <span class="comment">// 1. Create VkBuffer.</span></div>
-<div class="line"><a name="l19439"></a><span class="lineno">19439</span>&#160;    VkResult res = (*allocator-&gt;GetVulkanFunctions().vkCreateBuffer)(</div>
-<div class="line"><a name="l19440"></a><span class="lineno">19440</span>&#160;        allocator-&gt;m_hDevice,</div>
-<div class="line"><a name="l19441"></a><span class="lineno">19441</span>&#160;        pBufferCreateInfo,</div>
-<div class="line"><a name="l19442"></a><span class="lineno">19442</span>&#160;        allocator-&gt;GetAllocationCallbacks(),</div>
-<div class="line"><a name="l19443"></a><span class="lineno">19443</span>&#160;        pBuffer);</div>
-<div class="line"><a name="l19444"></a><span class="lineno">19444</span>&#160;    <span class="keywordflow">if</span>(res &gt;= 0)</div>
-<div class="line"><a name="l19445"></a><span class="lineno">19445</span>&#160;    {</div>
-<div class="line"><a name="l19446"></a><span class="lineno">19446</span>&#160;        <span class="comment">// 2. vkGetBufferMemoryRequirements.</span></div>
-<div class="line"><a name="l19447"></a><span class="lineno">19447</span>&#160;        VkMemoryRequirements vkMemReq = {};</div>
-<div class="line"><a name="l19448"></a><span class="lineno">19448</span>&#160;        <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l19449"></a><span class="lineno">19449</span>&#160;        <span class="keywordtype">bool</span> prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l19450"></a><span class="lineno">19450</span>&#160;        allocator-&gt;GetBufferMemoryRequirements(*pBuffer, vkMemReq,</div>
-<div class="line"><a name="l19451"></a><span class="lineno">19451</span>&#160;            requiresDedicatedAllocation, prefersDedicatedAllocation);</div>
-<div class="line"><a name="l19452"></a><span class="lineno">19452</span>&#160; </div>
-<div class="line"><a name="l19453"></a><span class="lineno">19453</span>&#160;        <span class="comment">// 3. Allocate memory using allocator.</span></div>
-<div class="line"><a name="l19454"></a><span class="lineno">19454</span>&#160;        res = allocator-&gt;AllocateMemory(</div>
-<div class="line"><a name="l19455"></a><span class="lineno">19455</span>&#160;            vkMemReq,</div>
-<div class="line"><a name="l19456"></a><span class="lineno">19456</span>&#160;            requiresDedicatedAllocation,</div>
-<div class="line"><a name="l19457"></a><span class="lineno">19457</span>&#160;            prefersDedicatedAllocation,</div>
-<div class="line"><a name="l19458"></a><span class="lineno">19458</span>&#160;            *pBuffer, <span class="comment">// dedicatedBuffer</span></div>
-<div class="line"><a name="l19459"></a><span class="lineno">19459</span>&#160;            pBufferCreateInfo-&gt;usage, <span class="comment">// dedicatedBufferUsage</span></div>
-<div class="line"><a name="l19460"></a><span class="lineno">19460</span>&#160;            VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
-<div class="line"><a name="l19461"></a><span class="lineno">19461</span>&#160;            *pAllocationCreateInfo,</div>
-<div class="line"><a name="l19462"></a><span class="lineno">19462</span>&#160;            VMA_SUBALLOCATION_TYPE_BUFFER,</div>
-<div class="line"><a name="l19463"></a><span class="lineno">19463</span>&#160;            1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l19464"></a><span class="lineno">19464</span>&#160;            pAllocation);</div>
-<div class="line"><a name="l19465"></a><span class="lineno">19465</span>&#160; </div>
-<div class="line"><a name="l19466"></a><span class="lineno">19466</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19467"></a><span class="lineno">19467</span>&#160;        <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19468"></a><span class="lineno">19468</span>&#160;        {</div>
-<div class="line"><a name="l19469"></a><span class="lineno">19469</span>&#160;            allocator-&gt;GetRecorder()-&gt;RecordCreateBuffer(</div>
-<div class="line"><a name="l19470"></a><span class="lineno">19470</span>&#160;                allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l19471"></a><span class="lineno">19471</span>&#160;                *pBufferCreateInfo,</div>
-<div class="line"><a name="l19472"></a><span class="lineno">19472</span>&#160;                *pAllocationCreateInfo,</div>
-<div class="line"><a name="l19473"></a><span class="lineno">19473</span>&#160;                *pAllocation);</div>
-<div class="line"><a name="l19474"></a><span class="lineno">19474</span>&#160;        }</div>
-<div class="line"><a name="l19475"></a><span class="lineno">19475</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19476"></a><span class="lineno">19476</span>&#160; </div>
-<div class="line"><a name="l19477"></a><span class="lineno">19477</span>&#160;        <span class="keywordflow">if</span>(res &gt;= 0)</div>
-<div class="line"><a name="l19478"></a><span class="lineno">19478</span>&#160;        {</div>
-<div class="line"><a name="l19479"></a><span class="lineno">19479</span>&#160;            <span class="comment">// 3. Bind buffer with memory.</span></div>
-<div class="line"><a name="l19480"></a><span class="lineno">19480</span>&#160;            <span class="keywordflow">if</span>((pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">VMA_ALLOCATION_CREATE_DONT_BIND_BIT</a>) == 0)</div>
-<div class="line"><a name="l19481"></a><span class="lineno">19481</span>&#160;            {</div>
-<div class="line"><a name="l19482"></a><span class="lineno">19482</span>&#160;                res = allocator-&gt;BindBufferMemory(*pAllocation, 0, *pBuffer, VMA_NULL);</div>
-<div class="line"><a name="l19483"></a><span class="lineno">19483</span>&#160;            }</div>
-<div class="line"><a name="l19484"></a><span class="lineno">19484</span>&#160;            <span class="keywordflow">if</span>(res &gt;= 0)</div>
-<div class="line"><a name="l19485"></a><span class="lineno">19485</span>&#160;            {</div>
-<div class="line"><a name="l19486"></a><span class="lineno">19486</span>&#160;                <span class="comment">// All steps succeeded.</span></div>
-<div class="line"><a name="l19487"></a><span class="lineno">19487</span>&#160;<span class="preprocessor">                #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l19488"></a><span class="lineno">19488</span>&#160;                    (*pAllocation)-&gt;InitBufferImageUsage(pBufferCreateInfo-&gt;usage);</div>
-<div class="line"><a name="l19489"></a><span class="lineno">19489</span>&#160;<span class="preprocessor">                #endif</span></div>
-<div class="line"><a name="l19490"></a><span class="lineno">19490</span>&#160;                <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL)</div>
-<div class="line"><a name="l19491"></a><span class="lineno">19491</span>&#160;                {</div>
-<div class="line"><a name="l19492"></a><span class="lineno">19492</span>&#160;                    allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
-<div class="line"><a name="l19493"></a><span class="lineno">19493</span>&#160;                }</div>
-<div class="line"><a name="l19494"></a><span class="lineno">19494</span>&#160; </div>
-<div class="line"><a name="l19495"></a><span class="lineno">19495</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l19496"></a><span class="lineno">19496</span>&#160;            }</div>
-<div class="line"><a name="l19497"></a><span class="lineno">19497</span>&#160;            allocator-&gt;FreeMemory(</div>
-<div class="line"><a name="l19498"></a><span class="lineno">19498</span>&#160;                1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l19499"></a><span class="lineno">19499</span>&#160;                pAllocation);</div>
-<div class="line"><a name="l19500"></a><span class="lineno">19500</span>&#160;            *pAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19501"></a><span class="lineno">19501</span>&#160;            (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, *pBuffer, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l19502"></a><span class="lineno">19502</span>&#160;            *pBuffer = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19503"></a><span class="lineno">19503</span>&#160;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19504"></a><span class="lineno">19504</span>&#160;        }</div>
-<div class="line"><a name="l19505"></a><span class="lineno">19505</span>&#160;        (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, *pBuffer, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l19506"></a><span class="lineno">19506</span>&#160;        *pBuffer = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19507"></a><span class="lineno">19507</span>&#160;        <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19508"></a><span class="lineno">19508</span>&#160;    }</div>
-<div class="line"><a name="l19509"></a><span class="lineno">19509</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19510"></a><span class="lineno">19510</span>&#160;}</div>
-<div class="line"><a name="l19511"></a><span class="lineno">19511</span>&#160; </div>
-<div class="line"><a name="l19512"></a><span class="lineno">19512</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834">vmaCreateBufferWithAlignment</a>(</div>
-<div class="line"><a name="l19513"></a><span class="lineno">19513</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19514"></a><span class="lineno">19514</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* pBufferCreateInfo,</div>
-<div class="line"><a name="l19515"></a><span class="lineno">19515</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div>
-<div class="line"><a name="l19516"></a><span class="lineno">19516</span>&#160;    VkDeviceSize minAlignment,</div>
-<div class="line"><a name="l19517"></a><span class="lineno">19517</span>&#160;    VkBuffer* pBuffer,</div>
-<div class="line"><a name="l19518"></a><span class="lineno">19518</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
-<div class="line"><a name="l19519"></a><span class="lineno">19519</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
-<div class="line"><a name="l19520"></a><span class="lineno">19520</span>&#160;{</div>
-<div class="line"><a name="l19521"></a><span class="lineno">19521</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pBufferCreateInfo &amp;&amp; pAllocationCreateInfo &amp;&amp; VmaIsPow2(minAlignment) &amp;&amp; pBuffer &amp;&amp; pAllocation);</div>
-<div class="line"><a name="l19522"></a><span class="lineno">19522</span>&#160; </div>
-<div class="line"><a name="l19523"></a><span class="lineno">19523</span>&#160;    <span class="keywordflow">if</span>(pBufferCreateInfo-&gt;size == 0)</div>
-<div class="line"><a name="l19524"></a><span class="lineno">19524</span>&#160;    {</div>
-<div class="line"><a name="l19525"></a><span class="lineno">19525</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
-<div class="line"><a name="l19526"></a><span class="lineno">19526</span>&#160;    }</div>
-<div class="line"><a name="l19527"></a><span class="lineno">19527</span>&#160;    <span class="keywordflow">if</span>((pBufferCreateInfo-&gt;usage &amp; VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_COPY) != 0 &amp;&amp;</div>
-<div class="line"><a name="l19528"></a><span class="lineno">19528</span>&#160;        !allocator-&gt;m_UseKhrBufferDeviceAddress)</div>
-<div class="line"><a name="l19529"></a><span class="lineno">19529</span>&#160;    {</div>
-<div class="line"><a name="l19530"></a><span class="lineno">19530</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Creating a buffer with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT is not valid if VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT was not used.&quot;</span>);</div>
-<div class="line"><a name="l19531"></a><span class="lineno">19531</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
-<div class="line"><a name="l19532"></a><span class="lineno">19532</span>&#160;    }</div>
-<div class="line"><a name="l19533"></a><span class="lineno">19533</span>&#160; </div>
-<div class="line"><a name="l19534"></a><span class="lineno">19534</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreateBufferWithAlignment&quot;</span>);</div>
-<div class="line"><a name="l19535"></a><span class="lineno">19535</span>&#160; </div>
-<div class="line"><a name="l19536"></a><span class="lineno">19536</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19537"></a><span class="lineno">19537</span>&#160; </div>
-<div class="line"><a name="l19538"></a><span class="lineno">19538</span>&#160;    *pBuffer = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19539"></a><span class="lineno">19539</span>&#160;    *pAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19540"></a><span class="lineno">19540</span>&#160; </div>
-<div class="line"><a name="l19541"></a><span class="lineno">19541</span>&#160;    <span class="comment">// 1. Create VkBuffer.</span></div>
-<div class="line"><a name="l19542"></a><span class="lineno">19542</span>&#160;    VkResult res = (*allocator-&gt;GetVulkanFunctions().vkCreateBuffer)(</div>
-<div class="line"><a name="l19543"></a><span class="lineno">19543</span>&#160;        allocator-&gt;m_hDevice,</div>
-<div class="line"><a name="l19544"></a><span class="lineno">19544</span>&#160;        pBufferCreateInfo,</div>
-<div class="line"><a name="l19545"></a><span class="lineno">19545</span>&#160;        allocator-&gt;GetAllocationCallbacks(),</div>
-<div class="line"><a name="l19546"></a><span class="lineno">19546</span>&#160;        pBuffer);</div>
-<div class="line"><a name="l19547"></a><span class="lineno">19547</span>&#160;    <span class="keywordflow">if</span>(res &gt;= 0)</div>
-<div class="line"><a name="l19548"></a><span class="lineno">19548</span>&#160;    {</div>
-<div class="line"><a name="l19549"></a><span class="lineno">19549</span>&#160;        <span class="comment">// 2. vkGetBufferMemoryRequirements.</span></div>
-<div class="line"><a name="l19550"></a><span class="lineno">19550</span>&#160;        VkMemoryRequirements vkMemReq = {};</div>
-<div class="line"><a name="l19551"></a><span class="lineno">19551</span>&#160;        <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l19552"></a><span class="lineno">19552</span>&#160;        <span class="keywordtype">bool</span> prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l19553"></a><span class="lineno">19553</span>&#160;        allocator-&gt;GetBufferMemoryRequirements(*pBuffer, vkMemReq,</div>
-<div class="line"><a name="l19554"></a><span class="lineno">19554</span>&#160;            requiresDedicatedAllocation, prefersDedicatedAllocation);</div>
-<div class="line"><a name="l19555"></a><span class="lineno">19555</span>&#160; </div>
-<div class="line"><a name="l19556"></a><span class="lineno">19556</span>&#160;        <span class="comment">// 2a. Include minAlignment</span></div>
-<div class="line"><a name="l19557"></a><span class="lineno">19557</span>&#160;        vkMemReq.alignment = VMA_MAX(vkMemReq.alignment, minAlignment);</div>
-<div class="line"><a name="l19558"></a><span class="lineno">19558</span>&#160; </div>
-<div class="line"><a name="l19559"></a><span class="lineno">19559</span>&#160;        <span class="comment">// 3. Allocate memory using allocator.</span></div>
-<div class="line"><a name="l19560"></a><span class="lineno">19560</span>&#160;        res = allocator-&gt;AllocateMemory(</div>
-<div class="line"><a name="l19561"></a><span class="lineno">19561</span>&#160;            vkMemReq,</div>
-<div class="line"><a name="l19562"></a><span class="lineno">19562</span>&#160;            requiresDedicatedAllocation,</div>
-<div class="line"><a name="l19563"></a><span class="lineno">19563</span>&#160;            prefersDedicatedAllocation,</div>
-<div class="line"><a name="l19564"></a><span class="lineno">19564</span>&#160;            *pBuffer, <span class="comment">// dedicatedBuffer</span></div>
-<div class="line"><a name="l19565"></a><span class="lineno">19565</span>&#160;            pBufferCreateInfo-&gt;usage, <span class="comment">// dedicatedBufferUsage</span></div>
-<div class="line"><a name="l19566"></a><span class="lineno">19566</span>&#160;            VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
-<div class="line"><a name="l19567"></a><span class="lineno">19567</span>&#160;            *pAllocationCreateInfo,</div>
-<div class="line"><a name="l19568"></a><span class="lineno">19568</span>&#160;            VMA_SUBALLOCATION_TYPE_BUFFER,</div>
-<div class="line"><a name="l19569"></a><span class="lineno">19569</span>&#160;            1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l19570"></a><span class="lineno">19570</span>&#160;            pAllocation);</div>
-<div class="line"><a name="l19571"></a><span class="lineno">19571</span>&#160; </div>
-<div class="line"><a name="l19572"></a><span class="lineno">19572</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19573"></a><span class="lineno">19573</span>&#160;        <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19574"></a><span class="lineno">19574</span>&#160;        {</div>
-<div class="line"><a name="l19575"></a><span class="lineno">19575</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Not implemented.&quot;</span>);</div>
-<div class="line"><a name="l19576"></a><span class="lineno">19576</span>&#160;        }</div>
-<div class="line"><a name="l19577"></a><span class="lineno">19577</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19578"></a><span class="lineno">19578</span>&#160; </div>
-<div class="line"><a name="l19579"></a><span class="lineno">19579</span>&#160;        <span class="keywordflow">if</span>(res &gt;= 0)</div>
-<div class="line"><a name="l19580"></a><span class="lineno">19580</span>&#160;        {</div>
-<div class="line"><a name="l19581"></a><span class="lineno">19581</span>&#160;            <span class="comment">// 3. Bind buffer with memory.</span></div>
-<div class="line"><a name="l19582"></a><span class="lineno">19582</span>&#160;            <span class="keywordflow">if</span>((pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">VMA_ALLOCATION_CREATE_DONT_BIND_BIT</a>) == 0)</div>
-<div class="line"><a name="l19583"></a><span class="lineno">19583</span>&#160;            {</div>
-<div class="line"><a name="l19584"></a><span class="lineno">19584</span>&#160;                res = allocator-&gt;BindBufferMemory(*pAllocation, 0, *pBuffer, VMA_NULL);</div>
-<div class="line"><a name="l19585"></a><span class="lineno">19585</span>&#160;            }</div>
-<div class="line"><a name="l19586"></a><span class="lineno">19586</span>&#160;            <span class="keywordflow">if</span>(res &gt;= 0)</div>
-<div class="line"><a name="l19587"></a><span class="lineno">19587</span>&#160;            {</div>
-<div class="line"><a name="l19588"></a><span class="lineno">19588</span>&#160;                <span class="comment">// All steps succeeded.</span></div>
-<div class="line"><a name="l19589"></a><span class="lineno">19589</span>&#160;<span class="preprocessor">                #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l19590"></a><span class="lineno">19590</span>&#160;                    (*pAllocation)-&gt;InitBufferImageUsage(pBufferCreateInfo-&gt;usage);</div>
-<div class="line"><a name="l19591"></a><span class="lineno">19591</span>&#160;<span class="preprocessor">                #endif</span></div>
-<div class="line"><a name="l19592"></a><span class="lineno">19592</span>&#160;                <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL)</div>
-<div class="line"><a name="l19593"></a><span class="lineno">19593</span>&#160;                {</div>
-<div class="line"><a name="l19594"></a><span class="lineno">19594</span>&#160;                    allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
-<div class="line"><a name="l19595"></a><span class="lineno">19595</span>&#160;                }</div>
-<div class="line"><a name="l19596"></a><span class="lineno">19596</span>&#160; </div>
-<div class="line"><a name="l19597"></a><span class="lineno">19597</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l19598"></a><span class="lineno">19598</span>&#160;            }</div>
-<div class="line"><a name="l19599"></a><span class="lineno">19599</span>&#160;            allocator-&gt;FreeMemory(</div>
-<div class="line"><a name="l19600"></a><span class="lineno">19600</span>&#160;                1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l19601"></a><span class="lineno">19601</span>&#160;                pAllocation);</div>
-<div class="line"><a name="l19602"></a><span class="lineno">19602</span>&#160;            *pAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19603"></a><span class="lineno">19603</span>&#160;            (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, *pBuffer, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l19604"></a><span class="lineno">19604</span>&#160;            *pBuffer = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19605"></a><span class="lineno">19605</span>&#160;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19606"></a><span class="lineno">19606</span>&#160;        }</div>
-<div class="line"><a name="l19607"></a><span class="lineno">19607</span>&#160;        (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, *pBuffer, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l19608"></a><span class="lineno">19608</span>&#160;        *pBuffer = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19609"></a><span class="lineno">19609</span>&#160;        <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19610"></a><span class="lineno">19610</span>&#160;    }</div>
-<div class="line"><a name="l19611"></a><span class="lineno">19611</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19612"></a><span class="lineno">19612</span>&#160;}</div>
-<div class="line"><a name="l19613"></a><span class="lineno">19613</span>&#160; </div>
-<div class="line"><a name="l19614"></a><span class="lineno">19614</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a>(</div>
-<div class="line"><a name="l19615"></a><span class="lineno">19615</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19616"></a><span class="lineno">19616</span>&#160;    VkBuffer buffer,</div>
-<div class="line"><a name="l19617"></a><span class="lineno">19617</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l19618"></a><span class="lineno">19618</span>&#160;{</div>
-<div class="line"><a name="l19619"></a><span class="lineno">19619</span>&#160;    VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l19620"></a><span class="lineno">19620</span>&#160; </div>
-<div class="line"><a name="l19621"></a><span class="lineno">19621</span>&#160;    <span class="keywordflow">if</span>(buffer == VK_NULL_HANDLE &amp;&amp; allocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l19622"></a><span class="lineno">19622</span>&#160;    {</div>
-<div class="line"><a name="l19623"></a><span class="lineno">19623</span>&#160;        <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l19624"></a><span class="lineno">19624</span>&#160;    }</div>
-<div class="line"><a name="l19625"></a><span class="lineno">19625</span>&#160; </div>
-<div class="line"><a name="l19626"></a><span class="lineno">19626</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyBuffer&quot;</span>);</div>
-<div class="line"><a name="l19627"></a><span class="lineno">19627</span>&#160; </div>
-<div class="line"><a name="l19628"></a><span class="lineno">19628</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19629"></a><span class="lineno">19629</span>&#160; </div>
-<div class="line"><a name="l19630"></a><span class="lineno">19630</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19631"></a><span class="lineno">19631</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19632"></a><span class="lineno">19632</span>&#160;    {</div>
-<div class="line"><a name="l19633"></a><span class="lineno">19633</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordDestroyBuffer(</div>
-<div class="line"><a name="l19634"></a><span class="lineno">19634</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l19635"></a><span class="lineno">19635</span>&#160;            allocation);</div>
-<div class="line"><a name="l19636"></a><span class="lineno">19636</span>&#160;    }</div>
-<div class="line"><a name="l19637"></a><span class="lineno">19637</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19638"></a><span class="lineno">19638</span>&#160; </div>
-<div class="line"><a name="l19639"></a><span class="lineno">19639</span>&#160;    <span class="keywordflow">if</span>(buffer != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l19640"></a><span class="lineno">19640</span>&#160;    {</div>
-<div class="line"><a name="l19641"></a><span class="lineno">19641</span>&#160;        (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, buffer, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l19642"></a><span class="lineno">19642</span>&#160;    }</div>
-<div class="line"><a name="l19643"></a><span class="lineno">19643</span>&#160; </div>
-<div class="line"><a name="l19644"></a><span class="lineno">19644</span>&#160;    <span class="keywordflow">if</span>(allocation != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l19645"></a><span class="lineno">19645</span>&#160;    {</div>
-<div class="line"><a name="l19646"></a><span class="lineno">19646</span>&#160;        allocator-&gt;FreeMemory(</div>
-<div class="line"><a name="l19647"></a><span class="lineno">19647</span>&#160;            1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l19648"></a><span class="lineno">19648</span>&#160;            &amp;allocation);</div>
-<div class="line"><a name="l19649"></a><span class="lineno">19649</span>&#160;    }</div>
-<div class="line"><a name="l19650"></a><span class="lineno">19650</span>&#160;}</div>
-<div class="line"><a name="l19651"></a><span class="lineno">19651</span>&#160; </div>
-<div class="line"><a name="l19652"></a><span class="lineno">19652</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a>(</div>
-<div class="line"><a name="l19653"></a><span class="lineno">19653</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19654"></a><span class="lineno">19654</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo* pImageCreateInfo,</div>
-<div class="line"><a name="l19655"></a><span class="lineno">19655</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div>
-<div class="line"><a name="l19656"></a><span class="lineno">19656</span>&#160;    VkImage* pImage,</div>
-<div class="line"><a name="l19657"></a><span class="lineno">19657</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
-<div class="line"><a name="l19658"></a><span class="lineno">19658</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
-<div class="line"><a name="l19659"></a><span class="lineno">19659</span>&#160;{</div>
-<div class="line"><a name="l19660"></a><span class="lineno">19660</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pImageCreateInfo &amp;&amp; pAllocationCreateInfo &amp;&amp; pImage &amp;&amp; pAllocation);</div>
-<div class="line"><a name="l19661"></a><span class="lineno">19661</span>&#160; </div>
-<div class="line"><a name="l19662"></a><span class="lineno">19662</span>&#160;    <span class="keywordflow">if</span>(pImageCreateInfo-&gt;extent.width == 0 ||</div>
-<div class="line"><a name="l19663"></a><span class="lineno">19663</span>&#160;        pImageCreateInfo-&gt;extent.height == 0 ||</div>
-<div class="line"><a name="l19664"></a><span class="lineno">19664</span>&#160;        pImageCreateInfo-&gt;extent.depth == 0 ||</div>
-<div class="line"><a name="l19665"></a><span class="lineno">19665</span>&#160;        pImageCreateInfo-&gt;mipLevels == 0 ||</div>
-<div class="line"><a name="l19666"></a><span class="lineno">19666</span>&#160;        pImageCreateInfo-&gt;arrayLayers == 0)</div>
-<div class="line"><a name="l19667"></a><span class="lineno">19667</span>&#160;    {</div>
-<div class="line"><a name="l19668"></a><span class="lineno">19668</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
-<div class="line"><a name="l19669"></a><span class="lineno">19669</span>&#160;    }</div>
-<div class="line"><a name="l19670"></a><span class="lineno">19670</span>&#160; </div>
-<div class="line"><a name="l19671"></a><span class="lineno">19671</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreateImage&quot;</span>);</div>
-<div class="line"><a name="l19672"></a><span class="lineno">19672</span>&#160; </div>
-<div class="line"><a name="l19673"></a><span class="lineno">19673</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19674"></a><span class="lineno">19674</span>&#160; </div>
-<div class="line"><a name="l19675"></a><span class="lineno">19675</span>&#160;    *pImage = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19676"></a><span class="lineno">19676</span>&#160;    *pAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19677"></a><span class="lineno">19677</span>&#160; </div>
-<div class="line"><a name="l19678"></a><span class="lineno">19678</span>&#160;    <span class="comment">// 1. Create VkImage.</span></div>
-<div class="line"><a name="l19679"></a><span class="lineno">19679</span>&#160;    VkResult res = (*allocator-&gt;GetVulkanFunctions().vkCreateImage)(</div>
-<div class="line"><a name="l19680"></a><span class="lineno">19680</span>&#160;        allocator-&gt;m_hDevice,</div>
-<div class="line"><a name="l19681"></a><span class="lineno">19681</span>&#160;        pImageCreateInfo,</div>
-<div class="line"><a name="l19682"></a><span class="lineno">19682</span>&#160;        allocator-&gt;GetAllocationCallbacks(),</div>
-<div class="line"><a name="l19683"></a><span class="lineno">19683</span>&#160;        pImage);</div>
-<div class="line"><a name="l19684"></a><span class="lineno">19684</span>&#160;    <span class="keywordflow">if</span>(res &gt;= 0)</div>
-<div class="line"><a name="l19685"></a><span class="lineno">19685</span>&#160;    {</div>
-<div class="line"><a name="l19686"></a><span class="lineno">19686</span>&#160;        VmaSuballocationType suballocType = pImageCreateInfo-&gt;tiling == VK_IMAGE_TILING_OPTIMAL ?</div>
-<div class="line"><a name="l19687"></a><span class="lineno">19687</span>&#160;            VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL :</div>
-<div class="line"><a name="l19688"></a><span class="lineno">19688</span>&#160;            VMA_SUBALLOCATION_TYPE_IMAGE_LINEAR;</div>
-<div class="line"><a name="l19689"></a><span class="lineno">19689</span>&#160; </div>
-<div class="line"><a name="l19690"></a><span class="lineno">19690</span>&#160;        <span class="comment">// 2. Allocate memory using allocator.</span></div>
-<div class="line"><a name="l19691"></a><span class="lineno">19691</span>&#160;        VkMemoryRequirements vkMemReq = {};</div>
-<div class="line"><a name="l19692"></a><span class="lineno">19692</span>&#160;        <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l19693"></a><span class="lineno">19693</span>&#160;        <span class="keywordtype">bool</span> prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l19694"></a><span class="lineno">19694</span>&#160;        allocator-&gt;GetImageMemoryRequirements(*pImage, vkMemReq,</div>
-<div class="line"><a name="l19695"></a><span class="lineno">19695</span>&#160;            requiresDedicatedAllocation, prefersDedicatedAllocation);</div>
-<div class="line"><a name="l19696"></a><span class="lineno">19696</span>&#160; </div>
-<div class="line"><a name="l19697"></a><span class="lineno">19697</span>&#160;        res = allocator-&gt;AllocateMemory(</div>
-<div class="line"><a name="l19698"></a><span class="lineno">19698</span>&#160;            vkMemReq,</div>
-<div class="line"><a name="l19699"></a><span class="lineno">19699</span>&#160;            requiresDedicatedAllocation,</div>
-<div class="line"><a name="l19700"></a><span class="lineno">19700</span>&#160;            prefersDedicatedAllocation,</div>
-<div class="line"><a name="l19701"></a><span class="lineno">19701</span>&#160;            VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
-<div class="line"><a name="l19702"></a><span class="lineno">19702</span>&#160;            UINT32_MAX, <span class="comment">// dedicatedBufferUsage</span></div>
-<div class="line"><a name="l19703"></a><span class="lineno">19703</span>&#160;            *pImage, <span class="comment">// dedicatedImage</span></div>
-<div class="line"><a name="l19704"></a><span class="lineno">19704</span>&#160;            *pAllocationCreateInfo,</div>
-<div class="line"><a name="l19705"></a><span class="lineno">19705</span>&#160;            suballocType,</div>
-<div class="line"><a name="l19706"></a><span class="lineno">19706</span>&#160;            1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l19707"></a><span class="lineno">19707</span>&#160;            pAllocation);</div>
-<div class="line"><a name="l19708"></a><span class="lineno">19708</span>&#160; </div>
-<div class="line"><a name="l19709"></a><span class="lineno">19709</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19710"></a><span class="lineno">19710</span>&#160;        <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19711"></a><span class="lineno">19711</span>&#160;        {</div>
-<div class="line"><a name="l19712"></a><span class="lineno">19712</span>&#160;            allocator-&gt;GetRecorder()-&gt;RecordCreateImage(</div>
-<div class="line"><a name="l19713"></a><span class="lineno">19713</span>&#160;                allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l19714"></a><span class="lineno">19714</span>&#160;                *pImageCreateInfo,</div>
-<div class="line"><a name="l19715"></a><span class="lineno">19715</span>&#160;                *pAllocationCreateInfo,</div>
-<div class="line"><a name="l19716"></a><span class="lineno">19716</span>&#160;                *pAllocation);</div>
-<div class="line"><a name="l19717"></a><span class="lineno">19717</span>&#160;        }</div>
-<div class="line"><a name="l19718"></a><span class="lineno">19718</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19719"></a><span class="lineno">19719</span>&#160; </div>
-<div class="line"><a name="l19720"></a><span class="lineno">19720</span>&#160;        <span class="keywordflow">if</span>(res &gt;= 0)</div>
-<div class="line"><a name="l19721"></a><span class="lineno">19721</span>&#160;        {</div>
-<div class="line"><a name="l19722"></a><span class="lineno">19722</span>&#160;            <span class="comment">// 3. Bind image with memory.</span></div>
-<div class="line"><a name="l19723"></a><span class="lineno">19723</span>&#160;            <span class="keywordflow">if</span>((pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">VMA_ALLOCATION_CREATE_DONT_BIND_BIT</a>) == 0)</div>
-<div class="line"><a name="l19724"></a><span class="lineno">19724</span>&#160;            {</div>
-<div class="line"><a name="l19725"></a><span class="lineno">19725</span>&#160;                res = allocator-&gt;BindImageMemory(*pAllocation, 0, *pImage, VMA_NULL);</div>
-<div class="line"><a name="l19726"></a><span class="lineno">19726</span>&#160;            }</div>
-<div class="line"><a name="l19727"></a><span class="lineno">19727</span>&#160;            <span class="keywordflow">if</span>(res &gt;= 0)</div>
-<div class="line"><a name="l19728"></a><span class="lineno">19728</span>&#160;            {</div>
-<div class="line"><a name="l19729"></a><span class="lineno">19729</span>&#160;                <span class="comment">// All steps succeeded.</span></div>
-<div class="line"><a name="l19730"></a><span class="lineno">19730</span>&#160;<span class="preprocessor">                #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l19731"></a><span class="lineno">19731</span>&#160;                    (*pAllocation)-&gt;InitBufferImageUsage(pImageCreateInfo-&gt;usage);</div>
-<div class="line"><a name="l19732"></a><span class="lineno">19732</span>&#160;<span class="preprocessor">                #endif</span></div>
-<div class="line"><a name="l19733"></a><span class="lineno">19733</span>&#160;                <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL)</div>
-<div class="line"><a name="l19734"></a><span class="lineno">19734</span>&#160;                {</div>
-<div class="line"><a name="l19735"></a><span class="lineno">19735</span>&#160;                    allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
-<div class="line"><a name="l19736"></a><span class="lineno">19736</span>&#160;                }</div>
-<div class="line"><a name="l19737"></a><span class="lineno">19737</span>&#160; </div>
-<div class="line"><a name="l19738"></a><span class="lineno">19738</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l19739"></a><span class="lineno">19739</span>&#160;            }</div>
-<div class="line"><a name="l19740"></a><span class="lineno">19740</span>&#160;            allocator-&gt;FreeMemory(</div>
-<div class="line"><a name="l19741"></a><span class="lineno">19741</span>&#160;                1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l19742"></a><span class="lineno">19742</span>&#160;                pAllocation);</div>
-<div class="line"><a name="l19743"></a><span class="lineno">19743</span>&#160;            *pAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19744"></a><span class="lineno">19744</span>&#160;            (*allocator-&gt;GetVulkanFunctions().vkDestroyImage)(allocator-&gt;m_hDevice, *pImage, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l19745"></a><span class="lineno">19745</span>&#160;            *pImage = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19746"></a><span class="lineno">19746</span>&#160;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19747"></a><span class="lineno">19747</span>&#160;        }</div>
-<div class="line"><a name="l19748"></a><span class="lineno">19748</span>&#160;        (*allocator-&gt;GetVulkanFunctions().vkDestroyImage)(allocator-&gt;m_hDevice, *pImage, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l19749"></a><span class="lineno">19749</span>&#160;        *pImage = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l19750"></a><span class="lineno">19750</span>&#160;        <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19751"></a><span class="lineno">19751</span>&#160;    }</div>
-<div class="line"><a name="l19752"></a><span class="lineno">19752</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l19753"></a><span class="lineno">19753</span>&#160;}</div>
-<div class="line"><a name="l19754"></a><span class="lineno">19754</span>&#160; </div>
-<div class="line"><a name="l19755"></a><span class="lineno">19755</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e">vmaDestroyImage</a>(</div>
-<div class="line"><a name="l19756"></a><span class="lineno">19756</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l19757"></a><span class="lineno">19757</span>&#160;    VkImage image,</div>
-<div class="line"><a name="l19758"></a><span class="lineno">19758</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l19759"></a><span class="lineno">19759</span>&#160;{</div>
-<div class="line"><a name="l19760"></a><span class="lineno">19760</span>&#160;    VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l19761"></a><span class="lineno">19761</span>&#160; </div>
-<div class="line"><a name="l19762"></a><span class="lineno">19762</span>&#160;    <span class="keywordflow">if</span>(image == VK_NULL_HANDLE &amp;&amp; allocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l19763"></a><span class="lineno">19763</span>&#160;    {</div>
-<div class="line"><a name="l19764"></a><span class="lineno">19764</span>&#160;        <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l19765"></a><span class="lineno">19765</span>&#160;    }</div>
-<div class="line"><a name="l19766"></a><span class="lineno">19766</span>&#160; </div>
-<div class="line"><a name="l19767"></a><span class="lineno">19767</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyImage&quot;</span>);</div>
-<div class="line"><a name="l19768"></a><span class="lineno">19768</span>&#160; </div>
-<div class="line"><a name="l19769"></a><span class="lineno">19769</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l19770"></a><span class="lineno">19770</span>&#160; </div>
-<div class="line"><a name="l19771"></a><span class="lineno">19771</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l19772"></a><span class="lineno">19772</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l19773"></a><span class="lineno">19773</span>&#160;    {</div>
-<div class="line"><a name="l19774"></a><span class="lineno">19774</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordDestroyImage(</div>
-<div class="line"><a name="l19775"></a><span class="lineno">19775</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l19776"></a><span class="lineno">19776</span>&#160;            allocation);</div>
-<div class="line"><a name="l19777"></a><span class="lineno">19777</span>&#160;    }</div>
-<div class="line"><a name="l19778"></a><span class="lineno">19778</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l19779"></a><span class="lineno">19779</span>&#160; </div>
-<div class="line"><a name="l19780"></a><span class="lineno">19780</span>&#160;    <span class="keywordflow">if</span>(image != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l19781"></a><span class="lineno">19781</span>&#160;    {</div>
-<div class="line"><a name="l19782"></a><span class="lineno">19782</span>&#160;        (*allocator-&gt;GetVulkanFunctions().vkDestroyImage)(allocator-&gt;m_hDevice, image, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l19783"></a><span class="lineno">19783</span>&#160;    }</div>
-<div class="line"><a name="l19784"></a><span class="lineno">19784</span>&#160;    <span class="keywordflow">if</span>(allocation != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l19785"></a><span class="lineno">19785</span>&#160;    {</div>
-<div class="line"><a name="l19786"></a><span class="lineno">19786</span>&#160;        allocator-&gt;FreeMemory(</div>
-<div class="line"><a name="l19787"></a><span class="lineno">19787</span>&#160;            1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l19788"></a><span class="lineno">19788</span>&#160;            &amp;allocation);</div>
-<div class="line"><a name="l19789"></a><span class="lineno">19789</span>&#160;    }</div>
-<div class="line"><a name="l19790"></a><span class="lineno">19790</span>&#160;}</div>
-<div class="line"><a name="l19791"></a><span class="lineno">19791</span>&#160; </div>
-<div class="line"><a name="l19792"></a><span class="lineno">19792</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #ifdef VMA_IMPLEMENTATION</span></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2900</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a3bf940c0271d85d6ba32a4d820075055"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">VmaAllocationCreateInfo::memoryTypeBits</a></div><div class="ttdeci">uint32_t memoryTypeBits</div><div class="ttdoc">Bitmask containing one bit set for every memory type acceptable for this allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2926</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a6272c0555cfd1fe28bff1afeb6190150"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">VmaAllocationCreateInfo::pool</a></div><div class="ttdeci">VmaPool pool</div><div class="ttdoc">Pool that this allocation should be created in.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2932</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a7fe8d81a1ad10b2a2faacacee5b15d6d"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">VmaAllocationCreateInfo::preferredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags preferredFlags</div><div class="ttdoc">Flags that preferably should be set in a memory type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2918</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a8259e85c272683434f4abb4ddddffe19"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">VmaAllocationCreateInfo::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Custom general-purpose pointer that will be stored in VmaAllocation, can be read as VmaAllocationInfo...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2939</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a9166390303ff42d783305bc31c2b6b90"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">VmaAllocationCreateInfo::requiredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags requiredFlags</div><div class="ttdoc">Flags that must be set in a Memory Type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2913</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a983d39e1a2e63649d78a960aa2fdd0f7"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7">VmaAllocationCreateInfo::priority</a></div><div class="ttdeci">float priority</div><div class="ttdoc">A floating-point value between 0 and 1, indicating the priority of the allocation relative to other m...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2946</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2908</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2902</div></div>
+<div class="line"><a name="l12671"></a><span class="lineno">12671</span>&#160;<span class="comment">// class VmaDeviceMemoryBlock</span></div>
+<div class="line"><a name="l12672"></a><span class="lineno">12672</span>&#160; </div>
+<div class="line"><a name="l12673"></a><span class="lineno">12673</span>&#160;VmaDeviceMemoryBlock::VmaDeviceMemoryBlock(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator) :</div>
+<div class="line"><a name="l12674"></a><span class="lineno">12674</span>&#160;    m_pMetadata(VMA_NULL),</div>
+<div class="line"><a name="l12675"></a><span class="lineno">12675</span>&#160;    m_MemoryTypeIndex(UINT32_MAX),</div>
+<div class="line"><a name="l12676"></a><span class="lineno">12676</span>&#160;    m_Id(0),</div>
+<div class="line"><a name="l12677"></a><span class="lineno">12677</span>&#160;    m_hMemory(VK_NULL_HANDLE),</div>
+<div class="line"><a name="l12678"></a><span class="lineno">12678</span>&#160;    m_MapCount(0),</div>
+<div class="line"><a name="l12679"></a><span class="lineno">12679</span>&#160;    m_pMappedData(VMA_NULL)</div>
+<div class="line"><a name="l12680"></a><span class="lineno">12680</span>&#160;{</div>
+<div class="line"><a name="l12681"></a><span class="lineno">12681</span>&#160;}</div>
+<div class="line"><a name="l12682"></a><span class="lineno">12682</span>&#160; </div>
+<div class="line"><a name="l12683"></a><span class="lineno">12683</span>&#160;<span class="keywordtype">void</span> VmaDeviceMemoryBlock::Init(</div>
+<div class="line"><a name="l12684"></a><span class="lineno">12684</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
+<div class="line"><a name="l12685"></a><span class="lineno">12685</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> hParentPool,</div>
+<div class="line"><a name="l12686"></a><span class="lineno">12686</span>&#160;    uint32_t newMemoryTypeIndex,</div>
+<div class="line"><a name="l12687"></a><span class="lineno">12687</span>&#160;    VkDeviceMemory newMemory,</div>
+<div class="line"><a name="l12688"></a><span class="lineno">12688</span>&#160;    VkDeviceSize newSize,</div>
+<div class="line"><a name="l12689"></a><span class="lineno">12689</span>&#160;    uint32_t <span class="keywordtype">id</span>,</div>
+<div class="line"><a name="l12690"></a><span class="lineno">12690</span>&#160;    uint32_t algorithm)</div>
+<div class="line"><a name="l12691"></a><span class="lineno">12691</span>&#160;{</div>
+<div class="line"><a name="l12692"></a><span class="lineno">12692</span>&#160;    VMA_ASSERT(m_hMemory == VK_NULL_HANDLE);</div>
+<div class="line"><a name="l12693"></a><span class="lineno">12693</span>&#160; </div>
+<div class="line"><a name="l12694"></a><span class="lineno">12694</span>&#160;    m_hParentPool = hParentPool;</div>
+<div class="line"><a name="l12695"></a><span class="lineno">12695</span>&#160;    m_MemoryTypeIndex = newMemoryTypeIndex;</div>
+<div class="line"><a name="l12696"></a><span class="lineno">12696</span>&#160;    m_Id = id;</div>
+<div class="line"><a name="l12697"></a><span class="lineno">12697</span>&#160;    m_hMemory = newMemory;</div>
+<div class="line"><a name="l12698"></a><span class="lineno">12698</span>&#160; </div>
+<div class="line"><a name="l12699"></a><span class="lineno">12699</span>&#160;    <span class="keywordflow">switch</span>(algorithm)</div>
+<div class="line"><a name="l12700"></a><span class="lineno">12700</span>&#160;    {</div>
+<div class="line"><a name="l12701"></a><span class="lineno">12701</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a>:</div>
+<div class="line"><a name="l12702"></a><span class="lineno">12702</span>&#160;        m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Linear)(hAllocator);</div>
+<div class="line"><a name="l12703"></a><span class="lineno">12703</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l12704"></a><span class="lineno">12704</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a>:</div>
+<div class="line"><a name="l12705"></a><span class="lineno">12705</span>&#160;        m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Buddy)(hAllocator);</div>
+<div class="line"><a name="l12706"></a><span class="lineno">12706</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l12707"></a><span class="lineno">12707</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l12708"></a><span class="lineno">12708</span>&#160;        VMA_ASSERT(0);</div>
+<div class="line"><a name="l12709"></a><span class="lineno">12709</span>&#160;        <span class="comment">// Fall-through.</span></div>
+<div class="line"><a name="l12710"></a><span class="lineno">12710</span>&#160;    <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l12711"></a><span class="lineno">12711</span>&#160;        m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Generic)(hAllocator);</div>
+<div class="line"><a name="l12712"></a><span class="lineno">12712</span>&#160;    }</div>
+<div class="line"><a name="l12713"></a><span class="lineno">12713</span>&#160;    m_pMetadata-&gt;Init(newSize);</div>
+<div class="line"><a name="l12714"></a><span class="lineno">12714</span>&#160;}</div>
+<div class="line"><a name="l12715"></a><span class="lineno">12715</span>&#160; </div>
+<div class="line"><a name="l12716"></a><span class="lineno">12716</span>&#160;<span class="keywordtype">void</span> VmaDeviceMemoryBlock::Destroy(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator)</div>
+<div class="line"><a name="l12717"></a><span class="lineno">12717</span>&#160;{</div>
+<div class="line"><a name="l12718"></a><span class="lineno">12718</span>&#160;    <span class="comment">// This is the most important assert in the entire library.</span></div>
+<div class="line"><a name="l12719"></a><span class="lineno">12719</span>&#160;    <span class="comment">// Hitting it means you have some memory leak - unreleased VmaAllocation objects.</span></div>
+<div class="line"><a name="l12720"></a><span class="lineno">12720</span>&#160;    VMA_ASSERT(m_pMetadata-&gt;IsEmpty() &amp;&amp; <span class="stringliteral">&quot;Some allocations were not freed before destruction of this memory block!&quot;</span>);</div>
+<div class="line"><a name="l12721"></a><span class="lineno">12721</span>&#160; </div>
+<div class="line"><a name="l12722"></a><span class="lineno">12722</span>&#160;    VMA_ASSERT(m_hMemory != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l12723"></a><span class="lineno">12723</span>&#160;    allocator-&gt;FreeVulkanMemory(m_MemoryTypeIndex, m_pMetadata-&gt;GetSize(), m_hMemory);</div>
+<div class="line"><a name="l12724"></a><span class="lineno">12724</span>&#160;    m_hMemory = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l12725"></a><span class="lineno">12725</span>&#160; </div>
+<div class="line"><a name="l12726"></a><span class="lineno">12726</span>&#160;    vma_delete(allocator, m_pMetadata);</div>
+<div class="line"><a name="l12727"></a><span class="lineno">12727</span>&#160;    m_pMetadata = VMA_NULL;</div>
+<div class="line"><a name="l12728"></a><span class="lineno">12728</span>&#160;}</div>
+<div class="line"><a name="l12729"></a><span class="lineno">12729</span>&#160; </div>
+<div class="line"><a name="l12730"></a><span class="lineno">12730</span>&#160;<span class="keywordtype">bool</span> VmaDeviceMemoryBlock::Validate()<span class="keyword"> const</span></div>
+<div class="line"><a name="l12731"></a><span class="lineno">12731</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l12732"></a><span class="lineno">12732</span>&#160;    VMA_VALIDATE((m_hMemory != VK_NULL_HANDLE) &amp;&amp;</div>
+<div class="line"><a name="l12733"></a><span class="lineno">12733</span>&#160;        (m_pMetadata-&gt;GetSize() != 0));</div>
+<div class="line"><a name="l12734"></a><span class="lineno">12734</span>&#160; </div>
+<div class="line"><a name="l12735"></a><span class="lineno">12735</span>&#160;    <span class="keywordflow">return</span> m_pMetadata-&gt;Validate();</div>
+<div class="line"><a name="l12736"></a><span class="lineno">12736</span>&#160;}</div>
+<div class="line"><a name="l12737"></a><span class="lineno">12737</span>&#160; </div>
+<div class="line"><a name="l12738"></a><span class="lineno">12738</span>&#160;VkResult VmaDeviceMemoryBlock::CheckCorruption(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator)</div>
+<div class="line"><a name="l12739"></a><span class="lineno">12739</span>&#160;{</div>
+<div class="line"><a name="l12740"></a><span class="lineno">12740</span>&#160;    <span class="keywordtype">void</span>* pData = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l12741"></a><span class="lineno">12741</span>&#160;    VkResult res = Map(hAllocator, 1, &amp;pData);</div>
+<div class="line"><a name="l12742"></a><span class="lineno">12742</span>&#160;    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l12743"></a><span class="lineno">12743</span>&#160;    {</div>
+<div class="line"><a name="l12744"></a><span class="lineno">12744</span>&#160;        <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l12745"></a><span class="lineno">12745</span>&#160;    }</div>
+<div class="line"><a name="l12746"></a><span class="lineno">12746</span>&#160; </div>
+<div class="line"><a name="l12747"></a><span class="lineno">12747</span>&#160;    res = m_pMetadata-&gt;CheckCorruption(pData);</div>
+<div class="line"><a name="l12748"></a><span class="lineno">12748</span>&#160; </div>
+<div class="line"><a name="l12749"></a><span class="lineno">12749</span>&#160;    Unmap(hAllocator, 1);</div>
+<div class="line"><a name="l12750"></a><span class="lineno">12750</span>&#160; </div>
+<div class="line"><a name="l12751"></a><span class="lineno">12751</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l12752"></a><span class="lineno">12752</span>&#160;}</div>
+<div class="line"><a name="l12753"></a><span class="lineno">12753</span>&#160; </div>
+<div class="line"><a name="l12754"></a><span class="lineno">12754</span>&#160;VkResult VmaDeviceMemoryBlock::Map(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator, uint32_t count, <span class="keywordtype">void</span>** ppData)</div>
+<div class="line"><a name="l12755"></a><span class="lineno">12755</span>&#160;{</div>
+<div class="line"><a name="l12756"></a><span class="lineno">12756</span>&#160;    <span class="keywordflow">if</span>(count == 0)</div>
+<div class="line"><a name="l12757"></a><span class="lineno">12757</span>&#160;    {</div>
+<div class="line"><a name="l12758"></a><span class="lineno">12758</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l12759"></a><span class="lineno">12759</span>&#160;    }</div>
+<div class="line"><a name="l12760"></a><span class="lineno">12760</span>&#160; </div>
+<div class="line"><a name="l12761"></a><span class="lineno">12761</span>&#160;    VmaMutexLock lock(m_Mutex, hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l12762"></a><span class="lineno">12762</span>&#160;    <span class="keywordflow">if</span>(m_MapCount != 0)</div>
+<div class="line"><a name="l12763"></a><span class="lineno">12763</span>&#160;    {</div>
+<div class="line"><a name="l12764"></a><span class="lineno">12764</span>&#160;        m_MapCount += count;</div>
+<div class="line"><a name="l12765"></a><span class="lineno">12765</span>&#160;        VMA_ASSERT(m_pMappedData != VMA_NULL);</div>
+<div class="line"><a name="l12766"></a><span class="lineno">12766</span>&#160;        <span class="keywordflow">if</span>(ppData != VMA_NULL)</div>
+<div class="line"><a name="l12767"></a><span class="lineno">12767</span>&#160;        {</div>
+<div class="line"><a name="l12768"></a><span class="lineno">12768</span>&#160;            *ppData = m_pMappedData;</div>
+<div class="line"><a name="l12769"></a><span class="lineno">12769</span>&#160;        }</div>
+<div class="line"><a name="l12770"></a><span class="lineno">12770</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l12771"></a><span class="lineno">12771</span>&#160;    }</div>
+<div class="line"><a name="l12772"></a><span class="lineno">12772</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l12773"></a><span class="lineno">12773</span>&#160;    {</div>
+<div class="line"><a name="l12774"></a><span class="lineno">12774</span>&#160;        VkResult result = (*hAllocator-&gt;GetVulkanFunctions().vkMapMemory)(</div>
+<div class="line"><a name="l12775"></a><span class="lineno">12775</span>&#160;            hAllocator-&gt;m_hDevice,</div>
+<div class="line"><a name="l12776"></a><span class="lineno">12776</span>&#160;            m_hMemory,</div>
+<div class="line"><a name="l12777"></a><span class="lineno">12777</span>&#160;            0, <span class="comment">// offset</span></div>
+<div class="line"><a name="l12778"></a><span class="lineno">12778</span>&#160;            VK_WHOLE_SIZE,</div>
+<div class="line"><a name="l12779"></a><span class="lineno">12779</span>&#160;            0, <span class="comment">// flags</span></div>
+<div class="line"><a name="l12780"></a><span class="lineno">12780</span>&#160;            &amp;m_pMappedData);</div>
+<div class="line"><a name="l12781"></a><span class="lineno">12781</span>&#160;        <span class="keywordflow">if</span>(result == VK_SUCCESS)</div>
+<div class="line"><a name="l12782"></a><span class="lineno">12782</span>&#160;        {</div>
+<div class="line"><a name="l12783"></a><span class="lineno">12783</span>&#160;            <span class="keywordflow">if</span>(ppData != VMA_NULL)</div>
+<div class="line"><a name="l12784"></a><span class="lineno">12784</span>&#160;            {</div>
+<div class="line"><a name="l12785"></a><span class="lineno">12785</span>&#160;                *ppData = m_pMappedData;</div>
+<div class="line"><a name="l12786"></a><span class="lineno">12786</span>&#160;            }</div>
+<div class="line"><a name="l12787"></a><span class="lineno">12787</span>&#160;            m_MapCount = count;</div>
+<div class="line"><a name="l12788"></a><span class="lineno">12788</span>&#160;        }</div>
+<div class="line"><a name="l12789"></a><span class="lineno">12789</span>&#160;        <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l12790"></a><span class="lineno">12790</span>&#160;    }</div>
+<div class="line"><a name="l12791"></a><span class="lineno">12791</span>&#160;}</div>
+<div class="line"><a name="l12792"></a><span class="lineno">12792</span>&#160; </div>
+<div class="line"><a name="l12793"></a><span class="lineno">12793</span>&#160;<span class="keywordtype">void</span> VmaDeviceMemoryBlock::Unmap(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator, uint32_t count)</div>
+<div class="line"><a name="l12794"></a><span class="lineno">12794</span>&#160;{</div>
+<div class="line"><a name="l12795"></a><span class="lineno">12795</span>&#160;    <span class="keywordflow">if</span>(count == 0)</div>
+<div class="line"><a name="l12796"></a><span class="lineno">12796</span>&#160;    {</div>
+<div class="line"><a name="l12797"></a><span class="lineno">12797</span>&#160;        <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l12798"></a><span class="lineno">12798</span>&#160;    }</div>
+<div class="line"><a name="l12799"></a><span class="lineno">12799</span>&#160; </div>
+<div class="line"><a name="l12800"></a><span class="lineno">12800</span>&#160;    VmaMutexLock lock(m_Mutex, hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l12801"></a><span class="lineno">12801</span>&#160;    <span class="keywordflow">if</span>(m_MapCount &gt;= count)</div>
+<div class="line"><a name="l12802"></a><span class="lineno">12802</span>&#160;    {</div>
+<div class="line"><a name="l12803"></a><span class="lineno">12803</span>&#160;        m_MapCount -= count;</div>
+<div class="line"><a name="l12804"></a><span class="lineno">12804</span>&#160;        <span class="keywordflow">if</span>(m_MapCount == 0)</div>
+<div class="line"><a name="l12805"></a><span class="lineno">12805</span>&#160;        {</div>
+<div class="line"><a name="l12806"></a><span class="lineno">12806</span>&#160;            m_pMappedData = VMA_NULL;</div>
+<div class="line"><a name="l12807"></a><span class="lineno">12807</span>&#160;            (*hAllocator-&gt;GetVulkanFunctions().vkUnmapMemory)(hAllocator-&gt;m_hDevice, m_hMemory);</div>
+<div class="line"><a name="l12808"></a><span class="lineno">12808</span>&#160;        }</div>
+<div class="line"><a name="l12809"></a><span class="lineno">12809</span>&#160;    }</div>
+<div class="line"><a name="l12810"></a><span class="lineno">12810</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l12811"></a><span class="lineno">12811</span>&#160;    {</div>
+<div class="line"><a name="l12812"></a><span class="lineno">12812</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VkDeviceMemory block is being unmapped while it was not previously mapped.&quot;</span>);</div>
+<div class="line"><a name="l12813"></a><span class="lineno">12813</span>&#160;    }</div>
+<div class="line"><a name="l12814"></a><span class="lineno">12814</span>&#160;}</div>
+<div class="line"><a name="l12815"></a><span class="lineno">12815</span>&#160; </div>
+<div class="line"><a name="l12816"></a><span class="lineno">12816</span>&#160;VkResult VmaDeviceMemoryBlock::WriteMagicValueAroundAllocation(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize)</div>
+<div class="line"><a name="l12817"></a><span class="lineno">12817</span>&#160;{</div>
+<div class="line"><a name="l12818"></a><span class="lineno">12818</span>&#160;    VMA_ASSERT(VMA_DEBUG_MARGIN &gt; 0 &amp;&amp; VMA_DEBUG_MARGIN % 4 == 0 &amp;&amp; VMA_DEBUG_DETECT_CORRUPTION);</div>
+<div class="line"><a name="l12819"></a><span class="lineno">12819</span>&#160;    VMA_ASSERT(allocOffset &gt;= VMA_DEBUG_MARGIN);</div>
+<div class="line"><a name="l12820"></a><span class="lineno">12820</span>&#160; </div>
+<div class="line"><a name="l12821"></a><span class="lineno">12821</span>&#160;    <span class="keywordtype">void</span>* pData;</div>
+<div class="line"><a name="l12822"></a><span class="lineno">12822</span>&#160;    VkResult res = Map(hAllocator, 1, &amp;pData);</div>
+<div class="line"><a name="l12823"></a><span class="lineno">12823</span>&#160;    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l12824"></a><span class="lineno">12824</span>&#160;    {</div>
+<div class="line"><a name="l12825"></a><span class="lineno">12825</span>&#160;        <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l12826"></a><span class="lineno">12826</span>&#160;    }</div>
+<div class="line"><a name="l12827"></a><span class="lineno">12827</span>&#160; </div>
+<div class="line"><a name="l12828"></a><span class="lineno">12828</span>&#160;    VmaWriteMagicValue(pData, allocOffset - VMA_DEBUG_MARGIN);</div>
+<div class="line"><a name="l12829"></a><span class="lineno">12829</span>&#160;    VmaWriteMagicValue(pData, allocOffset + allocSize);</div>
+<div class="line"><a name="l12830"></a><span class="lineno">12830</span>&#160; </div>
+<div class="line"><a name="l12831"></a><span class="lineno">12831</span>&#160;    Unmap(hAllocator, 1);</div>
+<div class="line"><a name="l12832"></a><span class="lineno">12832</span>&#160; </div>
+<div class="line"><a name="l12833"></a><span class="lineno">12833</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l12834"></a><span class="lineno">12834</span>&#160;}</div>
+<div class="line"><a name="l12835"></a><span class="lineno">12835</span>&#160; </div>
+<div class="line"><a name="l12836"></a><span class="lineno">12836</span>&#160;VkResult VmaDeviceMemoryBlock::ValidateMagicValueAroundAllocation(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize)</div>
+<div class="line"><a name="l12837"></a><span class="lineno">12837</span>&#160;{</div>
+<div class="line"><a name="l12838"></a><span class="lineno">12838</span>&#160;    VMA_ASSERT(VMA_DEBUG_MARGIN &gt; 0 &amp;&amp; VMA_DEBUG_MARGIN % 4 == 0 &amp;&amp; VMA_DEBUG_DETECT_CORRUPTION);</div>
+<div class="line"><a name="l12839"></a><span class="lineno">12839</span>&#160;    VMA_ASSERT(allocOffset &gt;= VMA_DEBUG_MARGIN);</div>
+<div class="line"><a name="l12840"></a><span class="lineno">12840</span>&#160; </div>
+<div class="line"><a name="l12841"></a><span class="lineno">12841</span>&#160;    <span class="keywordtype">void</span>* pData;</div>
+<div class="line"><a name="l12842"></a><span class="lineno">12842</span>&#160;    VkResult res = Map(hAllocator, 1, &amp;pData);</div>
+<div class="line"><a name="l12843"></a><span class="lineno">12843</span>&#160;    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l12844"></a><span class="lineno">12844</span>&#160;    {</div>
+<div class="line"><a name="l12845"></a><span class="lineno">12845</span>&#160;        <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l12846"></a><span class="lineno">12846</span>&#160;    }</div>
+<div class="line"><a name="l12847"></a><span class="lineno">12847</span>&#160; </div>
+<div class="line"><a name="l12848"></a><span class="lineno">12848</span>&#160;    <span class="keywordflow">if</span>(!VmaValidateMagicValue(pData, allocOffset - VMA_DEBUG_MARGIN))</div>
+<div class="line"><a name="l12849"></a><span class="lineno">12849</span>&#160;    {</div>
+<div class="line"><a name="l12850"></a><span class="lineno">12850</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED BEFORE FREED ALLOCATION!&quot;</span>);</div>
+<div class="line"><a name="l12851"></a><span class="lineno">12851</span>&#160;    }</div>
+<div class="line"><a name="l12852"></a><span class="lineno">12852</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span>(!VmaValidateMagicValue(pData, allocOffset + allocSize))</div>
+<div class="line"><a name="l12853"></a><span class="lineno">12853</span>&#160;    {</div>
+<div class="line"><a name="l12854"></a><span class="lineno">12854</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;MEMORY CORRUPTION DETECTED AFTER FREED ALLOCATION!&quot;</span>);</div>
+<div class="line"><a name="l12855"></a><span class="lineno">12855</span>&#160;    }</div>
+<div class="line"><a name="l12856"></a><span class="lineno">12856</span>&#160; </div>
+<div class="line"><a name="l12857"></a><span class="lineno">12857</span>&#160;    Unmap(hAllocator, 1);</div>
+<div class="line"><a name="l12858"></a><span class="lineno">12858</span>&#160; </div>
+<div class="line"><a name="l12859"></a><span class="lineno">12859</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l12860"></a><span class="lineno">12860</span>&#160;}</div>
+<div class="line"><a name="l12861"></a><span class="lineno">12861</span>&#160; </div>
+<div class="line"><a name="l12862"></a><span class="lineno">12862</span>&#160;VkResult VmaDeviceMemoryBlock::BindBufferMemory(</div>
+<div class="line"><a name="l12863"></a><span class="lineno">12863</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
+<div class="line"><a name="l12864"></a><span class="lineno">12864</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
+<div class="line"><a name="l12865"></a><span class="lineno">12865</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
+<div class="line"><a name="l12866"></a><span class="lineno">12866</span>&#160;    VkBuffer hBuffer,</div>
+<div class="line"><a name="l12867"></a><span class="lineno">12867</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
+<div class="line"><a name="l12868"></a><span class="lineno">12868</span>&#160;{</div>
+<div class="line"><a name="l12869"></a><span class="lineno">12869</span>&#160;    VMA_ASSERT(hAllocation-&gt;GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK &amp;&amp;</div>
+<div class="line"><a name="l12870"></a><span class="lineno">12870</span>&#160;        hAllocation-&gt;GetBlock() == <span class="keyword">this</span>);</div>
+<div class="line"><a name="l12871"></a><span class="lineno">12871</span>&#160;    VMA_ASSERT(allocationLocalOffset &lt; hAllocation-&gt;GetSize() &amp;&amp;</div>
+<div class="line"><a name="l12872"></a><span class="lineno">12872</span>&#160;        <span class="stringliteral">&quot;Invalid allocationLocalOffset. Did you forget that this offset is relative to the beginning of the allocation, not the whole memory block?&quot;</span>);</div>
+<div class="line"><a name="l12873"></a><span class="lineno">12873</span>&#160;    <span class="keyword">const</span> VkDeviceSize memoryOffset = hAllocation-&gt;GetOffset() + allocationLocalOffset;</div>
+<div class="line"><a name="l12874"></a><span class="lineno">12874</span>&#160;    <span class="comment">// This lock is important so that we don&#39;t call vkBind... and/or vkMap... simultaneously on the same VkDeviceMemory from multiple threads.</span></div>
+<div class="line"><a name="l12875"></a><span class="lineno">12875</span>&#160;    VmaMutexLock lock(m_Mutex, hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l12876"></a><span class="lineno">12876</span>&#160;    <span class="keywordflow">return</span> hAllocator-&gt;BindVulkanBuffer(m_hMemory, memoryOffset, hBuffer, pNext);</div>
+<div class="line"><a name="l12877"></a><span class="lineno">12877</span>&#160;}</div>
+<div class="line"><a name="l12878"></a><span class="lineno">12878</span>&#160; </div>
+<div class="line"><a name="l12879"></a><span class="lineno">12879</span>&#160;VkResult VmaDeviceMemoryBlock::BindImageMemory(</div>
+<div class="line"><a name="l12880"></a><span class="lineno">12880</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
+<div class="line"><a name="l12881"></a><span class="lineno">12881</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
+<div class="line"><a name="l12882"></a><span class="lineno">12882</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
+<div class="line"><a name="l12883"></a><span class="lineno">12883</span>&#160;    VkImage hImage,</div>
+<div class="line"><a name="l12884"></a><span class="lineno">12884</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
+<div class="line"><a name="l12885"></a><span class="lineno">12885</span>&#160;{</div>
+<div class="line"><a name="l12886"></a><span class="lineno">12886</span>&#160;    VMA_ASSERT(hAllocation-&gt;GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK &amp;&amp;</div>
+<div class="line"><a name="l12887"></a><span class="lineno">12887</span>&#160;        hAllocation-&gt;GetBlock() == <span class="keyword">this</span>);</div>
+<div class="line"><a name="l12888"></a><span class="lineno">12888</span>&#160;    VMA_ASSERT(allocationLocalOffset &lt; hAllocation-&gt;GetSize() &amp;&amp;</div>
+<div class="line"><a name="l12889"></a><span class="lineno">12889</span>&#160;        <span class="stringliteral">&quot;Invalid allocationLocalOffset. Did you forget that this offset is relative to the beginning of the allocation, not the whole memory block?&quot;</span>);</div>
+<div class="line"><a name="l12890"></a><span class="lineno">12890</span>&#160;    <span class="keyword">const</span> VkDeviceSize memoryOffset = hAllocation-&gt;GetOffset() + allocationLocalOffset;</div>
+<div class="line"><a name="l12891"></a><span class="lineno">12891</span>&#160;    <span class="comment">// This lock is important so that we don&#39;t call vkBind... and/or vkMap... simultaneously on the same VkDeviceMemory from multiple threads.</span></div>
+<div class="line"><a name="l12892"></a><span class="lineno">12892</span>&#160;    VmaMutexLock lock(m_Mutex, hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l12893"></a><span class="lineno">12893</span>&#160;    <span class="keywordflow">return</span> hAllocator-&gt;BindVulkanImage(m_hMemory, memoryOffset, hImage, pNext);</div>
+<div class="line"><a name="l12894"></a><span class="lineno">12894</span>&#160;}</div>
+<div class="line"><a name="l12895"></a><span class="lineno">12895</span>&#160; </div>
+<div class="line"><a name="l12896"></a><span class="lineno">12896</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> InitStatInfo(<a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a>&amp; outInfo)</div>
+<div class="line"><a name="l12897"></a><span class="lineno">12897</span>&#160;{</div>
+<div class="line"><a name="l12898"></a><span class="lineno">12898</span>&#160;    memset(&amp;outInfo, 0, <span class="keyword">sizeof</span>(outInfo));</div>
+<div class="line"><a name="l12899"></a><span class="lineno">12899</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = UINT64_MAX;</div>
+<div class="line"><a name="l12900"></a><span class="lineno">12900</span>&#160;    outInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = UINT64_MAX;</div>
+<div class="line"><a name="l12901"></a><span class="lineno">12901</span>&#160;}</div>
+<div class="line"><a name="l12902"></a><span class="lineno">12902</span>&#160; </div>
+<div class="line"><a name="l12903"></a><span class="lineno">12903</span>&#160;<span class="comment">// Adds statistics srcInfo into inoutInfo, like: inoutInfo += srcInfo.</span></div>
+<div class="line"><a name="l12904"></a><span class="lineno">12904</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> VmaAddStatInfo(<a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a>&amp; inoutInfo, <span class="keyword">const</span> <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a>&amp; srcInfo)</div>
+<div class="line"><a name="l12905"></a><span class="lineno">12905</span>&#160;{</div>
+<div class="line"><a name="l12906"></a><span class="lineno">12906</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a> += srcInfo.<a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a>;</div>
+<div class="line"><a name="l12907"></a><span class="lineno">12907</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a> += srcInfo.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a>;</div>
+<div class="line"><a name="l12908"></a><span class="lineno">12908</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a> += srcInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>;</div>
+<div class="line"><a name="l12909"></a><span class="lineno">12909</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a> += srcInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a>;</div>
+<div class="line"><a name="l12910"></a><span class="lineno">12910</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a> += srcInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a>;</div>
+<div class="line"><a name="l12911"></a><span class="lineno">12911</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a> = VMA_MIN(inoutInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>, srcInfo.<a class="code" href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">allocationSizeMin</a>);</div>
+<div class="line"><a name="l12912"></a><span class="lineno">12912</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a> = VMA_MAX(inoutInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a>, srcInfo.<a class="code" href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">allocationSizeMax</a>);</div>
+<div class="line"><a name="l12913"></a><span class="lineno">12913</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a> = VMA_MIN(inoutInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>, srcInfo.<a class="code" href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">unusedRangeSizeMin</a>);</div>
+<div class="line"><a name="l12914"></a><span class="lineno">12914</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a> = VMA_MAX(inoutInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>, srcInfo.<a class="code" href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">unusedRangeSizeMax</a>);</div>
+<div class="line"><a name="l12915"></a><span class="lineno">12915</span>&#160;}</div>
+<div class="line"><a name="l12916"></a><span class="lineno">12916</span>&#160; </div>
+<div class="line"><a name="l12917"></a><span class="lineno">12917</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> VmaPostprocessCalcStatInfo(<a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a>&amp; inoutInfo)</div>
+<div class="line"><a name="l12918"></a><span class="lineno">12918</span>&#160;{</div>
+<div class="line"><a name="l12919"></a><span class="lineno">12919</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#a1081a039964e566c672e7a2347f9e599">allocationSizeAvg</a> = (inoutInfo.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a> &gt; 0) ?</div>
+<div class="line"><a name="l12920"></a><span class="lineno">12920</span>&#160;        VmaRoundDiv&lt;VkDeviceSize&gt;(inoutInfo.<a class="code" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a>, inoutInfo.<a class="code" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a>) : 0;</div>
+<div class="line"><a name="l12921"></a><span class="lineno">12921</span>&#160;    inoutInfo.<a class="code" href="struct_vma_stat_info.html#a2f9b3452af90c9768a30b7fb6ae194fc">unusedRangeSizeAvg</a> = (inoutInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a> &gt; 0) ?</div>
+<div class="line"><a name="l12922"></a><span class="lineno">12922</span>&#160;        VmaRoundDiv&lt;VkDeviceSize&gt;(inoutInfo.<a class="code" href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">unusedBytes</a>, inoutInfo.<a class="code" href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">unusedRangeCount</a>) : 0;</div>
+<div class="line"><a name="l12923"></a><span class="lineno">12923</span>&#160;}</div>
+<div class="line"><a name="l12924"></a><span class="lineno">12924</span>&#160; </div>
+<div class="line"><a name="l12925"></a><span class="lineno">12925</span>&#160;VmaPool_T::VmaPool_T(</div>
+<div class="line"><a name="l12926"></a><span class="lineno">12926</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
+<div class="line"><a name="l12927"></a><span class="lineno">12927</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a>&amp; createInfo,</div>
+<div class="line"><a name="l12928"></a><span class="lineno">12928</span>&#160;    VkDeviceSize preferredBlockSize) :</div>
+<div class="line"><a name="l12929"></a><span class="lineno">12929</span>&#160;    m_BlockVector(</div>
+<div class="line"><a name="l12930"></a><span class="lineno">12930</span>&#160;        hAllocator,</div>
+<div class="line"><a name="l12931"></a><span class="lineno">12931</span>&#160;        this, <span class="comment">// hParentPool</span></div>
+<div class="line"><a name="l12932"></a><span class="lineno">12932</span>&#160;        createInfo.memoryTypeIndex,</div>
+<div class="line"><a name="l12933"></a><span class="lineno">12933</span>&#160;        createInfo.blockSize != 0 ? createInfo.blockSize : preferredBlockSize,</div>
+<div class="line"><a name="l12934"></a><span class="lineno">12934</span>&#160;        createInfo.minBlockCount,</div>
+<div class="line"><a name="l12935"></a><span class="lineno">12935</span>&#160;        createInfo.maxBlockCount,</div>
+<div class="line"><a name="l12936"></a><span class="lineno">12936</span>&#160;        (createInfo.flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT</a>) != 0 ? 1 : hAllocator-&gt;GetBufferImageGranularity(),</div>
+<div class="line"><a name="l12937"></a><span class="lineno">12937</span>&#160;        createInfo.frameInUseCount,</div>
+<div class="line"><a name="l12938"></a><span class="lineno">12938</span>&#160;        createInfo.blockSize != 0, <span class="comment">// explicitBlockSize</span></div>
+<div class="line"><a name="l12939"></a><span class="lineno">12939</span>&#160;        createInfo.flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c">VMA_POOL_CREATE_ALGORITHM_MASK</a>, <span class="comment">// algorithm</span></div>
+<div class="line"><a name="l12940"></a><span class="lineno">12940</span>&#160;        createInfo.priority,</div>
+<div class="line"><a name="l12941"></a><span class="lineno">12941</span>&#160;        VMA_MAX(hAllocator-&gt;GetMemoryTypeMinAlignment(createInfo.memoryTypeIndex), createInfo.minAllocationAlignment),</div>
+<div class="line"><a name="l12942"></a><span class="lineno">12942</span>&#160;        createInfo.pMemoryAllocateNext),</div>
+<div class="line"><a name="l12943"></a><span class="lineno">12943</span>&#160;    m_Id(0),</div>
+<div class="line"><a name="l12944"></a><span class="lineno">12944</span>&#160;    m_Name(VMA_NULL)</div>
+<div class="line"><a name="l12945"></a><span class="lineno">12945</span>&#160;{</div>
+<div class="line"><a name="l12946"></a><span class="lineno">12946</span>&#160;}</div>
+<div class="line"><a name="l12947"></a><span class="lineno">12947</span>&#160; </div>
+<div class="line"><a name="l12948"></a><span class="lineno">12948</span>&#160;VmaPool_T::~VmaPool_T()</div>
+<div class="line"><a name="l12949"></a><span class="lineno">12949</span>&#160;{</div>
+<div class="line"><a name="l12950"></a><span class="lineno">12950</span>&#160;    VMA_ASSERT(m_PrevPool == VMA_NULL &amp;&amp; m_NextPool == VMA_NULL);</div>
+<div class="line"><a name="l12951"></a><span class="lineno">12951</span>&#160;}</div>
+<div class="line"><a name="l12952"></a><span class="lineno">12952</span>&#160; </div>
+<div class="line"><a name="l12953"></a><span class="lineno">12953</span>&#160;<span class="keywordtype">void</span> VmaPool_T::SetName(<span class="keyword">const</span> <span class="keywordtype">char</span>* pName)</div>
+<div class="line"><a name="l12954"></a><span class="lineno">12954</span>&#160;{</div>
+<div class="line"><a name="l12955"></a><span class="lineno">12955</span>&#160;    <span class="keyword">const</span> VkAllocationCallbacks* allocs = m_BlockVector.GetAllocator()-&gt;GetAllocationCallbacks();</div>
+<div class="line"><a name="l12956"></a><span class="lineno">12956</span>&#160;    VmaFreeString(allocs, m_Name);</div>
+<div class="line"><a name="l12957"></a><span class="lineno">12957</span>&#160; </div>
+<div class="line"><a name="l12958"></a><span class="lineno">12958</span>&#160;    <span class="keywordflow">if</span>(pName != VMA_NULL)</div>
+<div class="line"><a name="l12959"></a><span class="lineno">12959</span>&#160;    {</div>
+<div class="line"><a name="l12960"></a><span class="lineno">12960</span>&#160;        m_Name = VmaCreateStringCopy(allocs, pName);</div>
+<div class="line"><a name="l12961"></a><span class="lineno">12961</span>&#160;    }</div>
+<div class="line"><a name="l12962"></a><span class="lineno">12962</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l12963"></a><span class="lineno">12963</span>&#160;    {</div>
+<div class="line"><a name="l12964"></a><span class="lineno">12964</span>&#160;        m_Name = VMA_NULL;</div>
+<div class="line"><a name="l12965"></a><span class="lineno">12965</span>&#160;    }</div>
+<div class="line"><a name="l12966"></a><span class="lineno">12966</span>&#160;}</div>
+<div class="line"><a name="l12967"></a><span class="lineno">12967</span>&#160; </div>
+<div class="line"><a name="l12968"></a><span class="lineno">12968</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l12969"></a><span class="lineno">12969</span>&#160; </div>
+<div class="line"><a name="l12970"></a><span class="lineno">12970</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l12971"></a><span class="lineno">12971</span>&#160; </div>
+<div class="line"><a name="l12972"></a><span class="lineno">12972</span>&#160;VmaBlockVector::VmaBlockVector(</div>
+<div class="line"><a name="l12973"></a><span class="lineno">12973</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
+<div class="line"><a name="l12974"></a><span class="lineno">12974</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> hParentPool,</div>
+<div class="line"><a name="l12975"></a><span class="lineno">12975</span>&#160;    uint32_t memoryTypeIndex,</div>
+<div class="line"><a name="l12976"></a><span class="lineno">12976</span>&#160;    VkDeviceSize preferredBlockSize,</div>
+<div class="line"><a name="l12977"></a><span class="lineno">12977</span>&#160;    <span class="keywordtype">size_t</span> minBlockCount,</div>
+<div class="line"><a name="l12978"></a><span class="lineno">12978</span>&#160;    <span class="keywordtype">size_t</span> maxBlockCount,</div>
+<div class="line"><a name="l12979"></a><span class="lineno">12979</span>&#160;    VkDeviceSize bufferImageGranularity,</div>
+<div class="line"><a name="l12980"></a><span class="lineno">12980</span>&#160;    uint32_t frameInUseCount,</div>
+<div class="line"><a name="l12981"></a><span class="lineno">12981</span>&#160;    <span class="keywordtype">bool</span> explicitBlockSize,</div>
+<div class="line"><a name="l12982"></a><span class="lineno">12982</span>&#160;    uint32_t algorithm,</div>
+<div class="line"><a name="l12983"></a><span class="lineno">12983</span>&#160;    <span class="keywordtype">float</span> priority,</div>
+<div class="line"><a name="l12984"></a><span class="lineno">12984</span>&#160;    VkDeviceSize minAllocationAlignment,</div>
+<div class="line"><a name="l12985"></a><span class="lineno">12985</span>&#160;    <span class="keywordtype">void</span>* pMemoryAllocateNext) :</div>
+<div class="line"><a name="l12986"></a><span class="lineno">12986</span>&#160;    m_hAllocator(hAllocator),</div>
+<div class="line"><a name="l12987"></a><span class="lineno">12987</span>&#160;    m_hParentPool(hParentPool),</div>
+<div class="line"><a name="l12988"></a><span class="lineno">12988</span>&#160;    m_MemoryTypeIndex(memoryTypeIndex),</div>
+<div class="line"><a name="l12989"></a><span class="lineno">12989</span>&#160;    m_PreferredBlockSize(preferredBlockSize),</div>
+<div class="line"><a name="l12990"></a><span class="lineno">12990</span>&#160;    m_MinBlockCount(minBlockCount),</div>
+<div class="line"><a name="l12991"></a><span class="lineno">12991</span>&#160;    m_MaxBlockCount(maxBlockCount),</div>
+<div class="line"><a name="l12992"></a><span class="lineno">12992</span>&#160;    m_BufferImageGranularity(bufferImageGranularity),</div>
+<div class="line"><a name="l12993"></a><span class="lineno">12993</span>&#160;    m_FrameInUseCount(frameInUseCount),</div>
+<div class="line"><a name="l12994"></a><span class="lineno">12994</span>&#160;    m_ExplicitBlockSize(explicitBlockSize),</div>
+<div class="line"><a name="l12995"></a><span class="lineno">12995</span>&#160;    m_Algorithm(algorithm),</div>
+<div class="line"><a name="l12996"></a><span class="lineno">12996</span>&#160;    m_Priority(priority),</div>
+<div class="line"><a name="l12997"></a><span class="lineno">12997</span>&#160;    m_MinAllocationAlignment(minAllocationAlignment),</div>
+<div class="line"><a name="l12998"></a><span class="lineno">12998</span>&#160;    m_pMemoryAllocateNext(pMemoryAllocateNext),</div>
+<div class="line"><a name="l12999"></a><span class="lineno">12999</span>&#160;    m_HasEmptyBlock(false),</div>
+<div class="line"><a name="l13000"></a><span class="lineno">13000</span>&#160;    m_Blocks(VmaStlAllocator&lt;VmaDeviceMemoryBlock*&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
+<div class="line"><a name="l13001"></a><span class="lineno">13001</span>&#160;    m_NextBlockId(0)</div>
+<div class="line"><a name="l13002"></a><span class="lineno">13002</span>&#160;{</div>
+<div class="line"><a name="l13003"></a><span class="lineno">13003</span>&#160;}</div>
+<div class="line"><a name="l13004"></a><span class="lineno">13004</span>&#160; </div>
+<div class="line"><a name="l13005"></a><span class="lineno">13005</span>&#160;VmaBlockVector::~VmaBlockVector()</div>
+<div class="line"><a name="l13006"></a><span class="lineno">13006</span>&#160;{</div>
+<div class="line"><a name="l13007"></a><span class="lineno">13007</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_Blocks.size(); i--; )</div>
+<div class="line"><a name="l13008"></a><span class="lineno">13008</span>&#160;    {</div>
+<div class="line"><a name="l13009"></a><span class="lineno">13009</span>&#160;        m_Blocks[i]-&gt;Destroy(m_hAllocator);</div>
+<div class="line"><a name="l13010"></a><span class="lineno">13010</span>&#160;        vma_delete(m_hAllocator, m_Blocks[i]);</div>
+<div class="line"><a name="l13011"></a><span class="lineno">13011</span>&#160;    }</div>
+<div class="line"><a name="l13012"></a><span class="lineno">13012</span>&#160;}</div>
+<div class="line"><a name="l13013"></a><span class="lineno">13013</span>&#160; </div>
+<div class="line"><a name="l13014"></a><span class="lineno">13014</span>&#160;VkResult VmaBlockVector::CreateMinBlocks()</div>
+<div class="line"><a name="l13015"></a><span class="lineno">13015</span>&#160;{</div>
+<div class="line"><a name="l13016"></a><span class="lineno">13016</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; m_MinBlockCount; ++i)</div>
+<div class="line"><a name="l13017"></a><span class="lineno">13017</span>&#160;    {</div>
+<div class="line"><a name="l13018"></a><span class="lineno">13018</span>&#160;        VkResult res = CreateBlock(m_PreferredBlockSize, VMA_NULL);</div>
+<div class="line"><a name="l13019"></a><span class="lineno">13019</span>&#160;        <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l13020"></a><span class="lineno">13020</span>&#160;        {</div>
+<div class="line"><a name="l13021"></a><span class="lineno">13021</span>&#160;            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l13022"></a><span class="lineno">13022</span>&#160;        }</div>
+<div class="line"><a name="l13023"></a><span class="lineno">13023</span>&#160;    }</div>
+<div class="line"><a name="l13024"></a><span class="lineno">13024</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l13025"></a><span class="lineno">13025</span>&#160;}</div>
+<div class="line"><a name="l13026"></a><span class="lineno">13026</span>&#160; </div>
+<div class="line"><a name="l13027"></a><span class="lineno">13027</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::GetPoolStats(<a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>* pStats)</div>
+<div class="line"><a name="l13028"></a><span class="lineno">13028</span>&#160;{</div>
+<div class="line"><a name="l13029"></a><span class="lineno">13029</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l13030"></a><span class="lineno">13030</span>&#160; </div>
+<div class="line"><a name="l13031"></a><span class="lineno">13031</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_Blocks.size();</div>
+<div class="line"><a name="l13032"></a><span class="lineno">13032</span>&#160; </div>
+<div class="line"><a name="l13033"></a><span class="lineno">13033</span>&#160;    pStats-&gt;<a class="code" href="struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c">size</a> = 0;</div>
+<div class="line"><a name="l13034"></a><span class="lineno">13034</span>&#160;    pStats-&gt;<a class="code" href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">unusedSize</a> = 0;</div>
+<div class="line"><a name="l13035"></a><span class="lineno">13035</span>&#160;    pStats-&gt;<a class="code" href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">allocationCount</a> = 0;</div>
+<div class="line"><a name="l13036"></a><span class="lineno">13036</span>&#160;    pStats-&gt;<a class="code" href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">unusedRangeCount</a> = 0;</div>
+<div class="line"><a name="l13037"></a><span class="lineno">13037</span>&#160;    pStats-&gt;<a class="code" href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">unusedRangeSizeMax</a> = 0;</div>
+<div class="line"><a name="l13038"></a><span class="lineno">13038</span>&#160;    pStats-&gt;<a class="code" href="struct_vma_pool_stats.html#aa0b5cb45cef6f18571cefb03b9a230e7">blockCount</a> = blockCount;</div>
+<div class="line"><a name="l13039"></a><span class="lineno">13039</span>&#160; </div>
+<div class="line"><a name="l13040"></a><span class="lineno">13040</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; blockCount; ++blockIndex)</div>
+<div class="line"><a name="l13041"></a><span class="lineno">13041</span>&#160;    {</div>
+<div class="line"><a name="l13042"></a><span class="lineno">13042</span>&#160;        <span class="keyword">const</span> VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l13043"></a><span class="lineno">13043</span>&#160;        VMA_ASSERT(pBlock);</div>
+<div class="line"><a name="l13044"></a><span class="lineno">13044</span>&#160;        VMA_HEAVY_ASSERT(pBlock-&gt;Validate());</div>
+<div class="line"><a name="l13045"></a><span class="lineno">13045</span>&#160;        pBlock-&gt;m_pMetadata-&gt;AddPoolStats(*pStats);</div>
+<div class="line"><a name="l13046"></a><span class="lineno">13046</span>&#160;    }</div>
+<div class="line"><a name="l13047"></a><span class="lineno">13047</span>&#160;}</div>
+<div class="line"><a name="l13048"></a><span class="lineno">13048</span>&#160; </div>
+<div class="line"><a name="l13049"></a><span class="lineno">13049</span>&#160;<span class="keywordtype">bool</span> VmaBlockVector::IsEmpty()</div>
+<div class="line"><a name="l13050"></a><span class="lineno">13050</span>&#160;{</div>
+<div class="line"><a name="l13051"></a><span class="lineno">13051</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l13052"></a><span class="lineno">13052</span>&#160;    <span class="keywordflow">return</span> m_Blocks.empty();</div>
+<div class="line"><a name="l13053"></a><span class="lineno">13053</span>&#160;}</div>
+<div class="line"><a name="l13054"></a><span class="lineno">13054</span>&#160; </div>
+<div class="line"><a name="l13055"></a><span class="lineno">13055</span>&#160;<span class="keywordtype">bool</span> VmaBlockVector::IsCorruptionDetectionEnabled()<span class="keyword"> const</span></div>
+<div class="line"><a name="l13056"></a><span class="lineno">13056</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l13057"></a><span class="lineno">13057</span>&#160;    <span class="keyword">const</span> uint32_t requiredMemFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;</div>
+<div class="line"><a name="l13058"></a><span class="lineno">13058</span>&#160;    <span class="keywordflow">return</span> (VMA_DEBUG_DETECT_CORRUPTION != 0) &amp;&amp;</div>
+<div class="line"><a name="l13059"></a><span class="lineno">13059</span>&#160;        (VMA_DEBUG_MARGIN &gt; 0) &amp;&amp;</div>
+<div class="line"><a name="l13060"></a><span class="lineno">13060</span>&#160;        (m_Algorithm == 0 || m_Algorithm == <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a>) &amp;&amp;</div>
+<div class="line"><a name="l13061"></a><span class="lineno">13061</span>&#160;        (m_hAllocator-&gt;m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags &amp; requiredMemFlags) == requiredMemFlags;</div>
+<div class="line"><a name="l13062"></a><span class="lineno">13062</span>&#160;}</div>
+<div class="line"><a name="l13063"></a><span class="lineno">13063</span>&#160; </div>
+<div class="line"><a name="l13064"></a><span class="lineno">13064</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> uint32_t VMA_ALLOCATION_TRY_COUNT = 32;</div>
+<div class="line"><a name="l13065"></a><span class="lineno">13065</span>&#160; </div>
+<div class="line"><a name="l13066"></a><span class="lineno">13066</span>&#160;VkResult VmaBlockVector::Allocate(</div>
+<div class="line"><a name="l13067"></a><span class="lineno">13067</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l13068"></a><span class="lineno">13068</span>&#160;    VkDeviceSize size,</div>
+<div class="line"><a name="l13069"></a><span class="lineno">13069</span>&#160;    VkDeviceSize alignment,</div>
+<div class="line"><a name="l13070"></a><span class="lineno">13070</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
+<div class="line"><a name="l13071"></a><span class="lineno">13071</span>&#160;    VmaSuballocationType suballocType,</div>
+<div class="line"><a name="l13072"></a><span class="lineno">13072</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l13073"></a><span class="lineno">13073</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
+<div class="line"><a name="l13074"></a><span class="lineno">13074</span>&#160;{</div>
+<div class="line"><a name="l13075"></a><span class="lineno">13075</span>&#160;    <span class="keywordtype">size_t</span> allocIndex;</div>
+<div class="line"><a name="l13076"></a><span class="lineno">13076</span>&#160;    VkResult res = VK_SUCCESS;</div>
+<div class="line"><a name="l13077"></a><span class="lineno">13077</span>&#160; </div>
+<div class="line"><a name="l13078"></a><span class="lineno">13078</span>&#160;    alignment = VMA_MAX(alignment, m_MinAllocationAlignment);</div>
+<div class="line"><a name="l13079"></a><span class="lineno">13079</span>&#160; </div>
+<div class="line"><a name="l13080"></a><span class="lineno">13080</span>&#160;    <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</div>
+<div class="line"><a name="l13081"></a><span class="lineno">13081</span>&#160;    {</div>
+<div class="line"><a name="l13082"></a><span class="lineno">13082</span>&#160;        size = VmaAlignUp&lt;VkDeviceSize&gt;(size, <span class="keyword">sizeof</span>(VMA_CORRUPTION_DETECTION_MAGIC_VALUE));</div>
+<div class="line"><a name="l13083"></a><span class="lineno">13083</span>&#160;        alignment = VmaAlignUp&lt;VkDeviceSize&gt;(alignment, <span class="keyword">sizeof</span>(VMA_CORRUPTION_DETECTION_MAGIC_VALUE));</div>
+<div class="line"><a name="l13084"></a><span class="lineno">13084</span>&#160;    }</div>
+<div class="line"><a name="l13085"></a><span class="lineno">13085</span>&#160; </div>
+<div class="line"><a name="l13086"></a><span class="lineno">13086</span>&#160;    {</div>
+<div class="line"><a name="l13087"></a><span class="lineno">13087</span>&#160;        VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l13088"></a><span class="lineno">13088</span>&#160;        <span class="keywordflow">for</span>(allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</div>
+<div class="line"><a name="l13089"></a><span class="lineno">13089</span>&#160;        {</div>
+<div class="line"><a name="l13090"></a><span class="lineno">13090</span>&#160;            res = AllocatePage(</div>
+<div class="line"><a name="l13091"></a><span class="lineno">13091</span>&#160;                currentFrameIndex,</div>
+<div class="line"><a name="l13092"></a><span class="lineno">13092</span>&#160;                size,</div>
+<div class="line"><a name="l13093"></a><span class="lineno">13093</span>&#160;                alignment,</div>
+<div class="line"><a name="l13094"></a><span class="lineno">13094</span>&#160;                createInfo,</div>
+<div class="line"><a name="l13095"></a><span class="lineno">13095</span>&#160;                suballocType,</div>
+<div class="line"><a name="l13096"></a><span class="lineno">13096</span>&#160;                pAllocations + allocIndex);</div>
+<div class="line"><a name="l13097"></a><span class="lineno">13097</span>&#160;            <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l13098"></a><span class="lineno">13098</span>&#160;            {</div>
+<div class="line"><a name="l13099"></a><span class="lineno">13099</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l13100"></a><span class="lineno">13100</span>&#160;            }</div>
+<div class="line"><a name="l13101"></a><span class="lineno">13101</span>&#160;        }</div>
+<div class="line"><a name="l13102"></a><span class="lineno">13102</span>&#160;    }</div>
+<div class="line"><a name="l13103"></a><span class="lineno">13103</span>&#160; </div>
+<div class="line"><a name="l13104"></a><span class="lineno">13104</span>&#160;    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l13105"></a><span class="lineno">13105</span>&#160;    {</div>
+<div class="line"><a name="l13106"></a><span class="lineno">13106</span>&#160;        <span class="comment">// Free all already created allocations.</span></div>
+<div class="line"><a name="l13107"></a><span class="lineno">13107</span>&#160;        <span class="keyword">const</span> uint32_t heapIndex = m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);</div>
+<div class="line"><a name="l13108"></a><span class="lineno">13108</span>&#160;        <span class="keywordflow">while</span>(allocIndex--)</div>
+<div class="line"><a name="l13109"></a><span class="lineno">13109</span>&#160;        {</div>
+<div class="line"><a name="l13110"></a><span class="lineno">13110</span>&#160;            VmaAllocation_T* <span class="keyword">const</span> alloc = pAllocations[allocIndex];</div>
+<div class="line"><a name="l13111"></a><span class="lineno">13111</span>&#160;            <span class="keyword">const</span> VkDeviceSize allocSize = alloc-&gt;GetSize();</div>
+<div class="line"><a name="l13112"></a><span class="lineno">13112</span>&#160;            Free(alloc);</div>
+<div class="line"><a name="l13113"></a><span class="lineno">13113</span>&#160;            m_hAllocator-&gt;m_Budget.RemoveAllocation(heapIndex, allocSize);</div>
+<div class="line"><a name="l13114"></a><span class="lineno">13114</span>&#160;        }</div>
+<div class="line"><a name="l13115"></a><span class="lineno">13115</span>&#160;        memset(pAllocations, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a>) * allocationCount);</div>
+<div class="line"><a name="l13116"></a><span class="lineno">13116</span>&#160;    }</div>
+<div class="line"><a name="l13117"></a><span class="lineno">13117</span>&#160; </div>
+<div class="line"><a name="l13118"></a><span class="lineno">13118</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l13119"></a><span class="lineno">13119</span>&#160;}</div>
+<div class="line"><a name="l13120"></a><span class="lineno">13120</span>&#160; </div>
+<div class="line"><a name="l13121"></a><span class="lineno">13121</span>&#160;VkResult VmaBlockVector::AllocatePage(</div>
+<div class="line"><a name="l13122"></a><span class="lineno">13122</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l13123"></a><span class="lineno">13123</span>&#160;    VkDeviceSize size,</div>
+<div class="line"><a name="l13124"></a><span class="lineno">13124</span>&#160;    VkDeviceSize alignment,</div>
+<div class="line"><a name="l13125"></a><span class="lineno">13125</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
+<div class="line"><a name="l13126"></a><span class="lineno">13126</span>&#160;    VmaSuballocationType suballocType,</div>
+<div class="line"><a name="l13127"></a><span class="lineno">13127</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
+<div class="line"><a name="l13128"></a><span class="lineno">13128</span>&#160;{</div>
+<div class="line"><a name="l13129"></a><span class="lineno">13129</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> isUpperAddress = (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a>) != 0;</div>
+<div class="line"><a name="l13130"></a><span class="lineno">13130</span>&#160;    <span class="keywordtype">bool</span> canMakeOtherLost = (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a>) != 0;</div>
+<div class="line"><a name="l13131"></a><span class="lineno">13131</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> mapped = (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0;</div>
+<div class="line"><a name="l13132"></a><span class="lineno">13132</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> isUserDataString = (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a>) != 0;</div>
+<div class="line"><a name="l13133"></a><span class="lineno">13133</span>&#160; </div>
+<div class="line"><a name="l13134"></a><span class="lineno">13134</span>&#160;    VkDeviceSize freeMemory;</div>
+<div class="line"><a name="l13135"></a><span class="lineno">13135</span>&#160;    {</div>
+<div class="line"><a name="l13136"></a><span class="lineno">13136</span>&#160;        <span class="keyword">const</span> uint32_t heapIndex = m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);</div>
+<div class="line"><a name="l13137"></a><span class="lineno">13137</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> heapBudget = {};</div>
+<div class="line"><a name="l13138"></a><span class="lineno">13138</span>&#160;        m_hAllocator-&gt;GetBudget(&amp;heapBudget, heapIndex, 1);</div>
+<div class="line"><a name="l13139"></a><span class="lineno">13139</span>&#160;        freeMemory = (heapBudget.<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a> &lt; heapBudget.<a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a>) ? (heapBudget.<a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a> - heapBudget.<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a>) : 0;</div>
+<div class="line"><a name="l13140"></a><span class="lineno">13140</span>&#160;    }</div>
+<div class="line"><a name="l13141"></a><span class="lineno">13141</span>&#160; </div>
+<div class="line"><a name="l13142"></a><span class="lineno">13142</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> canFallbackToDedicated = !IsCustomPool();</div>
+<div class="line"><a name="l13143"></a><span class="lineno">13143</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> canCreateNewBlock =</div>
+<div class="line"><a name="l13144"></a><span class="lineno">13144</span>&#160;        ((createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a>) == 0) &amp;&amp;</div>
+<div class="line"><a name="l13145"></a><span class="lineno">13145</span>&#160;        (m_Blocks.size() &lt; m_MaxBlockCount) &amp;&amp;</div>
+<div class="line"><a name="l13146"></a><span class="lineno">13146</span>&#160;        (freeMemory &gt;= size || !canFallbackToDedicated);</div>
+<div class="line"><a name="l13147"></a><span class="lineno">13147</span>&#160;    uint32_t strategy = createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e">VMA_ALLOCATION_CREATE_STRATEGY_MASK</a>;</div>
+<div class="line"><a name="l13148"></a><span class="lineno">13148</span>&#160; </div>
+<div class="line"><a name="l13149"></a><span class="lineno">13149</span>&#160;    <span class="comment">// If linearAlgorithm is used, canMakeOtherLost is available only when used as ring buffer.</span></div>
+<div class="line"><a name="l13150"></a><span class="lineno">13150</span>&#160;    <span class="comment">// Which in turn is available only when maxBlockCount = 1.</span></div>
+<div class="line"><a name="l13151"></a><span class="lineno">13151</span>&#160;    <span class="keywordflow">if</span>(m_Algorithm == <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> &amp;&amp; m_MaxBlockCount &gt; 1)</div>
+<div class="line"><a name="l13152"></a><span class="lineno">13152</span>&#160;    {</div>
+<div class="line"><a name="l13153"></a><span class="lineno">13153</span>&#160;        canMakeOtherLost = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l13154"></a><span class="lineno">13154</span>&#160;    }</div>
+<div class="line"><a name="l13155"></a><span class="lineno">13155</span>&#160; </div>
+<div class="line"><a name="l13156"></a><span class="lineno">13156</span>&#160;    <span class="comment">// Upper address can only be used with linear allocator and within single memory block.</span></div>
+<div class="line"><a name="l13157"></a><span class="lineno">13157</span>&#160;    <span class="keywordflow">if</span>(isUpperAddress &amp;&amp;</div>
+<div class="line"><a name="l13158"></a><span class="lineno">13158</span>&#160;        (m_Algorithm != <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> || m_MaxBlockCount &gt; 1))</div>
+<div class="line"><a name="l13159"></a><span class="lineno">13159</span>&#160;    {</div>
+<div class="line"><a name="l13160"></a><span class="lineno">13160</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</div>
+<div class="line"><a name="l13161"></a><span class="lineno">13161</span>&#160;    }</div>
+<div class="line"><a name="l13162"></a><span class="lineno">13162</span>&#160; </div>
+<div class="line"><a name="l13163"></a><span class="lineno">13163</span>&#160;    <span class="comment">// Validate strategy.</span></div>
+<div class="line"><a name="l13164"></a><span class="lineno">13164</span>&#160;    <span class="keywordflow">switch</span>(strategy)</div>
+<div class="line"><a name="l13165"></a><span class="lineno">13165</span>&#160;    {</div>
+<div class="line"><a name="l13166"></a><span class="lineno">13166</span>&#160;    <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l13167"></a><span class="lineno">13167</span>&#160;        strategy = <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a>;</div>
+<div class="line"><a name="l13168"></a><span class="lineno">13168</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l13169"></a><span class="lineno">13169</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a>:</div>
+<div class="line"><a name="l13170"></a><span class="lineno">13170</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</a>:</div>
+<div class="line"><a name="l13171"></a><span class="lineno">13171</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a>:</div>
+<div class="line"><a name="l13172"></a><span class="lineno">13172</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l13173"></a><span class="lineno">13173</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l13174"></a><span class="lineno">13174</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</div>
+<div class="line"><a name="l13175"></a><span class="lineno">13175</span>&#160;    }</div>
+<div class="line"><a name="l13176"></a><span class="lineno">13176</span>&#160; </div>
+<div class="line"><a name="l13177"></a><span class="lineno">13177</span>&#160;    <span class="comment">// Early reject: requested allocation size is larger that maximum block size for this block vector.</span></div>
+<div class="line"><a name="l13178"></a><span class="lineno">13178</span>&#160;    <span class="keywordflow">if</span>(size + 2 * VMA_DEBUG_MARGIN &gt; m_PreferredBlockSize)</div>
+<div class="line"><a name="l13179"></a><span class="lineno">13179</span>&#160;    {</div>
+<div class="line"><a name="l13180"></a><span class="lineno">13180</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l13181"></a><span class="lineno">13181</span>&#160;    }</div>
+<div class="line"><a name="l13182"></a><span class="lineno">13182</span>&#160; </div>
+<div class="line"><a name="l13183"></a><span class="lineno">13183</span>&#160;    <span class="comment">/*</span></div>
+<div class="line"><a name="l13184"></a><span class="lineno">13184</span>&#160;<span class="comment">    Under certain condition, this whole section can be skipped for optimization, so</span></div>
+<div class="line"><a name="l13185"></a><span class="lineno">13185</span>&#160;<span class="comment">    we move on directly to trying to allocate with canMakeOtherLost. That&#39;s the case</span></div>
+<div class="line"><a name="l13186"></a><span class="lineno">13186</span>&#160;<span class="comment">    e.g. for custom pools with linear algorithm.</span></div>
+<div class="line"><a name="l13187"></a><span class="lineno">13187</span>&#160;<span class="comment">    */</span></div>
+<div class="line"><a name="l13188"></a><span class="lineno">13188</span>&#160;    <span class="keywordflow">if</span>(!canMakeOtherLost || canCreateNewBlock)</div>
+<div class="line"><a name="l13189"></a><span class="lineno">13189</span>&#160;    {</div>
+<div class="line"><a name="l13190"></a><span class="lineno">13190</span>&#160;        <span class="comment">// 1. Search existing allocations. Try to allocate without making other allocations lost.</span></div>
+<div class="line"><a name="l13191"></a><span class="lineno">13191</span>&#160;        <a class="code" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a> allocFlagsCopy = createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>;</div>
+<div class="line"><a name="l13192"></a><span class="lineno">13192</span>&#160;        allocFlagsCopy &amp;= ~<a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a>;</div>
+<div class="line"><a name="l13193"></a><span class="lineno">13193</span>&#160; </div>
+<div class="line"><a name="l13194"></a><span class="lineno">13194</span>&#160;        <span class="keywordflow">if</span>(m_Algorithm == <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a>)</div>
+<div class="line"><a name="l13195"></a><span class="lineno">13195</span>&#160;        {</div>
+<div class="line"><a name="l13196"></a><span class="lineno">13196</span>&#160;            <span class="comment">// Use only last block.</span></div>
+<div class="line"><a name="l13197"></a><span class="lineno">13197</span>&#160;            <span class="keywordflow">if</span>(!m_Blocks.empty())</div>
+<div class="line"><a name="l13198"></a><span class="lineno">13198</span>&#160;            {</div>
+<div class="line"><a name="l13199"></a><span class="lineno">13199</span>&#160;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks.back();</div>
+<div class="line"><a name="l13200"></a><span class="lineno">13200</span>&#160;                VMA_ASSERT(pCurrBlock);</div>
+<div class="line"><a name="l13201"></a><span class="lineno">13201</span>&#160;                VkResult res = AllocateFromBlock(</div>
+<div class="line"><a name="l13202"></a><span class="lineno">13202</span>&#160;                    pCurrBlock,</div>
+<div class="line"><a name="l13203"></a><span class="lineno">13203</span>&#160;                    currentFrameIndex,</div>
+<div class="line"><a name="l13204"></a><span class="lineno">13204</span>&#160;                    size,</div>
+<div class="line"><a name="l13205"></a><span class="lineno">13205</span>&#160;                    alignment,</div>
+<div class="line"><a name="l13206"></a><span class="lineno">13206</span>&#160;                    allocFlagsCopy,</div>
+<div class="line"><a name="l13207"></a><span class="lineno">13207</span>&#160;                    createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
+<div class="line"><a name="l13208"></a><span class="lineno">13208</span>&#160;                    suballocType,</div>
+<div class="line"><a name="l13209"></a><span class="lineno">13209</span>&#160;                    strategy,</div>
+<div class="line"><a name="l13210"></a><span class="lineno">13210</span>&#160;                    pAllocation);</div>
+<div class="line"><a name="l13211"></a><span class="lineno">13211</span>&#160;                <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l13212"></a><span class="lineno">13212</span>&#160;                {</div>
+<div class="line"><a name="l13213"></a><span class="lineno">13213</span>&#160;                    VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Returned from last block #%u&quot;</span>, pCurrBlock-&gt;GetId());</div>
+<div class="line"><a name="l13214"></a><span class="lineno">13214</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l13215"></a><span class="lineno">13215</span>&#160;                }</div>
+<div class="line"><a name="l13216"></a><span class="lineno">13216</span>&#160;            }</div>
+<div class="line"><a name="l13217"></a><span class="lineno">13217</span>&#160;        }</div>
+<div class="line"><a name="l13218"></a><span class="lineno">13218</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l13219"></a><span class="lineno">13219</span>&#160;        {</div>
+<div class="line"><a name="l13220"></a><span class="lineno">13220</span>&#160;            <span class="keywordflow">if</span>(strategy == <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a>)</div>
+<div class="line"><a name="l13221"></a><span class="lineno">13221</span>&#160;            {</div>
+<div class="line"><a name="l13222"></a><span class="lineno">13222</span>&#160;                <span class="comment">// Forward order in m_Blocks - prefer blocks with smallest amount of free space.</span></div>
+<div class="line"><a name="l13223"></a><span class="lineno">13223</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex )</div>
+<div class="line"><a name="l13224"></a><span class="lineno">13224</span>&#160;                {</div>
+<div class="line"><a name="l13225"></a><span class="lineno">13225</span>&#160;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l13226"></a><span class="lineno">13226</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
+<div class="line"><a name="l13227"></a><span class="lineno">13227</span>&#160;                    VkResult res = AllocateFromBlock(</div>
+<div class="line"><a name="l13228"></a><span class="lineno">13228</span>&#160;                        pCurrBlock,</div>
+<div class="line"><a name="l13229"></a><span class="lineno">13229</span>&#160;                        currentFrameIndex,</div>
+<div class="line"><a name="l13230"></a><span class="lineno">13230</span>&#160;                        size,</div>
+<div class="line"><a name="l13231"></a><span class="lineno">13231</span>&#160;                        alignment,</div>
+<div class="line"><a name="l13232"></a><span class="lineno">13232</span>&#160;                        allocFlagsCopy,</div>
+<div class="line"><a name="l13233"></a><span class="lineno">13233</span>&#160;                        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
+<div class="line"><a name="l13234"></a><span class="lineno">13234</span>&#160;                        suballocType,</div>
+<div class="line"><a name="l13235"></a><span class="lineno">13235</span>&#160;                        strategy,</div>
+<div class="line"><a name="l13236"></a><span class="lineno">13236</span>&#160;                        pAllocation);</div>
+<div class="line"><a name="l13237"></a><span class="lineno">13237</span>&#160;                    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l13238"></a><span class="lineno">13238</span>&#160;                    {</div>
+<div class="line"><a name="l13239"></a><span class="lineno">13239</span>&#160;                        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Returned from existing block #%u&quot;</span>, pCurrBlock-&gt;GetId());</div>
+<div class="line"><a name="l13240"></a><span class="lineno">13240</span>&#160;                        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l13241"></a><span class="lineno">13241</span>&#160;                    }</div>
+<div class="line"><a name="l13242"></a><span class="lineno">13242</span>&#160;                }</div>
+<div class="line"><a name="l13243"></a><span class="lineno">13243</span>&#160;            }</div>
+<div class="line"><a name="l13244"></a><span class="lineno">13244</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// WORST_FIT, FIRST_FIT</span></div>
+<div class="line"><a name="l13245"></a><span class="lineno">13245</span>&#160;            {</div>
+<div class="line"><a name="l13246"></a><span class="lineno">13246</span>&#160;                <span class="comment">// Backward order in m_Blocks - prefer blocks with largest amount of free space.</span></div>
+<div class="line"><a name="l13247"></a><span class="lineno">13247</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = m_Blocks.size(); blockIndex--; )</div>
+<div class="line"><a name="l13248"></a><span class="lineno">13248</span>&#160;                {</div>
+<div class="line"><a name="l13249"></a><span class="lineno">13249</span>&#160;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l13250"></a><span class="lineno">13250</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
+<div class="line"><a name="l13251"></a><span class="lineno">13251</span>&#160;                    VkResult res = AllocateFromBlock(</div>
+<div class="line"><a name="l13252"></a><span class="lineno">13252</span>&#160;                        pCurrBlock,</div>
+<div class="line"><a name="l13253"></a><span class="lineno">13253</span>&#160;                        currentFrameIndex,</div>
+<div class="line"><a name="l13254"></a><span class="lineno">13254</span>&#160;                        size,</div>
+<div class="line"><a name="l13255"></a><span class="lineno">13255</span>&#160;                        alignment,</div>
+<div class="line"><a name="l13256"></a><span class="lineno">13256</span>&#160;                        allocFlagsCopy,</div>
+<div class="line"><a name="l13257"></a><span class="lineno">13257</span>&#160;                        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
+<div class="line"><a name="l13258"></a><span class="lineno">13258</span>&#160;                        suballocType,</div>
+<div class="line"><a name="l13259"></a><span class="lineno">13259</span>&#160;                        strategy,</div>
+<div class="line"><a name="l13260"></a><span class="lineno">13260</span>&#160;                        pAllocation);</div>
+<div class="line"><a name="l13261"></a><span class="lineno">13261</span>&#160;                    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l13262"></a><span class="lineno">13262</span>&#160;                    {</div>
+<div class="line"><a name="l13263"></a><span class="lineno">13263</span>&#160;                        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Returned from existing block #%u&quot;</span>, pCurrBlock-&gt;GetId());</div>
+<div class="line"><a name="l13264"></a><span class="lineno">13264</span>&#160;                        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l13265"></a><span class="lineno">13265</span>&#160;                    }</div>
+<div class="line"><a name="l13266"></a><span class="lineno">13266</span>&#160;                }</div>
+<div class="line"><a name="l13267"></a><span class="lineno">13267</span>&#160;            }</div>
+<div class="line"><a name="l13268"></a><span class="lineno">13268</span>&#160;        }</div>
+<div class="line"><a name="l13269"></a><span class="lineno">13269</span>&#160; </div>
+<div class="line"><a name="l13270"></a><span class="lineno">13270</span>&#160;        <span class="comment">// 2. Try to create new block.</span></div>
+<div class="line"><a name="l13271"></a><span class="lineno">13271</span>&#160;        <span class="keywordflow">if</span>(canCreateNewBlock)</div>
+<div class="line"><a name="l13272"></a><span class="lineno">13272</span>&#160;        {</div>
+<div class="line"><a name="l13273"></a><span class="lineno">13273</span>&#160;            <span class="comment">// Calculate optimal size for new block.</span></div>
+<div class="line"><a name="l13274"></a><span class="lineno">13274</span>&#160;            VkDeviceSize newBlockSize = m_PreferredBlockSize;</div>
+<div class="line"><a name="l13275"></a><span class="lineno">13275</span>&#160;            uint32_t newBlockSizeShift = 0;</div>
+<div class="line"><a name="l13276"></a><span class="lineno">13276</span>&#160;            <span class="keyword">const</span> uint32_t NEW_BLOCK_SIZE_SHIFT_MAX = 3;</div>
+<div class="line"><a name="l13277"></a><span class="lineno">13277</span>&#160; </div>
+<div class="line"><a name="l13278"></a><span class="lineno">13278</span>&#160;            <span class="keywordflow">if</span>(!m_ExplicitBlockSize)</div>
+<div class="line"><a name="l13279"></a><span class="lineno">13279</span>&#160;            {</div>
+<div class="line"><a name="l13280"></a><span class="lineno">13280</span>&#160;                <span class="comment">// Allocate 1/8, 1/4, 1/2 as first blocks.</span></div>
+<div class="line"><a name="l13281"></a><span class="lineno">13281</span>&#160;                <span class="keyword">const</span> VkDeviceSize maxExistingBlockSize = CalcMaxBlockSize();</div>
+<div class="line"><a name="l13282"></a><span class="lineno">13282</span>&#160;                <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; NEW_BLOCK_SIZE_SHIFT_MAX; ++i)</div>
+<div class="line"><a name="l13283"></a><span class="lineno">13283</span>&#160;                {</div>
+<div class="line"><a name="l13284"></a><span class="lineno">13284</span>&#160;                    <span class="keyword">const</span> VkDeviceSize smallerNewBlockSize = newBlockSize / 2;</div>
+<div class="line"><a name="l13285"></a><span class="lineno">13285</span>&#160;                    <span class="keywordflow">if</span>(smallerNewBlockSize &gt; maxExistingBlockSize &amp;&amp; smallerNewBlockSize &gt;= size * 2)</div>
+<div class="line"><a name="l13286"></a><span class="lineno">13286</span>&#160;                    {</div>
+<div class="line"><a name="l13287"></a><span class="lineno">13287</span>&#160;                        newBlockSize = smallerNewBlockSize;</div>
+<div class="line"><a name="l13288"></a><span class="lineno">13288</span>&#160;                        ++newBlockSizeShift;</div>
+<div class="line"><a name="l13289"></a><span class="lineno">13289</span>&#160;                    }</div>
+<div class="line"><a name="l13290"></a><span class="lineno">13290</span>&#160;                    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l13291"></a><span class="lineno">13291</span>&#160;                    {</div>
+<div class="line"><a name="l13292"></a><span class="lineno">13292</span>&#160;                        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l13293"></a><span class="lineno">13293</span>&#160;                    }</div>
+<div class="line"><a name="l13294"></a><span class="lineno">13294</span>&#160;                }</div>
+<div class="line"><a name="l13295"></a><span class="lineno">13295</span>&#160;            }</div>
+<div class="line"><a name="l13296"></a><span class="lineno">13296</span>&#160; </div>
+<div class="line"><a name="l13297"></a><span class="lineno">13297</span>&#160;            <span class="keywordtype">size_t</span> newBlockIndex = 0;</div>
+<div class="line"><a name="l13298"></a><span class="lineno">13298</span>&#160;            VkResult res = (newBlockSize &lt;= freeMemory || !canFallbackToDedicated) ?</div>
+<div class="line"><a name="l13299"></a><span class="lineno">13299</span>&#160;                CreateBlock(newBlockSize, &amp;newBlockIndex) : VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l13300"></a><span class="lineno">13300</span>&#160;            <span class="comment">// Allocation of this size failed? Try 1/2, 1/4, 1/8 of m_PreferredBlockSize.</span></div>
+<div class="line"><a name="l13301"></a><span class="lineno">13301</span>&#160;            <span class="keywordflow">if</span>(!m_ExplicitBlockSize)</div>
+<div class="line"><a name="l13302"></a><span class="lineno">13302</span>&#160;            {</div>
+<div class="line"><a name="l13303"></a><span class="lineno">13303</span>&#160;                <span class="keywordflow">while</span>(res &lt; 0 &amp;&amp; newBlockSizeShift &lt; NEW_BLOCK_SIZE_SHIFT_MAX)</div>
+<div class="line"><a name="l13304"></a><span class="lineno">13304</span>&#160;                {</div>
+<div class="line"><a name="l13305"></a><span class="lineno">13305</span>&#160;                    <span class="keyword">const</span> VkDeviceSize smallerNewBlockSize = newBlockSize / 2;</div>
+<div class="line"><a name="l13306"></a><span class="lineno">13306</span>&#160;                    <span class="keywordflow">if</span>(smallerNewBlockSize &gt;= size)</div>
+<div class="line"><a name="l13307"></a><span class="lineno">13307</span>&#160;                    {</div>
+<div class="line"><a name="l13308"></a><span class="lineno">13308</span>&#160;                        newBlockSize = smallerNewBlockSize;</div>
+<div class="line"><a name="l13309"></a><span class="lineno">13309</span>&#160;                        ++newBlockSizeShift;</div>
+<div class="line"><a name="l13310"></a><span class="lineno">13310</span>&#160;                        res = (newBlockSize &lt;= freeMemory || !canFallbackToDedicated) ?</div>
+<div class="line"><a name="l13311"></a><span class="lineno">13311</span>&#160;                            CreateBlock(newBlockSize, &amp;newBlockIndex) : VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l13312"></a><span class="lineno">13312</span>&#160;                    }</div>
+<div class="line"><a name="l13313"></a><span class="lineno">13313</span>&#160;                    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l13314"></a><span class="lineno">13314</span>&#160;                    {</div>
+<div class="line"><a name="l13315"></a><span class="lineno">13315</span>&#160;                        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l13316"></a><span class="lineno">13316</span>&#160;                    }</div>
+<div class="line"><a name="l13317"></a><span class="lineno">13317</span>&#160;                }</div>
+<div class="line"><a name="l13318"></a><span class="lineno">13318</span>&#160;            }</div>
+<div class="line"><a name="l13319"></a><span class="lineno">13319</span>&#160; </div>
+<div class="line"><a name="l13320"></a><span class="lineno">13320</span>&#160;            <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l13321"></a><span class="lineno">13321</span>&#160;            {</div>
+<div class="line"><a name="l13322"></a><span class="lineno">13322</span>&#160;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[newBlockIndex];</div>
+<div class="line"><a name="l13323"></a><span class="lineno">13323</span>&#160;                VMA_ASSERT(pBlock-&gt;m_pMetadata-&gt;GetSize() &gt;= size);</div>
+<div class="line"><a name="l13324"></a><span class="lineno">13324</span>&#160; </div>
+<div class="line"><a name="l13325"></a><span class="lineno">13325</span>&#160;                res = AllocateFromBlock(</div>
+<div class="line"><a name="l13326"></a><span class="lineno">13326</span>&#160;                    pBlock,</div>
+<div class="line"><a name="l13327"></a><span class="lineno">13327</span>&#160;                    currentFrameIndex,</div>
+<div class="line"><a name="l13328"></a><span class="lineno">13328</span>&#160;                    size,</div>
+<div class="line"><a name="l13329"></a><span class="lineno">13329</span>&#160;                    alignment,</div>
+<div class="line"><a name="l13330"></a><span class="lineno">13330</span>&#160;                    allocFlagsCopy,</div>
+<div class="line"><a name="l13331"></a><span class="lineno">13331</span>&#160;                    createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
+<div class="line"><a name="l13332"></a><span class="lineno">13332</span>&#160;                    suballocType,</div>
+<div class="line"><a name="l13333"></a><span class="lineno">13333</span>&#160;                    strategy,</div>
+<div class="line"><a name="l13334"></a><span class="lineno">13334</span>&#160;                    pAllocation);</div>
+<div class="line"><a name="l13335"></a><span class="lineno">13335</span>&#160;                <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l13336"></a><span class="lineno">13336</span>&#160;                {</div>
+<div class="line"><a name="l13337"></a><span class="lineno">13337</span>&#160;                    VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Created new block #%u Size=%llu&quot;</span>, pBlock-&gt;GetId(), newBlockSize);</div>
+<div class="line"><a name="l13338"></a><span class="lineno">13338</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l13339"></a><span class="lineno">13339</span>&#160;                }</div>
+<div class="line"><a name="l13340"></a><span class="lineno">13340</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l13341"></a><span class="lineno">13341</span>&#160;                {</div>
+<div class="line"><a name="l13342"></a><span class="lineno">13342</span>&#160;                    <span class="comment">// Allocation from new block failed, possibly due to VMA_DEBUG_MARGIN or alignment.</span></div>
+<div class="line"><a name="l13343"></a><span class="lineno">13343</span>&#160;                    <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l13344"></a><span class="lineno">13344</span>&#160;                }</div>
+<div class="line"><a name="l13345"></a><span class="lineno">13345</span>&#160;            }</div>
+<div class="line"><a name="l13346"></a><span class="lineno">13346</span>&#160;        }</div>
+<div class="line"><a name="l13347"></a><span class="lineno">13347</span>&#160;    }</div>
+<div class="line"><a name="l13348"></a><span class="lineno">13348</span>&#160; </div>
+<div class="line"><a name="l13349"></a><span class="lineno">13349</span>&#160;    <span class="comment">// 3. Try to allocate from existing blocks with making other allocations lost.</span></div>
+<div class="line"><a name="l13350"></a><span class="lineno">13350</span>&#160;    <span class="keywordflow">if</span>(canMakeOtherLost)</div>
+<div class="line"><a name="l13351"></a><span class="lineno">13351</span>&#160;    {</div>
+<div class="line"><a name="l13352"></a><span class="lineno">13352</span>&#160;        uint32_t tryIndex = 0;</div>
+<div class="line"><a name="l13353"></a><span class="lineno">13353</span>&#160;        <span class="keywordflow">for</span>(; tryIndex &lt; VMA_ALLOCATION_TRY_COUNT; ++tryIndex)</div>
+<div class="line"><a name="l13354"></a><span class="lineno">13354</span>&#160;        {</div>
+<div class="line"><a name="l13355"></a><span class="lineno">13355</span>&#160;            VmaDeviceMemoryBlock* pBestRequestBlock = VMA_NULL;</div>
+<div class="line"><a name="l13356"></a><span class="lineno">13356</span>&#160;            VmaAllocationRequest bestRequest = {};</div>
+<div class="line"><a name="l13357"></a><span class="lineno">13357</span>&#160;            VkDeviceSize bestRequestCost = VK_WHOLE_SIZE;</div>
+<div class="line"><a name="l13358"></a><span class="lineno">13358</span>&#160; </div>
+<div class="line"><a name="l13359"></a><span class="lineno">13359</span>&#160;            <span class="comment">// 1. Search existing allocations.</span></div>
+<div class="line"><a name="l13360"></a><span class="lineno">13360</span>&#160;            <span class="keywordflow">if</span>(strategy == <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a>)</div>
+<div class="line"><a name="l13361"></a><span class="lineno">13361</span>&#160;            {</div>
+<div class="line"><a name="l13362"></a><span class="lineno">13362</span>&#160;                <span class="comment">// Forward order in m_Blocks - prefer blocks with smallest amount of free space.</span></div>
+<div class="line"><a name="l13363"></a><span class="lineno">13363</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex )</div>
+<div class="line"><a name="l13364"></a><span class="lineno">13364</span>&#160;                {</div>
+<div class="line"><a name="l13365"></a><span class="lineno">13365</span>&#160;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l13366"></a><span class="lineno">13366</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
+<div class="line"><a name="l13367"></a><span class="lineno">13367</span>&#160;                    VmaAllocationRequest currRequest = {};</div>
+<div class="line"><a name="l13368"></a><span class="lineno">13368</span>&#160;                    <span class="keywordflow">if</span>(pCurrBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
+<div class="line"><a name="l13369"></a><span class="lineno">13369</span>&#160;                        currentFrameIndex,</div>
+<div class="line"><a name="l13370"></a><span class="lineno">13370</span>&#160;                        m_FrameInUseCount,</div>
+<div class="line"><a name="l13371"></a><span class="lineno">13371</span>&#160;                        m_BufferImageGranularity,</div>
+<div class="line"><a name="l13372"></a><span class="lineno">13372</span>&#160;                        size,</div>
+<div class="line"><a name="l13373"></a><span class="lineno">13373</span>&#160;                        alignment,</div>
+<div class="line"><a name="l13374"></a><span class="lineno">13374</span>&#160;                        (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a>) != 0,</div>
+<div class="line"><a name="l13375"></a><span class="lineno">13375</span>&#160;                        suballocType,</div>
+<div class="line"><a name="l13376"></a><span class="lineno">13376</span>&#160;                        canMakeOtherLost,</div>
+<div class="line"><a name="l13377"></a><span class="lineno">13377</span>&#160;                        strategy,</div>
+<div class="line"><a name="l13378"></a><span class="lineno">13378</span>&#160;                        &amp;currRequest))</div>
+<div class="line"><a name="l13379"></a><span class="lineno">13379</span>&#160;                    {</div>
+<div class="line"><a name="l13380"></a><span class="lineno">13380</span>&#160;                        <span class="keyword">const</span> VkDeviceSize currRequestCost = currRequest.CalcCost();</div>
+<div class="line"><a name="l13381"></a><span class="lineno">13381</span>&#160;                        <span class="keywordflow">if</span>(pBestRequestBlock == VMA_NULL ||</div>
+<div class="line"><a name="l13382"></a><span class="lineno">13382</span>&#160;                            currRequestCost &lt; bestRequestCost)</div>
+<div class="line"><a name="l13383"></a><span class="lineno">13383</span>&#160;                        {</div>
+<div class="line"><a name="l13384"></a><span class="lineno">13384</span>&#160;                            pBestRequestBlock = pCurrBlock;</div>
+<div class="line"><a name="l13385"></a><span class="lineno">13385</span>&#160;                            bestRequest = currRequest;</div>
+<div class="line"><a name="l13386"></a><span class="lineno">13386</span>&#160;                            bestRequestCost = currRequestCost;</div>
+<div class="line"><a name="l13387"></a><span class="lineno">13387</span>&#160; </div>
+<div class="line"><a name="l13388"></a><span class="lineno">13388</span>&#160;                            <span class="keywordflow">if</span>(bestRequestCost == 0)</div>
+<div class="line"><a name="l13389"></a><span class="lineno">13389</span>&#160;                            {</div>
+<div class="line"><a name="l13390"></a><span class="lineno">13390</span>&#160;                                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l13391"></a><span class="lineno">13391</span>&#160;                            }</div>
+<div class="line"><a name="l13392"></a><span class="lineno">13392</span>&#160;                        }</div>
+<div class="line"><a name="l13393"></a><span class="lineno">13393</span>&#160;                    }</div>
+<div class="line"><a name="l13394"></a><span class="lineno">13394</span>&#160;                }</div>
+<div class="line"><a name="l13395"></a><span class="lineno">13395</span>&#160;            }</div>
+<div class="line"><a name="l13396"></a><span class="lineno">13396</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// WORST_FIT, FIRST_FIT</span></div>
+<div class="line"><a name="l13397"></a><span class="lineno">13397</span>&#160;            {</div>
+<div class="line"><a name="l13398"></a><span class="lineno">13398</span>&#160;                <span class="comment">// Backward order in m_Blocks - prefer blocks with largest amount of free space.</span></div>
+<div class="line"><a name="l13399"></a><span class="lineno">13399</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = m_Blocks.size(); blockIndex--; )</div>
+<div class="line"><a name="l13400"></a><span class="lineno">13400</span>&#160;                {</div>
+<div class="line"><a name="l13401"></a><span class="lineno">13401</span>&#160;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l13402"></a><span class="lineno">13402</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
+<div class="line"><a name="l13403"></a><span class="lineno">13403</span>&#160;                    VmaAllocationRequest currRequest = {};</div>
+<div class="line"><a name="l13404"></a><span class="lineno">13404</span>&#160;                    <span class="keywordflow">if</span>(pCurrBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
+<div class="line"><a name="l13405"></a><span class="lineno">13405</span>&#160;                        currentFrameIndex,</div>
+<div class="line"><a name="l13406"></a><span class="lineno">13406</span>&#160;                        m_FrameInUseCount,</div>
+<div class="line"><a name="l13407"></a><span class="lineno">13407</span>&#160;                        m_BufferImageGranularity,</div>
+<div class="line"><a name="l13408"></a><span class="lineno">13408</span>&#160;                        size,</div>
+<div class="line"><a name="l13409"></a><span class="lineno">13409</span>&#160;                        alignment,</div>
+<div class="line"><a name="l13410"></a><span class="lineno">13410</span>&#160;                        (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a>) != 0,</div>
+<div class="line"><a name="l13411"></a><span class="lineno">13411</span>&#160;                        suballocType,</div>
+<div class="line"><a name="l13412"></a><span class="lineno">13412</span>&#160;                        canMakeOtherLost,</div>
+<div class="line"><a name="l13413"></a><span class="lineno">13413</span>&#160;                        strategy,</div>
+<div class="line"><a name="l13414"></a><span class="lineno">13414</span>&#160;                        &amp;currRequest))</div>
+<div class="line"><a name="l13415"></a><span class="lineno">13415</span>&#160;                    {</div>
+<div class="line"><a name="l13416"></a><span class="lineno">13416</span>&#160;                        <span class="keyword">const</span> VkDeviceSize currRequestCost = currRequest.CalcCost();</div>
+<div class="line"><a name="l13417"></a><span class="lineno">13417</span>&#160;                        <span class="keywordflow">if</span>(pBestRequestBlock == VMA_NULL ||</div>
+<div class="line"><a name="l13418"></a><span class="lineno">13418</span>&#160;                            currRequestCost &lt; bestRequestCost ||</div>
+<div class="line"><a name="l13419"></a><span class="lineno">13419</span>&#160;                            strategy == <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a>)</div>
+<div class="line"><a name="l13420"></a><span class="lineno">13420</span>&#160;                        {</div>
+<div class="line"><a name="l13421"></a><span class="lineno">13421</span>&#160;                            pBestRequestBlock = pCurrBlock;</div>
+<div class="line"><a name="l13422"></a><span class="lineno">13422</span>&#160;                            bestRequest = currRequest;</div>
+<div class="line"><a name="l13423"></a><span class="lineno">13423</span>&#160;                            bestRequestCost = currRequestCost;</div>
+<div class="line"><a name="l13424"></a><span class="lineno">13424</span>&#160; </div>
+<div class="line"><a name="l13425"></a><span class="lineno">13425</span>&#160;                            <span class="keywordflow">if</span>(bestRequestCost == 0 ||</div>
+<div class="line"><a name="l13426"></a><span class="lineno">13426</span>&#160;                                strategy == <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a>)</div>
+<div class="line"><a name="l13427"></a><span class="lineno">13427</span>&#160;                            {</div>
+<div class="line"><a name="l13428"></a><span class="lineno">13428</span>&#160;                                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l13429"></a><span class="lineno">13429</span>&#160;                            }</div>
+<div class="line"><a name="l13430"></a><span class="lineno">13430</span>&#160;                        }</div>
+<div class="line"><a name="l13431"></a><span class="lineno">13431</span>&#160;                    }</div>
+<div class="line"><a name="l13432"></a><span class="lineno">13432</span>&#160;                }</div>
+<div class="line"><a name="l13433"></a><span class="lineno">13433</span>&#160;            }</div>
+<div class="line"><a name="l13434"></a><span class="lineno">13434</span>&#160; </div>
+<div class="line"><a name="l13435"></a><span class="lineno">13435</span>&#160;            <span class="keywordflow">if</span>(pBestRequestBlock != VMA_NULL)</div>
+<div class="line"><a name="l13436"></a><span class="lineno">13436</span>&#160;            {</div>
+<div class="line"><a name="l13437"></a><span class="lineno">13437</span>&#160;                <span class="keywordflow">if</span>(mapped)</div>
+<div class="line"><a name="l13438"></a><span class="lineno">13438</span>&#160;                {</div>
+<div class="line"><a name="l13439"></a><span class="lineno">13439</span>&#160;                    VkResult res = pBestRequestBlock-&gt;Map(m_hAllocator, 1, VMA_NULL);</div>
+<div class="line"><a name="l13440"></a><span class="lineno">13440</span>&#160;                    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l13441"></a><span class="lineno">13441</span>&#160;                    {</div>
+<div class="line"><a name="l13442"></a><span class="lineno">13442</span>&#160;                        <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l13443"></a><span class="lineno">13443</span>&#160;                    }</div>
+<div class="line"><a name="l13444"></a><span class="lineno">13444</span>&#160;                }</div>
+<div class="line"><a name="l13445"></a><span class="lineno">13445</span>&#160; </div>
+<div class="line"><a name="l13446"></a><span class="lineno">13446</span>&#160;                <span class="keywordflow">if</span>(pBestRequestBlock-&gt;m_pMetadata-&gt;MakeRequestedAllocationsLost(</div>
+<div class="line"><a name="l13447"></a><span class="lineno">13447</span>&#160;                    currentFrameIndex,</div>
+<div class="line"><a name="l13448"></a><span class="lineno">13448</span>&#160;                    m_FrameInUseCount,</div>
+<div class="line"><a name="l13449"></a><span class="lineno">13449</span>&#160;                    &amp;bestRequest))</div>
+<div class="line"><a name="l13450"></a><span class="lineno">13450</span>&#160;                {</div>
+<div class="line"><a name="l13451"></a><span class="lineno">13451</span>&#160;                    <span class="comment">// Allocate from this pBlock.</span></div>
+<div class="line"><a name="l13452"></a><span class="lineno">13452</span>&#160;                    *pAllocation = m_hAllocator-&gt;m_AllocationObjectAllocator.Allocate(currentFrameIndex, isUserDataString);</div>
+<div class="line"><a name="l13453"></a><span class="lineno">13453</span>&#160;                    pBestRequestBlock-&gt;m_pMetadata-&gt;Alloc(bestRequest, suballocType, size, *pAllocation);</div>
+<div class="line"><a name="l13454"></a><span class="lineno">13454</span>&#160;                    UpdateHasEmptyBlock();</div>
+<div class="line"><a name="l13455"></a><span class="lineno">13455</span>&#160;                    (*pAllocation)-&gt;InitBlockAllocation(</div>
+<div class="line"><a name="l13456"></a><span class="lineno">13456</span>&#160;                        pBestRequestBlock,</div>
+<div class="line"><a name="l13457"></a><span class="lineno">13457</span>&#160;                        bestRequest.offset,</div>
+<div class="line"><a name="l13458"></a><span class="lineno">13458</span>&#160;                        alignment,</div>
+<div class="line"><a name="l13459"></a><span class="lineno">13459</span>&#160;                        size,</div>
+<div class="line"><a name="l13460"></a><span class="lineno">13460</span>&#160;                        m_MemoryTypeIndex,</div>
+<div class="line"><a name="l13461"></a><span class="lineno">13461</span>&#160;                        suballocType,</div>
+<div class="line"><a name="l13462"></a><span class="lineno">13462</span>&#160;                        mapped,</div>
+<div class="line"><a name="l13463"></a><span class="lineno">13463</span>&#160;                        (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2">VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</a>) != 0);</div>
+<div class="line"><a name="l13464"></a><span class="lineno">13464</span>&#160;                    VMA_HEAVY_ASSERT(pBestRequestBlock-&gt;Validate());</div>
+<div class="line"><a name="l13465"></a><span class="lineno">13465</span>&#160;                    VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Returned from existing block&quot;</span>);</div>
+<div class="line"><a name="l13466"></a><span class="lineno">13466</span>&#160;                    (*pAllocation)-&gt;SetUserData(m_hAllocator, createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>);</div>
+<div class="line"><a name="l13467"></a><span class="lineno">13467</span>&#160;                    m_hAllocator-&gt;m_Budget.AddAllocation(m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), size);</div>
+<div class="line"><a name="l13468"></a><span class="lineno">13468</span>&#160;                    <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</div>
+<div class="line"><a name="l13469"></a><span class="lineno">13469</span>&#160;                    {</div>
+<div class="line"><a name="l13470"></a><span class="lineno">13470</span>&#160;                        m_hAllocator-&gt;FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);</div>
+<div class="line"><a name="l13471"></a><span class="lineno">13471</span>&#160;                    }</div>
+<div class="line"><a name="l13472"></a><span class="lineno">13472</span>&#160;                    <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</div>
+<div class="line"><a name="l13473"></a><span class="lineno">13473</span>&#160;                    {</div>
+<div class="line"><a name="l13474"></a><span class="lineno">13474</span>&#160;                        VkResult res = pBestRequestBlock-&gt;WriteMagicValueAroundAllocation(m_hAllocator, bestRequest.offset, size);</div>
+<div class="line"><a name="l13475"></a><span class="lineno">13475</span>&#160;                        VMA_ASSERT(res == VK_SUCCESS &amp;&amp; <span class="stringliteral">&quot;Couldn&#39;t map block memory to write magic value.&quot;</span>);</div>
+<div class="line"><a name="l13476"></a><span class="lineno">13476</span>&#160;                    }</div>
+<div class="line"><a name="l13477"></a><span class="lineno">13477</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l13478"></a><span class="lineno">13478</span>&#160;                }</div>
+<div class="line"><a name="l13479"></a><span class="lineno">13479</span>&#160;                <span class="comment">// else: Some allocations must have been touched while we are here. Next try.</span></div>
+<div class="line"><a name="l13480"></a><span class="lineno">13480</span>&#160;            }</div>
+<div class="line"><a name="l13481"></a><span class="lineno">13481</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l13482"></a><span class="lineno">13482</span>&#160;            {</div>
+<div class="line"><a name="l13483"></a><span class="lineno">13483</span>&#160;                <span class="comment">// Could not find place in any of the blocks - break outer loop.</span></div>
+<div class="line"><a name="l13484"></a><span class="lineno">13484</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l13485"></a><span class="lineno">13485</span>&#160;            }</div>
+<div class="line"><a name="l13486"></a><span class="lineno">13486</span>&#160;        }</div>
+<div class="line"><a name="l13487"></a><span class="lineno">13487</span>&#160;        <span class="comment">/* Maximum number of tries exceeded - a very unlike event when many other</span></div>
+<div class="line"><a name="l13488"></a><span class="lineno">13488</span>&#160;<span class="comment">        threads are simultaneously touching allocations making it impossible to make</span></div>
+<div class="line"><a name="l13489"></a><span class="lineno">13489</span>&#160;<span class="comment">        lost at the same time as we try to allocate. */</span></div>
+<div class="line"><a name="l13490"></a><span class="lineno">13490</span>&#160;        <span class="keywordflow">if</span>(tryIndex == VMA_ALLOCATION_TRY_COUNT)</div>
+<div class="line"><a name="l13491"></a><span class="lineno">13491</span>&#160;        {</div>
+<div class="line"><a name="l13492"></a><span class="lineno">13492</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_TOO_MANY_OBJECTS;</div>
+<div class="line"><a name="l13493"></a><span class="lineno">13493</span>&#160;        }</div>
+<div class="line"><a name="l13494"></a><span class="lineno">13494</span>&#160;    }</div>
+<div class="line"><a name="l13495"></a><span class="lineno">13495</span>&#160; </div>
+<div class="line"><a name="l13496"></a><span class="lineno">13496</span>&#160;    <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l13497"></a><span class="lineno">13497</span>&#160;}</div>
+<div class="line"><a name="l13498"></a><span class="lineno">13498</span>&#160; </div>
+<div class="line"><a name="l13499"></a><span class="lineno">13499</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::Free(</div>
+<div class="line"><a name="l13500"></a><span class="lineno">13500</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</div>
+<div class="line"><a name="l13501"></a><span class="lineno">13501</span>&#160;{</div>
+<div class="line"><a name="l13502"></a><span class="lineno">13502</span>&#160;    VmaDeviceMemoryBlock* pBlockToDelete = VMA_NULL;</div>
+<div class="line"><a name="l13503"></a><span class="lineno">13503</span>&#160; </div>
+<div class="line"><a name="l13504"></a><span class="lineno">13504</span>&#160;    <span class="keywordtype">bool</span> budgetExceeded = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l13505"></a><span class="lineno">13505</span>&#160;    {</div>
+<div class="line"><a name="l13506"></a><span class="lineno">13506</span>&#160;        <span class="keyword">const</span> uint32_t heapIndex = m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);</div>
+<div class="line"><a name="l13507"></a><span class="lineno">13507</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> heapBudget = {};</div>
+<div class="line"><a name="l13508"></a><span class="lineno">13508</span>&#160;        m_hAllocator-&gt;GetBudget(&amp;heapBudget, heapIndex, 1);</div>
+<div class="line"><a name="l13509"></a><span class="lineno">13509</span>&#160;        budgetExceeded = heapBudget.<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a> &gt;= heapBudget.<a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a>;</div>
+<div class="line"><a name="l13510"></a><span class="lineno">13510</span>&#160;    }</div>
+<div class="line"><a name="l13511"></a><span class="lineno">13511</span>&#160; </div>
+<div class="line"><a name="l13512"></a><span class="lineno">13512</span>&#160;    <span class="comment">// Scope for lock.</span></div>
+<div class="line"><a name="l13513"></a><span class="lineno">13513</span>&#160;    {</div>
+<div class="line"><a name="l13514"></a><span class="lineno">13514</span>&#160;        VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l13515"></a><span class="lineno">13515</span>&#160; </div>
+<div class="line"><a name="l13516"></a><span class="lineno">13516</span>&#160;        VmaDeviceMemoryBlock* pBlock = hAllocation-&gt;GetBlock();</div>
+<div class="line"><a name="l13517"></a><span class="lineno">13517</span>&#160; </div>
+<div class="line"><a name="l13518"></a><span class="lineno">13518</span>&#160;        <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</div>
+<div class="line"><a name="l13519"></a><span class="lineno">13519</span>&#160;        {</div>
+<div class="line"><a name="l13520"></a><span class="lineno">13520</span>&#160;            VkResult res = pBlock-&gt;ValidateMagicValueAroundAllocation(m_hAllocator, hAllocation-&gt;GetOffset(), hAllocation-&gt;GetSize());</div>
+<div class="line"><a name="l13521"></a><span class="lineno">13521</span>&#160;            VMA_ASSERT(res == VK_SUCCESS &amp;&amp; <span class="stringliteral">&quot;Couldn&#39;t map block memory to validate magic value.&quot;</span>);</div>
+<div class="line"><a name="l13522"></a><span class="lineno">13522</span>&#160;        }</div>
+<div class="line"><a name="l13523"></a><span class="lineno">13523</span>&#160; </div>
+<div class="line"><a name="l13524"></a><span class="lineno">13524</span>&#160;        <span class="keywordflow">if</span>(hAllocation-&gt;IsPersistentMap())</div>
+<div class="line"><a name="l13525"></a><span class="lineno">13525</span>&#160;        {</div>
+<div class="line"><a name="l13526"></a><span class="lineno">13526</span>&#160;            pBlock-&gt;Unmap(m_hAllocator, 1);</div>
+<div class="line"><a name="l13527"></a><span class="lineno">13527</span>&#160;        }</div>
+<div class="line"><a name="l13528"></a><span class="lineno">13528</span>&#160; </div>
+<div class="line"><a name="l13529"></a><span class="lineno">13529</span>&#160;        pBlock-&gt;m_pMetadata-&gt;Free(hAllocation);</div>
+<div class="line"><a name="l13530"></a><span class="lineno">13530</span>&#160;        VMA_HEAVY_ASSERT(pBlock-&gt;Validate());</div>
+<div class="line"><a name="l13531"></a><span class="lineno">13531</span>&#160; </div>
+<div class="line"><a name="l13532"></a><span class="lineno">13532</span>&#160;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;  Freed from MemoryTypeIndex=%u&quot;</span>, m_MemoryTypeIndex);</div>
+<div class="line"><a name="l13533"></a><span class="lineno">13533</span>&#160; </div>
+<div class="line"><a name="l13534"></a><span class="lineno">13534</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">bool</span> canDeleteBlock = m_Blocks.size() &gt; m_MinBlockCount;</div>
+<div class="line"><a name="l13535"></a><span class="lineno">13535</span>&#160;        <span class="comment">// pBlock became empty after this deallocation.</span></div>
+<div class="line"><a name="l13536"></a><span class="lineno">13536</span>&#160;        <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;IsEmpty())</div>
+<div class="line"><a name="l13537"></a><span class="lineno">13537</span>&#160;        {</div>
+<div class="line"><a name="l13538"></a><span class="lineno">13538</span>&#160;            <span class="comment">// Already has empty block. We don&#39;t want to have two, so delete this one.</span></div>
+<div class="line"><a name="l13539"></a><span class="lineno">13539</span>&#160;            <span class="keywordflow">if</span>((m_HasEmptyBlock || budgetExceeded) &amp;&amp; canDeleteBlock)</div>
+<div class="line"><a name="l13540"></a><span class="lineno">13540</span>&#160;            {</div>
+<div class="line"><a name="l13541"></a><span class="lineno">13541</span>&#160;                pBlockToDelete = pBlock;</div>
+<div class="line"><a name="l13542"></a><span class="lineno">13542</span>&#160;                Remove(pBlock);</div>
+<div class="line"><a name="l13543"></a><span class="lineno">13543</span>&#160;            }</div>
+<div class="line"><a name="l13544"></a><span class="lineno">13544</span>&#160;            <span class="comment">// else: We now have an empty block - leave it.</span></div>
+<div class="line"><a name="l13545"></a><span class="lineno">13545</span>&#160;        }</div>
+<div class="line"><a name="l13546"></a><span class="lineno">13546</span>&#160;        <span class="comment">// pBlock didn&#39;t become empty, but we have another empty block - find and free that one.</span></div>
+<div class="line"><a name="l13547"></a><span class="lineno">13547</span>&#160;        <span class="comment">// (This is optional, heuristics.)</span></div>
+<div class="line"><a name="l13548"></a><span class="lineno">13548</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_HasEmptyBlock &amp;&amp; canDeleteBlock)</div>
+<div class="line"><a name="l13549"></a><span class="lineno">13549</span>&#160;        {</div>
+<div class="line"><a name="l13550"></a><span class="lineno">13550</span>&#160;            VmaDeviceMemoryBlock* pLastBlock = m_Blocks.back();</div>
+<div class="line"><a name="l13551"></a><span class="lineno">13551</span>&#160;            <span class="keywordflow">if</span>(pLastBlock-&gt;m_pMetadata-&gt;IsEmpty())</div>
+<div class="line"><a name="l13552"></a><span class="lineno">13552</span>&#160;            {</div>
+<div class="line"><a name="l13553"></a><span class="lineno">13553</span>&#160;                pBlockToDelete = pLastBlock;</div>
+<div class="line"><a name="l13554"></a><span class="lineno">13554</span>&#160;                m_Blocks.pop_back();</div>
+<div class="line"><a name="l13555"></a><span class="lineno">13555</span>&#160;            }</div>
+<div class="line"><a name="l13556"></a><span class="lineno">13556</span>&#160;        }</div>
+<div class="line"><a name="l13557"></a><span class="lineno">13557</span>&#160; </div>
+<div class="line"><a name="l13558"></a><span class="lineno">13558</span>&#160;        UpdateHasEmptyBlock();</div>
+<div class="line"><a name="l13559"></a><span class="lineno">13559</span>&#160;        IncrementallySortBlocks();</div>
+<div class="line"><a name="l13560"></a><span class="lineno">13560</span>&#160;    }</div>
+<div class="line"><a name="l13561"></a><span class="lineno">13561</span>&#160; </div>
+<div class="line"><a name="l13562"></a><span class="lineno">13562</span>&#160;    <span class="comment">// Destruction of a free block. Deferred until this point, outside of mutex</span></div>
+<div class="line"><a name="l13563"></a><span class="lineno">13563</span>&#160;    <span class="comment">// lock, for performance reason.</span></div>
+<div class="line"><a name="l13564"></a><span class="lineno">13564</span>&#160;    <span class="keywordflow">if</span>(pBlockToDelete != VMA_NULL)</div>
+<div class="line"><a name="l13565"></a><span class="lineno">13565</span>&#160;    {</div>
+<div class="line"><a name="l13566"></a><span class="lineno">13566</span>&#160;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Deleted empty block&quot;</span>);</div>
+<div class="line"><a name="l13567"></a><span class="lineno">13567</span>&#160;        pBlockToDelete-&gt;Destroy(m_hAllocator);</div>
+<div class="line"><a name="l13568"></a><span class="lineno">13568</span>&#160;        vma_delete(m_hAllocator, pBlockToDelete);</div>
+<div class="line"><a name="l13569"></a><span class="lineno">13569</span>&#160;    }</div>
+<div class="line"><a name="l13570"></a><span class="lineno">13570</span>&#160;}</div>
+<div class="line"><a name="l13571"></a><span class="lineno">13571</span>&#160; </div>
+<div class="line"><a name="l13572"></a><span class="lineno">13572</span>&#160;VkDeviceSize VmaBlockVector::CalcMaxBlockSize()<span class="keyword"> const</span></div>
+<div class="line"><a name="l13573"></a><span class="lineno">13573</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l13574"></a><span class="lineno">13574</span>&#160;    VkDeviceSize result = 0;</div>
+<div class="line"><a name="l13575"></a><span class="lineno">13575</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_Blocks.size(); i--; )</div>
+<div class="line"><a name="l13576"></a><span class="lineno">13576</span>&#160;    {</div>
+<div class="line"><a name="l13577"></a><span class="lineno">13577</span>&#160;        result = VMA_MAX(result, m_Blocks[i]-&gt;m_pMetadata-&gt;GetSize());</div>
+<div class="line"><a name="l13578"></a><span class="lineno">13578</span>&#160;        <span class="keywordflow">if</span>(result &gt;= m_PreferredBlockSize)</div>
+<div class="line"><a name="l13579"></a><span class="lineno">13579</span>&#160;        {</div>
+<div class="line"><a name="l13580"></a><span class="lineno">13580</span>&#160;            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l13581"></a><span class="lineno">13581</span>&#160;        }</div>
+<div class="line"><a name="l13582"></a><span class="lineno">13582</span>&#160;    }</div>
+<div class="line"><a name="l13583"></a><span class="lineno">13583</span>&#160;    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l13584"></a><span class="lineno">13584</span>&#160;}</div>
+<div class="line"><a name="l13585"></a><span class="lineno">13585</span>&#160; </div>
+<div class="line"><a name="l13586"></a><span class="lineno">13586</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::Remove(VmaDeviceMemoryBlock* pBlock)</div>
+<div class="line"><a name="l13587"></a><span class="lineno">13587</span>&#160;{</div>
+<div class="line"><a name="l13588"></a><span class="lineno">13588</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</div>
+<div class="line"><a name="l13589"></a><span class="lineno">13589</span>&#160;    {</div>
+<div class="line"><a name="l13590"></a><span class="lineno">13590</span>&#160;        <span class="keywordflow">if</span>(m_Blocks[blockIndex] == pBlock)</div>
+<div class="line"><a name="l13591"></a><span class="lineno">13591</span>&#160;        {</div>
+<div class="line"><a name="l13592"></a><span class="lineno">13592</span>&#160;            VmaVectorRemove(m_Blocks, blockIndex);</div>
+<div class="line"><a name="l13593"></a><span class="lineno">13593</span>&#160;            <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l13594"></a><span class="lineno">13594</span>&#160;        }</div>
+<div class="line"><a name="l13595"></a><span class="lineno">13595</span>&#160;    }</div>
+<div class="line"><a name="l13596"></a><span class="lineno">13596</span>&#160;    VMA_ASSERT(0);</div>
+<div class="line"><a name="l13597"></a><span class="lineno">13597</span>&#160;}</div>
+<div class="line"><a name="l13598"></a><span class="lineno">13598</span>&#160; </div>
+<div class="line"><a name="l13599"></a><span class="lineno">13599</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::IncrementallySortBlocks()</div>
+<div class="line"><a name="l13600"></a><span class="lineno">13600</span>&#160;{</div>
+<div class="line"><a name="l13601"></a><span class="lineno">13601</span>&#160;    <span class="keywordflow">if</span>(m_Algorithm != <a class="code" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a>)</div>
+<div class="line"><a name="l13602"></a><span class="lineno">13602</span>&#160;    {</div>
+<div class="line"><a name="l13603"></a><span class="lineno">13603</span>&#160;        <span class="comment">// Bubble sort only until first swap.</span></div>
+<div class="line"><a name="l13604"></a><span class="lineno">13604</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 1; i &lt; m_Blocks.size(); ++i)</div>
+<div class="line"><a name="l13605"></a><span class="lineno">13605</span>&#160;        {</div>
+<div class="line"><a name="l13606"></a><span class="lineno">13606</span>&#160;            <span class="keywordflow">if</span>(m_Blocks[i - 1]-&gt;m_pMetadata-&gt;GetSumFreeSize() &gt; m_Blocks[i]-&gt;m_pMetadata-&gt;GetSumFreeSize())</div>
+<div class="line"><a name="l13607"></a><span class="lineno">13607</span>&#160;            {</div>
+<div class="line"><a name="l13608"></a><span class="lineno">13608</span>&#160;                VMA_SWAP(m_Blocks[i - 1], m_Blocks[i]);</div>
+<div class="line"><a name="l13609"></a><span class="lineno">13609</span>&#160;                <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l13610"></a><span class="lineno">13610</span>&#160;            }</div>
+<div class="line"><a name="l13611"></a><span class="lineno">13611</span>&#160;        }</div>
+<div class="line"><a name="l13612"></a><span class="lineno">13612</span>&#160;    }</div>
+<div class="line"><a name="l13613"></a><span class="lineno">13613</span>&#160;}</div>
+<div class="line"><a name="l13614"></a><span class="lineno">13614</span>&#160; </div>
+<div class="line"><a name="l13615"></a><span class="lineno">13615</span>&#160;VkResult VmaBlockVector::AllocateFromBlock(</div>
+<div class="line"><a name="l13616"></a><span class="lineno">13616</span>&#160;    VmaDeviceMemoryBlock* pBlock,</div>
+<div class="line"><a name="l13617"></a><span class="lineno">13617</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l13618"></a><span class="lineno">13618</span>&#160;    VkDeviceSize size,</div>
+<div class="line"><a name="l13619"></a><span class="lineno">13619</span>&#160;    VkDeviceSize alignment,</div>
+<div class="line"><a name="l13620"></a><span class="lineno">13620</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a> allocFlags,</div>
+<div class="line"><a name="l13621"></a><span class="lineno">13621</span>&#160;    <span class="keywordtype">void</span>* pUserData,</div>
+<div class="line"><a name="l13622"></a><span class="lineno">13622</span>&#160;    VmaSuballocationType suballocType,</div>
+<div class="line"><a name="l13623"></a><span class="lineno">13623</span>&#160;    uint32_t strategy,</div>
+<div class="line"><a name="l13624"></a><span class="lineno">13624</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
+<div class="line"><a name="l13625"></a><span class="lineno">13625</span>&#160;{</div>
+<div class="line"><a name="l13626"></a><span class="lineno">13626</span>&#160;    VMA_ASSERT((allocFlags &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a>) == 0);</div>
+<div class="line"><a name="l13627"></a><span class="lineno">13627</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> isUpperAddress = (allocFlags &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a>) != 0;</div>
+<div class="line"><a name="l13628"></a><span class="lineno">13628</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> mapped = (allocFlags &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0;</div>
+<div class="line"><a name="l13629"></a><span class="lineno">13629</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> isUserDataString = (allocFlags &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a>) != 0;</div>
+<div class="line"><a name="l13630"></a><span class="lineno">13630</span>&#160; </div>
+<div class="line"><a name="l13631"></a><span class="lineno">13631</span>&#160;    VmaAllocationRequest currRequest = {};</div>
+<div class="line"><a name="l13632"></a><span class="lineno">13632</span>&#160;    <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
+<div class="line"><a name="l13633"></a><span class="lineno">13633</span>&#160;        currentFrameIndex,</div>
+<div class="line"><a name="l13634"></a><span class="lineno">13634</span>&#160;        m_FrameInUseCount,</div>
+<div class="line"><a name="l13635"></a><span class="lineno">13635</span>&#160;        m_BufferImageGranularity,</div>
+<div class="line"><a name="l13636"></a><span class="lineno">13636</span>&#160;        size,</div>
+<div class="line"><a name="l13637"></a><span class="lineno">13637</span>&#160;        alignment,</div>
+<div class="line"><a name="l13638"></a><span class="lineno">13638</span>&#160;        isUpperAddress,</div>
+<div class="line"><a name="l13639"></a><span class="lineno">13639</span>&#160;        suballocType,</div>
+<div class="line"><a name="l13640"></a><span class="lineno">13640</span>&#160;        <span class="keyword">false</span>, <span class="comment">// canMakeOtherLost</span></div>
+<div class="line"><a name="l13641"></a><span class="lineno">13641</span>&#160;        strategy,</div>
+<div class="line"><a name="l13642"></a><span class="lineno">13642</span>&#160;        &amp;currRequest))</div>
+<div class="line"><a name="l13643"></a><span class="lineno">13643</span>&#160;    {</div>
+<div class="line"><a name="l13644"></a><span class="lineno">13644</span>&#160;        <span class="comment">// Allocate from pCurrBlock.</span></div>
+<div class="line"><a name="l13645"></a><span class="lineno">13645</span>&#160;        VMA_ASSERT(currRequest.itemsToMakeLostCount == 0);</div>
+<div class="line"><a name="l13646"></a><span class="lineno">13646</span>&#160; </div>
+<div class="line"><a name="l13647"></a><span class="lineno">13647</span>&#160;        <span class="keywordflow">if</span>(mapped)</div>
+<div class="line"><a name="l13648"></a><span class="lineno">13648</span>&#160;        {</div>
+<div class="line"><a name="l13649"></a><span class="lineno">13649</span>&#160;            VkResult res = pBlock-&gt;Map(m_hAllocator, 1, VMA_NULL);</div>
+<div class="line"><a name="l13650"></a><span class="lineno">13650</span>&#160;            <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l13651"></a><span class="lineno">13651</span>&#160;            {</div>
+<div class="line"><a name="l13652"></a><span class="lineno">13652</span>&#160;                <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l13653"></a><span class="lineno">13653</span>&#160;            }</div>
+<div class="line"><a name="l13654"></a><span class="lineno">13654</span>&#160;        }</div>
+<div class="line"><a name="l13655"></a><span class="lineno">13655</span>&#160; </div>
+<div class="line"><a name="l13656"></a><span class="lineno">13656</span>&#160;        *pAllocation = m_hAllocator-&gt;m_AllocationObjectAllocator.Allocate(currentFrameIndex, isUserDataString);</div>
+<div class="line"><a name="l13657"></a><span class="lineno">13657</span>&#160;        pBlock-&gt;m_pMetadata-&gt;Alloc(currRequest, suballocType, size, *pAllocation);</div>
+<div class="line"><a name="l13658"></a><span class="lineno">13658</span>&#160;        UpdateHasEmptyBlock();</div>
+<div class="line"><a name="l13659"></a><span class="lineno">13659</span>&#160;        (*pAllocation)-&gt;InitBlockAllocation(</div>
+<div class="line"><a name="l13660"></a><span class="lineno">13660</span>&#160;            pBlock,</div>
+<div class="line"><a name="l13661"></a><span class="lineno">13661</span>&#160;            currRequest.offset,</div>
+<div class="line"><a name="l13662"></a><span class="lineno">13662</span>&#160;            alignment,</div>
+<div class="line"><a name="l13663"></a><span class="lineno">13663</span>&#160;            size,</div>
+<div class="line"><a name="l13664"></a><span class="lineno">13664</span>&#160;            m_MemoryTypeIndex,</div>
+<div class="line"><a name="l13665"></a><span class="lineno">13665</span>&#160;            suballocType,</div>
+<div class="line"><a name="l13666"></a><span class="lineno">13666</span>&#160;            mapped,</div>
+<div class="line"><a name="l13667"></a><span class="lineno">13667</span>&#160;            (allocFlags &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2">VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</a>) != 0);</div>
+<div class="line"><a name="l13668"></a><span class="lineno">13668</span>&#160;        VMA_HEAVY_ASSERT(pBlock-&gt;Validate());</div>
+<div class="line"><a name="l13669"></a><span class="lineno">13669</span>&#160;        (*pAllocation)-&gt;SetUserData(m_hAllocator, pUserData);</div>
+<div class="line"><a name="l13670"></a><span class="lineno">13670</span>&#160;        m_hAllocator-&gt;m_Budget.AddAllocation(m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), size);</div>
+<div class="line"><a name="l13671"></a><span class="lineno">13671</span>&#160;        <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</div>
+<div class="line"><a name="l13672"></a><span class="lineno">13672</span>&#160;        {</div>
+<div class="line"><a name="l13673"></a><span class="lineno">13673</span>&#160;            m_hAllocator-&gt;FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);</div>
+<div class="line"><a name="l13674"></a><span class="lineno">13674</span>&#160;        }</div>
+<div class="line"><a name="l13675"></a><span class="lineno">13675</span>&#160;        <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</div>
+<div class="line"><a name="l13676"></a><span class="lineno">13676</span>&#160;        {</div>
+<div class="line"><a name="l13677"></a><span class="lineno">13677</span>&#160;            VkResult res = pBlock-&gt;WriteMagicValueAroundAllocation(m_hAllocator, currRequest.offset, size);</div>
+<div class="line"><a name="l13678"></a><span class="lineno">13678</span>&#160;            VMA_ASSERT(res == VK_SUCCESS &amp;&amp; <span class="stringliteral">&quot;Couldn&#39;t map block memory to write magic value.&quot;</span>);</div>
+<div class="line"><a name="l13679"></a><span class="lineno">13679</span>&#160;        }</div>
+<div class="line"><a name="l13680"></a><span class="lineno">13680</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l13681"></a><span class="lineno">13681</span>&#160;    }</div>
+<div class="line"><a name="l13682"></a><span class="lineno">13682</span>&#160;    <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l13683"></a><span class="lineno">13683</span>&#160;}</div>
+<div class="line"><a name="l13684"></a><span class="lineno">13684</span>&#160; </div>
+<div class="line"><a name="l13685"></a><span class="lineno">13685</span>&#160;VkResult VmaBlockVector::CreateBlock(VkDeviceSize blockSize, <span class="keywordtype">size_t</span>* pNewBlockIndex)</div>
+<div class="line"><a name="l13686"></a><span class="lineno">13686</span>&#160;{</div>
+<div class="line"><a name="l13687"></a><span class="lineno">13687</span>&#160;    VkMemoryAllocateInfo allocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO };</div>
+<div class="line"><a name="l13688"></a><span class="lineno">13688</span>&#160;    allocInfo.pNext = m_pMemoryAllocateNext;</div>
+<div class="line"><a name="l13689"></a><span class="lineno">13689</span>&#160;    allocInfo.memoryTypeIndex = m_MemoryTypeIndex;</div>
+<div class="line"><a name="l13690"></a><span class="lineno">13690</span>&#160;    allocInfo.allocationSize = blockSize;</div>
+<div class="line"><a name="l13691"></a><span class="lineno">13691</span>&#160; </div>
+<div class="line"><a name="l13692"></a><span class="lineno">13692</span>&#160;<span class="preprocessor">#if VMA_BUFFER_DEVICE_ADDRESS</span></div>
+<div class="line"><a name="l13693"></a><span class="lineno">13693</span>&#160;    <span class="comment">// Every standalone block can potentially contain a buffer with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT - always enable the feature.</span></div>
+<div class="line"><a name="l13694"></a><span class="lineno">13694</span>&#160;    VkMemoryAllocateFlagsInfoKHR allocFlagsInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR };</div>
+<div class="line"><a name="l13695"></a><span class="lineno">13695</span>&#160;    <span class="keywordflow">if</span>(m_hAllocator-&gt;m_UseKhrBufferDeviceAddress)</div>
+<div class="line"><a name="l13696"></a><span class="lineno">13696</span>&#160;    {</div>
+<div class="line"><a name="l13697"></a><span class="lineno">13697</span>&#160;        allocFlagsInfo.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR;</div>
+<div class="line"><a name="l13698"></a><span class="lineno">13698</span>&#160;        VmaPnextChainPushFront(&amp;allocInfo, &amp;allocFlagsInfo);</div>
+<div class="line"><a name="l13699"></a><span class="lineno">13699</span>&#160;    }</div>
+<div class="line"><a name="l13700"></a><span class="lineno">13700</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_BUFFER_DEVICE_ADDRESS</span></div>
+<div class="line"><a name="l13701"></a><span class="lineno">13701</span>&#160; </div>
+<div class="line"><a name="l13702"></a><span class="lineno">13702</span>&#160;<span class="preprocessor">#if VMA_MEMORY_PRIORITY</span></div>
+<div class="line"><a name="l13703"></a><span class="lineno">13703</span>&#160;    VkMemoryPriorityAllocateInfoEXT priorityInfo = { VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT };</div>
+<div class="line"><a name="l13704"></a><span class="lineno">13704</span>&#160;    <span class="keywordflow">if</span>(m_hAllocator-&gt;m_UseExtMemoryPriority)</div>
+<div class="line"><a name="l13705"></a><span class="lineno">13705</span>&#160;    {</div>
+<div class="line"><a name="l13706"></a><span class="lineno">13706</span>&#160;        priorityInfo.priority = m_Priority;</div>
+<div class="line"><a name="l13707"></a><span class="lineno">13707</span>&#160;        VmaPnextChainPushFront(&amp;allocInfo, &amp;priorityInfo);</div>
+<div class="line"><a name="l13708"></a><span class="lineno">13708</span>&#160;    }</div>
+<div class="line"><a name="l13709"></a><span class="lineno">13709</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_MEMORY_PRIORITY</span></div>
+<div class="line"><a name="l13710"></a><span class="lineno">13710</span>&#160; </div>
+<div class="line"><a name="l13711"></a><span class="lineno">13711</span>&#160;<span class="preprocessor">#if VMA_EXTERNAL_MEMORY</span></div>
+<div class="line"><a name="l13712"></a><span class="lineno">13712</span>&#160;    <span class="comment">// Attach VkExportMemoryAllocateInfoKHR if necessary.</span></div>
+<div class="line"><a name="l13713"></a><span class="lineno">13713</span>&#160;    VkExportMemoryAllocateInfoKHR exportMemoryAllocInfo = { VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR };</div>
+<div class="line"><a name="l13714"></a><span class="lineno">13714</span>&#160;    exportMemoryAllocInfo.handleTypes = m_hAllocator-&gt;GetExternalMemoryHandleTypeFlags(m_MemoryTypeIndex);</div>
+<div class="line"><a name="l13715"></a><span class="lineno">13715</span>&#160;    <span class="keywordflow">if</span>(exportMemoryAllocInfo.handleTypes != 0)</div>
+<div class="line"><a name="l13716"></a><span class="lineno">13716</span>&#160;    {</div>
+<div class="line"><a name="l13717"></a><span class="lineno">13717</span>&#160;        VmaPnextChainPushFront(&amp;allocInfo, &amp;exportMemoryAllocInfo);</div>
+<div class="line"><a name="l13718"></a><span class="lineno">13718</span>&#160;    }</div>
+<div class="line"><a name="l13719"></a><span class="lineno">13719</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_EXTERNAL_MEMORY</span></div>
+<div class="line"><a name="l13720"></a><span class="lineno">13720</span>&#160; </div>
+<div class="line"><a name="l13721"></a><span class="lineno">13721</span>&#160;    VkDeviceMemory mem = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l13722"></a><span class="lineno">13722</span>&#160;    VkResult res = m_hAllocator-&gt;AllocateVulkanMemory(&amp;allocInfo, &amp;mem);</div>
+<div class="line"><a name="l13723"></a><span class="lineno">13723</span>&#160;    <span class="keywordflow">if</span>(res &lt; 0)</div>
+<div class="line"><a name="l13724"></a><span class="lineno">13724</span>&#160;    {</div>
+<div class="line"><a name="l13725"></a><span class="lineno">13725</span>&#160;        <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l13726"></a><span class="lineno">13726</span>&#160;    }</div>
+<div class="line"><a name="l13727"></a><span class="lineno">13727</span>&#160; </div>
+<div class="line"><a name="l13728"></a><span class="lineno">13728</span>&#160;    <span class="comment">// New VkDeviceMemory successfully created.</span></div>
+<div class="line"><a name="l13729"></a><span class="lineno">13729</span>&#160; </div>
+<div class="line"><a name="l13730"></a><span class="lineno">13730</span>&#160;    <span class="comment">// Create new Allocation for it.</span></div>
+<div class="line"><a name="l13731"></a><span class="lineno">13731</span>&#160;    VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = vma_new(m_hAllocator, VmaDeviceMemoryBlock)(m_hAllocator);</div>
+<div class="line"><a name="l13732"></a><span class="lineno">13732</span>&#160;    pBlock-&gt;Init(</div>
+<div class="line"><a name="l13733"></a><span class="lineno">13733</span>&#160;        m_hAllocator,</div>
+<div class="line"><a name="l13734"></a><span class="lineno">13734</span>&#160;        m_hParentPool,</div>
+<div class="line"><a name="l13735"></a><span class="lineno">13735</span>&#160;        m_MemoryTypeIndex,</div>
+<div class="line"><a name="l13736"></a><span class="lineno">13736</span>&#160;        mem,</div>
+<div class="line"><a name="l13737"></a><span class="lineno">13737</span>&#160;        allocInfo.allocationSize,</div>
+<div class="line"><a name="l13738"></a><span class="lineno">13738</span>&#160;        m_NextBlockId++,</div>
+<div class="line"><a name="l13739"></a><span class="lineno">13739</span>&#160;        m_Algorithm);</div>
+<div class="line"><a name="l13740"></a><span class="lineno">13740</span>&#160; </div>
+<div class="line"><a name="l13741"></a><span class="lineno">13741</span>&#160;    m_Blocks.push_back(pBlock);</div>
+<div class="line"><a name="l13742"></a><span class="lineno">13742</span>&#160;    <span class="keywordflow">if</span>(pNewBlockIndex != VMA_NULL)</div>
+<div class="line"><a name="l13743"></a><span class="lineno">13743</span>&#160;    {</div>
+<div class="line"><a name="l13744"></a><span class="lineno">13744</span>&#160;        *pNewBlockIndex = m_Blocks.size() - 1;</div>
+<div class="line"><a name="l13745"></a><span class="lineno">13745</span>&#160;    }</div>
+<div class="line"><a name="l13746"></a><span class="lineno">13746</span>&#160; </div>
+<div class="line"><a name="l13747"></a><span class="lineno">13747</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l13748"></a><span class="lineno">13748</span>&#160;}</div>
+<div class="line"><a name="l13749"></a><span class="lineno">13749</span>&#160; </div>
+<div class="line"><a name="l13750"></a><span class="lineno">13750</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::ApplyDefragmentationMovesCpu(</div>
+<div class="line"><a name="l13751"></a><span class="lineno">13751</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pDefragCtx,</div>
+<div class="line"><a name="l13752"></a><span class="lineno">13752</span>&#160;    <span class="keyword">const</span> VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves)</div>
+<div class="line"><a name="l13753"></a><span class="lineno">13753</span>&#160;{</div>
+<div class="line"><a name="l13754"></a><span class="lineno">13754</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_Blocks.size();</div>
+<div class="line"><a name="l13755"></a><span class="lineno">13755</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> isNonCoherent = m_hAllocator-&gt;IsMemoryTypeNonCoherent(m_MemoryTypeIndex);</div>
+<div class="line"><a name="l13756"></a><span class="lineno">13756</span>&#160; </div>
+<div class="line"><a name="l13757"></a><span class="lineno">13757</span>&#160;    <span class="keyword">enum</span> BLOCK_FLAG</div>
+<div class="line"><a name="l13758"></a><span class="lineno">13758</span>&#160;    {</div>
+<div class="line"><a name="l13759"></a><span class="lineno">13759</span>&#160;        BLOCK_FLAG_USED = 0x00000001,</div>
+<div class="line"><a name="l13760"></a><span class="lineno">13760</span>&#160;        BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION = 0x00000002,</div>
+<div class="line"><a name="l13761"></a><span class="lineno">13761</span>&#160;    };</div>
+<div class="line"><a name="l13762"></a><span class="lineno">13762</span>&#160; </div>
+<div class="line"><a name="l13763"></a><span class="lineno">13763</span>&#160;    <span class="keyword">struct </span>BlockInfo</div>
+<div class="line"><a name="l13764"></a><span class="lineno">13764</span>&#160;    {</div>
+<div class="line"><a name="l13765"></a><span class="lineno">13765</span>&#160;        uint32_t flags;</div>
+<div class="line"><a name="l13766"></a><span class="lineno">13766</span>&#160;        <span class="keywordtype">void</span>* pMappedData;</div>
+<div class="line"><a name="l13767"></a><span class="lineno">13767</span>&#160;    };</div>
+<div class="line"><a name="l13768"></a><span class="lineno">13768</span>&#160;    VmaVector&lt; BlockInfo, VmaStlAllocator&lt;BlockInfo&gt; &gt;</div>
+<div class="line"><a name="l13769"></a><span class="lineno">13769</span>&#160;        blockInfo(blockCount, BlockInfo(), VmaStlAllocator&lt;BlockInfo&gt;(m_hAllocator-&gt;GetAllocationCallbacks()));</div>
+<div class="line"><a name="l13770"></a><span class="lineno">13770</span>&#160;    memset(blockInfo.data(), 0, blockCount * <span class="keyword">sizeof</span>(BlockInfo));</div>
+<div class="line"><a name="l13771"></a><span class="lineno">13771</span>&#160; </div>
+<div class="line"><a name="l13772"></a><span class="lineno">13772</span>&#160;    <span class="comment">// Go over all moves. Mark blocks that are used with BLOCK_FLAG_USED.</span></div>
+<div class="line"><a name="l13773"></a><span class="lineno">13773</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> moveCount = moves.size();</div>
+<div class="line"><a name="l13774"></a><span class="lineno">13774</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> moveIndex = 0; moveIndex &lt; moveCount; ++moveIndex)</div>
+<div class="line"><a name="l13775"></a><span class="lineno">13775</span>&#160;    {</div>
+<div class="line"><a name="l13776"></a><span class="lineno">13776</span>&#160;        <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</div>
+<div class="line"><a name="l13777"></a><span class="lineno">13777</span>&#160;        blockInfo[move.srcBlockIndex].flags |= BLOCK_FLAG_USED;</div>
+<div class="line"><a name="l13778"></a><span class="lineno">13778</span>&#160;        blockInfo[move.dstBlockIndex].flags |= BLOCK_FLAG_USED;</div>
+<div class="line"><a name="l13779"></a><span class="lineno">13779</span>&#160;    }</div>
+<div class="line"><a name="l13780"></a><span class="lineno">13780</span>&#160; </div>
+<div class="line"><a name="l13781"></a><span class="lineno">13781</span>&#160;    VMA_ASSERT(pDefragCtx-&gt;res == VK_SUCCESS);</div>
+<div class="line"><a name="l13782"></a><span class="lineno">13782</span>&#160; </div>
+<div class="line"><a name="l13783"></a><span class="lineno">13783</span>&#160;    <span class="comment">// Go over all blocks. Get mapped pointer or map if necessary.</span></div>
+<div class="line"><a name="l13784"></a><span class="lineno">13784</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; pDefragCtx-&gt;res == VK_SUCCESS &amp;&amp; blockIndex &lt; blockCount; ++blockIndex)</div>
+<div class="line"><a name="l13785"></a><span class="lineno">13785</span>&#160;    {</div>
+<div class="line"><a name="l13786"></a><span class="lineno">13786</span>&#160;        BlockInfo&amp; currBlockInfo = blockInfo[blockIndex];</div>
+<div class="line"><a name="l13787"></a><span class="lineno">13787</span>&#160;        VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l13788"></a><span class="lineno">13788</span>&#160;        <span class="keywordflow">if</span>((currBlockInfo.flags &amp; BLOCK_FLAG_USED) != 0)</div>
+<div class="line"><a name="l13789"></a><span class="lineno">13789</span>&#160;        {</div>
+<div class="line"><a name="l13790"></a><span class="lineno">13790</span>&#160;            currBlockInfo.pMappedData = pBlock-&gt;GetMappedData();</div>
+<div class="line"><a name="l13791"></a><span class="lineno">13791</span>&#160;            <span class="comment">// It is not originally mapped - map it.</span></div>
+<div class="line"><a name="l13792"></a><span class="lineno">13792</span>&#160;            <span class="keywordflow">if</span>(currBlockInfo.pMappedData == VMA_NULL)</div>
+<div class="line"><a name="l13793"></a><span class="lineno">13793</span>&#160;            {</div>
+<div class="line"><a name="l13794"></a><span class="lineno">13794</span>&#160;                pDefragCtx-&gt;res = pBlock-&gt;Map(m_hAllocator, 1, &amp;currBlockInfo.pMappedData);</div>
+<div class="line"><a name="l13795"></a><span class="lineno">13795</span>&#160;                <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</div>
+<div class="line"><a name="l13796"></a><span class="lineno">13796</span>&#160;                {</div>
+<div class="line"><a name="l13797"></a><span class="lineno">13797</span>&#160;                    currBlockInfo.flags |= BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION;</div>
+<div class="line"><a name="l13798"></a><span class="lineno">13798</span>&#160;                }</div>
+<div class="line"><a name="l13799"></a><span class="lineno">13799</span>&#160;            }</div>
+<div class="line"><a name="l13800"></a><span class="lineno">13800</span>&#160;        }</div>
+<div class="line"><a name="l13801"></a><span class="lineno">13801</span>&#160;    }</div>
+<div class="line"><a name="l13802"></a><span class="lineno">13802</span>&#160; </div>
+<div class="line"><a name="l13803"></a><span class="lineno">13803</span>&#160;    <span class="comment">// Go over all moves. Do actual data transfer.</span></div>
+<div class="line"><a name="l13804"></a><span class="lineno">13804</span>&#160;    <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</div>
+<div class="line"><a name="l13805"></a><span class="lineno">13805</span>&#160;    {</div>
+<div class="line"><a name="l13806"></a><span class="lineno">13806</span>&#160;        <span class="keyword">const</span> VkDeviceSize nonCoherentAtomSize = m_hAllocator-&gt;m_PhysicalDeviceProperties.limits.nonCoherentAtomSize;</div>
+<div class="line"><a name="l13807"></a><span class="lineno">13807</span>&#160;        VkMappedMemoryRange memRange = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE };</div>
+<div class="line"><a name="l13808"></a><span class="lineno">13808</span>&#160; </div>
+<div class="line"><a name="l13809"></a><span class="lineno">13809</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> moveIndex = 0; moveIndex &lt; moveCount; ++moveIndex)</div>
+<div class="line"><a name="l13810"></a><span class="lineno">13810</span>&#160;        {</div>
+<div class="line"><a name="l13811"></a><span class="lineno">13811</span>&#160;            <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</div>
+<div class="line"><a name="l13812"></a><span class="lineno">13812</span>&#160; </div>
+<div class="line"><a name="l13813"></a><span class="lineno">13813</span>&#160;            <span class="keyword">const</span> BlockInfo&amp; srcBlockInfo = blockInfo[move.srcBlockIndex];</div>
+<div class="line"><a name="l13814"></a><span class="lineno">13814</span>&#160;            <span class="keyword">const</span> BlockInfo&amp; dstBlockInfo = blockInfo[move.dstBlockIndex];</div>
+<div class="line"><a name="l13815"></a><span class="lineno">13815</span>&#160; </div>
+<div class="line"><a name="l13816"></a><span class="lineno">13816</span>&#160;            VMA_ASSERT(srcBlockInfo.pMappedData &amp;&amp; dstBlockInfo.pMappedData);</div>
+<div class="line"><a name="l13817"></a><span class="lineno">13817</span>&#160; </div>
+<div class="line"><a name="l13818"></a><span class="lineno">13818</span>&#160;            <span class="comment">// Invalidate source.</span></div>
+<div class="line"><a name="l13819"></a><span class="lineno">13819</span>&#160;            <span class="keywordflow">if</span>(isNonCoherent)</div>
+<div class="line"><a name="l13820"></a><span class="lineno">13820</span>&#160;            {</div>
+<div class="line"><a name="l13821"></a><span class="lineno">13821</span>&#160;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pSrcBlock = m_Blocks[move.srcBlockIndex];</div>
+<div class="line"><a name="l13822"></a><span class="lineno">13822</span>&#160;                memRange.memory = pSrcBlock-&gt;GetDeviceMemory();</div>
+<div class="line"><a name="l13823"></a><span class="lineno">13823</span>&#160;                memRange.offset = VmaAlignDown(move.srcOffset, nonCoherentAtomSize);</div>
+<div class="line"><a name="l13824"></a><span class="lineno">13824</span>&#160;                memRange.size = VMA_MIN(</div>
+<div class="line"><a name="l13825"></a><span class="lineno">13825</span>&#160;                    VmaAlignUp(move.size + (move.srcOffset - memRange.offset), nonCoherentAtomSize),</div>
+<div class="line"><a name="l13826"></a><span class="lineno">13826</span>&#160;                    pSrcBlock-&gt;m_pMetadata-&gt;GetSize() - memRange.offset);</div>
+<div class="line"><a name="l13827"></a><span class="lineno">13827</span>&#160;                (*m_hAllocator-&gt;GetVulkanFunctions().vkInvalidateMappedMemoryRanges)(m_hAllocator-&gt;m_hDevice, 1, &amp;memRange);</div>
+<div class="line"><a name="l13828"></a><span class="lineno">13828</span>&#160;            }</div>
+<div class="line"><a name="l13829"></a><span class="lineno">13829</span>&#160; </div>
+<div class="line"><a name="l13830"></a><span class="lineno">13830</span>&#160;            <span class="comment">// THE PLACE WHERE ACTUAL DATA COPY HAPPENS.</span></div>
+<div class="line"><a name="l13831"></a><span class="lineno">13831</span>&#160;            memmove(</div>
+<div class="line"><a name="l13832"></a><span class="lineno">13832</span>&#160;                <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(dstBlockInfo.pMappedData) + move.dstOffset,</div>
+<div class="line"><a name="l13833"></a><span class="lineno">13833</span>&#160;                <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(srcBlockInfo.pMappedData) + move.srcOffset,</div>
+<div class="line"><a name="l13834"></a><span class="lineno">13834</span>&#160;                <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(move.size));</div>
+<div class="line"><a name="l13835"></a><span class="lineno">13835</span>&#160; </div>
+<div class="line"><a name="l13836"></a><span class="lineno">13836</span>&#160;            <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</div>
+<div class="line"><a name="l13837"></a><span class="lineno">13837</span>&#160;            {</div>
+<div class="line"><a name="l13838"></a><span class="lineno">13838</span>&#160;                VmaWriteMagicValue(dstBlockInfo.pMappedData, move.dstOffset - VMA_DEBUG_MARGIN);</div>
+<div class="line"><a name="l13839"></a><span class="lineno">13839</span>&#160;                VmaWriteMagicValue(dstBlockInfo.pMappedData, move.dstOffset + move.size);</div>
+<div class="line"><a name="l13840"></a><span class="lineno">13840</span>&#160;            }</div>
+<div class="line"><a name="l13841"></a><span class="lineno">13841</span>&#160; </div>
+<div class="line"><a name="l13842"></a><span class="lineno">13842</span>&#160;            <span class="comment">// Flush destination.</span></div>
+<div class="line"><a name="l13843"></a><span class="lineno">13843</span>&#160;            <span class="keywordflow">if</span>(isNonCoherent)</div>
+<div class="line"><a name="l13844"></a><span class="lineno">13844</span>&#160;            {</div>
+<div class="line"><a name="l13845"></a><span class="lineno">13845</span>&#160;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pDstBlock = m_Blocks[move.dstBlockIndex];</div>
+<div class="line"><a name="l13846"></a><span class="lineno">13846</span>&#160;                memRange.memory = pDstBlock-&gt;GetDeviceMemory();</div>
+<div class="line"><a name="l13847"></a><span class="lineno">13847</span>&#160;                memRange.offset = VmaAlignDown(move.dstOffset, nonCoherentAtomSize);</div>
+<div class="line"><a name="l13848"></a><span class="lineno">13848</span>&#160;                memRange.size = VMA_MIN(</div>
+<div class="line"><a name="l13849"></a><span class="lineno">13849</span>&#160;                    VmaAlignUp(move.size + (move.dstOffset - memRange.offset), nonCoherentAtomSize),</div>
+<div class="line"><a name="l13850"></a><span class="lineno">13850</span>&#160;                    pDstBlock-&gt;m_pMetadata-&gt;GetSize() - memRange.offset);</div>
+<div class="line"><a name="l13851"></a><span class="lineno">13851</span>&#160;                (*m_hAllocator-&gt;GetVulkanFunctions().vkFlushMappedMemoryRanges)(m_hAllocator-&gt;m_hDevice, 1, &amp;memRange);</div>
+<div class="line"><a name="l13852"></a><span class="lineno">13852</span>&#160;            }</div>
+<div class="line"><a name="l13853"></a><span class="lineno">13853</span>&#160;        }</div>
+<div class="line"><a name="l13854"></a><span class="lineno">13854</span>&#160;    }</div>
+<div class="line"><a name="l13855"></a><span class="lineno">13855</span>&#160; </div>
+<div class="line"><a name="l13856"></a><span class="lineno">13856</span>&#160;    <span class="comment">// Go over all blocks in reverse order. Unmap those that were mapped just for defragmentation.</span></div>
+<div class="line"><a name="l13857"></a><span class="lineno">13857</span>&#160;    <span class="comment">// Regardless of pCtx-&gt;res == VK_SUCCESS.</span></div>
+<div class="line"><a name="l13858"></a><span class="lineno">13858</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = blockCount; blockIndex--; )</div>
+<div class="line"><a name="l13859"></a><span class="lineno">13859</span>&#160;    {</div>
+<div class="line"><a name="l13860"></a><span class="lineno">13860</span>&#160;        <span class="keyword">const</span> BlockInfo&amp; currBlockInfo = blockInfo[blockIndex];</div>
+<div class="line"><a name="l13861"></a><span class="lineno">13861</span>&#160;        <span class="keywordflow">if</span>((currBlockInfo.flags &amp; BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION) != 0)</div>
+<div class="line"><a name="l13862"></a><span class="lineno">13862</span>&#160;        {</div>
+<div class="line"><a name="l13863"></a><span class="lineno">13863</span>&#160;            VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l13864"></a><span class="lineno">13864</span>&#160;            pBlock-&gt;Unmap(m_hAllocator, 1);</div>
+<div class="line"><a name="l13865"></a><span class="lineno">13865</span>&#160;        }</div>
+<div class="line"><a name="l13866"></a><span class="lineno">13866</span>&#160;    }</div>
+<div class="line"><a name="l13867"></a><span class="lineno">13867</span>&#160;}</div>
+<div class="line"><a name="l13868"></a><span class="lineno">13868</span>&#160; </div>
+<div class="line"><a name="l13869"></a><span class="lineno">13869</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::ApplyDefragmentationMovesGpu(</div>
+<div class="line"><a name="l13870"></a><span class="lineno">13870</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pDefragCtx,</div>
+<div class="line"><a name="l13871"></a><span class="lineno">13871</span>&#160;    VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
+<div class="line"><a name="l13872"></a><span class="lineno">13872</span>&#160;    VkCommandBuffer commandBuffer)</div>
+<div class="line"><a name="l13873"></a><span class="lineno">13873</span>&#160;{</div>
+<div class="line"><a name="l13874"></a><span class="lineno">13874</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_Blocks.size();</div>
+<div class="line"><a name="l13875"></a><span class="lineno">13875</span>&#160; </div>
+<div class="line"><a name="l13876"></a><span class="lineno">13876</span>&#160;    pDefragCtx-&gt;blockContexts.resize(blockCount);</div>
+<div class="line"><a name="l13877"></a><span class="lineno">13877</span>&#160;    memset(pDefragCtx-&gt;blockContexts.data(), 0, blockCount * <span class="keyword">sizeof</span>(VmaBlockDefragmentationContext));</div>
+<div class="line"><a name="l13878"></a><span class="lineno">13878</span>&#160; </div>
+<div class="line"><a name="l13879"></a><span class="lineno">13879</span>&#160;    <span class="comment">// Go over all moves. Mark blocks that are used with BLOCK_FLAG_USED.</span></div>
+<div class="line"><a name="l13880"></a><span class="lineno">13880</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> moveCount = moves.size();</div>
+<div class="line"><a name="l13881"></a><span class="lineno">13881</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> moveIndex = 0; moveIndex &lt; moveCount; ++moveIndex)</div>
+<div class="line"><a name="l13882"></a><span class="lineno">13882</span>&#160;    {</div>
+<div class="line"><a name="l13883"></a><span class="lineno">13883</span>&#160;        <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</div>
+<div class="line"><a name="l13884"></a><span class="lineno">13884</span>&#160; </div>
+<div class="line"><a name="l13885"></a><span class="lineno">13885</span>&#160;        <span class="comment">//if(move.type == VMA_ALLOCATION_TYPE_UNKNOWN)</span></div>
+<div class="line"><a name="l13886"></a><span class="lineno">13886</span>&#160;        {</div>
+<div class="line"><a name="l13887"></a><span class="lineno">13887</span>&#160;            <span class="comment">// Old school move still require us to map the whole block</span></div>
+<div class="line"><a name="l13888"></a><span class="lineno">13888</span>&#160;            pDefragCtx-&gt;blockContexts[move.srcBlockIndex].flags |= VmaBlockDefragmentationContext::BLOCK_FLAG_USED;</div>
+<div class="line"><a name="l13889"></a><span class="lineno">13889</span>&#160;            pDefragCtx-&gt;blockContexts[move.dstBlockIndex].flags |= VmaBlockDefragmentationContext::BLOCK_FLAG_USED;</div>
+<div class="line"><a name="l13890"></a><span class="lineno">13890</span>&#160;        }</div>
+<div class="line"><a name="l13891"></a><span class="lineno">13891</span>&#160;    }</div>
+<div class="line"><a name="l13892"></a><span class="lineno">13892</span>&#160; </div>
+<div class="line"><a name="l13893"></a><span class="lineno">13893</span>&#160;    VMA_ASSERT(pDefragCtx-&gt;res == VK_SUCCESS);</div>
+<div class="line"><a name="l13894"></a><span class="lineno">13894</span>&#160; </div>
+<div class="line"><a name="l13895"></a><span class="lineno">13895</span>&#160;    <span class="comment">// Go over all blocks. Create and bind buffer for whole block if necessary.</span></div>
+<div class="line"><a name="l13896"></a><span class="lineno">13896</span>&#160;    {</div>
+<div class="line"><a name="l13897"></a><span class="lineno">13897</span>&#160;        VkBufferCreateInfo bufCreateInfo;</div>
+<div class="line"><a name="l13898"></a><span class="lineno">13898</span>&#160;        VmaFillGpuDefragmentationBufferCreateInfo(bufCreateInfo);</div>
+<div class="line"><a name="l13899"></a><span class="lineno">13899</span>&#160; </div>
+<div class="line"><a name="l13900"></a><span class="lineno">13900</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; pDefragCtx-&gt;res == VK_SUCCESS &amp;&amp; blockIndex &lt; blockCount; ++blockIndex)</div>
+<div class="line"><a name="l13901"></a><span class="lineno">13901</span>&#160;        {</div>
+<div class="line"><a name="l13902"></a><span class="lineno">13902</span>&#160;            VmaBlockDefragmentationContext&amp; currBlockCtx = pDefragCtx-&gt;blockContexts[blockIndex];</div>
+<div class="line"><a name="l13903"></a><span class="lineno">13903</span>&#160;            VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l13904"></a><span class="lineno">13904</span>&#160;            <span class="keywordflow">if</span>((currBlockCtx.flags &amp; VmaBlockDefragmentationContext::BLOCK_FLAG_USED) != 0)</div>
+<div class="line"><a name="l13905"></a><span class="lineno">13905</span>&#160;            {</div>
+<div class="line"><a name="l13906"></a><span class="lineno">13906</span>&#160;                bufCreateInfo.size = pBlock-&gt;m_pMetadata-&gt;GetSize();</div>
+<div class="line"><a name="l13907"></a><span class="lineno">13907</span>&#160;                pDefragCtx-&gt;res = (*m_hAllocator-&gt;GetVulkanFunctions().vkCreateBuffer)(</div>
+<div class="line"><a name="l13908"></a><span class="lineno">13908</span>&#160;                    m_hAllocator-&gt;m_hDevice, &amp;bufCreateInfo, m_hAllocator-&gt;GetAllocationCallbacks(), &amp;currBlockCtx.hBuffer);</div>
+<div class="line"><a name="l13909"></a><span class="lineno">13909</span>&#160;                <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</div>
+<div class="line"><a name="l13910"></a><span class="lineno">13910</span>&#160;                {</div>
+<div class="line"><a name="l13911"></a><span class="lineno">13911</span>&#160;                    pDefragCtx-&gt;res = (*m_hAllocator-&gt;GetVulkanFunctions().vkBindBufferMemory)(</div>
+<div class="line"><a name="l13912"></a><span class="lineno">13912</span>&#160;                        m_hAllocator-&gt;m_hDevice, currBlockCtx.hBuffer, pBlock-&gt;GetDeviceMemory(), 0);</div>
+<div class="line"><a name="l13913"></a><span class="lineno">13913</span>&#160;                }</div>
+<div class="line"><a name="l13914"></a><span class="lineno">13914</span>&#160;            }</div>
+<div class="line"><a name="l13915"></a><span class="lineno">13915</span>&#160;        }</div>
+<div class="line"><a name="l13916"></a><span class="lineno">13916</span>&#160;    }</div>
+<div class="line"><a name="l13917"></a><span class="lineno">13917</span>&#160; </div>
+<div class="line"><a name="l13918"></a><span class="lineno">13918</span>&#160;    <span class="comment">// Go over all moves. Post data transfer commands to command buffer.</span></div>
+<div class="line"><a name="l13919"></a><span class="lineno">13919</span>&#160;    <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</div>
+<div class="line"><a name="l13920"></a><span class="lineno">13920</span>&#160;    {</div>
+<div class="line"><a name="l13921"></a><span class="lineno">13921</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> moveIndex = 0; moveIndex &lt; moveCount; ++moveIndex)</div>
+<div class="line"><a name="l13922"></a><span class="lineno">13922</span>&#160;        {</div>
+<div class="line"><a name="l13923"></a><span class="lineno">13923</span>&#160;            <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</div>
+<div class="line"><a name="l13924"></a><span class="lineno">13924</span>&#160; </div>
+<div class="line"><a name="l13925"></a><span class="lineno">13925</span>&#160;            <span class="keyword">const</span> VmaBlockDefragmentationContext&amp; srcBlockCtx = pDefragCtx-&gt;blockContexts[move.srcBlockIndex];</div>
+<div class="line"><a name="l13926"></a><span class="lineno">13926</span>&#160;            <span class="keyword">const</span> VmaBlockDefragmentationContext&amp; dstBlockCtx = pDefragCtx-&gt;blockContexts[move.dstBlockIndex];</div>
+<div class="line"><a name="l13927"></a><span class="lineno">13927</span>&#160; </div>
+<div class="line"><a name="l13928"></a><span class="lineno">13928</span>&#160;            VMA_ASSERT(srcBlockCtx.hBuffer &amp;&amp; dstBlockCtx.hBuffer);</div>
+<div class="line"><a name="l13929"></a><span class="lineno">13929</span>&#160; </div>
+<div class="line"><a name="l13930"></a><span class="lineno">13930</span>&#160;            VkBufferCopy region = {</div>
+<div class="line"><a name="l13931"></a><span class="lineno">13931</span>&#160;                move.srcOffset,</div>
+<div class="line"><a name="l13932"></a><span class="lineno">13932</span>&#160;                move.dstOffset,</div>
+<div class="line"><a name="l13933"></a><span class="lineno">13933</span>&#160;                move.size };</div>
+<div class="line"><a name="l13934"></a><span class="lineno">13934</span>&#160;            (*m_hAllocator-&gt;GetVulkanFunctions().vkCmdCopyBuffer)(</div>
+<div class="line"><a name="l13935"></a><span class="lineno">13935</span>&#160;                commandBuffer, srcBlockCtx.hBuffer, dstBlockCtx.hBuffer, 1, &amp;region);</div>
+<div class="line"><a name="l13936"></a><span class="lineno">13936</span>&#160;        }</div>
+<div class="line"><a name="l13937"></a><span class="lineno">13937</span>&#160;    }</div>
+<div class="line"><a name="l13938"></a><span class="lineno">13938</span>&#160; </div>
+<div class="line"><a name="l13939"></a><span class="lineno">13939</span>&#160;    <span class="comment">// Save buffers to defrag context for later destruction.</span></div>
+<div class="line"><a name="l13940"></a><span class="lineno">13940</span>&#160;    <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS &amp;&amp; moveCount &gt; 0)</div>
+<div class="line"><a name="l13941"></a><span class="lineno">13941</span>&#160;    {</div>
+<div class="line"><a name="l13942"></a><span class="lineno">13942</span>&#160;        pDefragCtx-&gt;res = VK_NOT_READY;</div>
+<div class="line"><a name="l13943"></a><span class="lineno">13943</span>&#160;    }</div>
+<div class="line"><a name="l13944"></a><span class="lineno">13944</span>&#160;}</div>
+<div class="line"><a name="l13945"></a><span class="lineno">13945</span>&#160; </div>
+<div class="line"><a name="l13946"></a><span class="lineno">13946</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::FreeEmptyBlocks(<a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pDefragmentationStats)</div>
+<div class="line"><a name="l13947"></a><span class="lineno">13947</span>&#160;{</div>
+<div class="line"><a name="l13948"></a><span class="lineno">13948</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = m_Blocks.size(); blockIndex--; )</div>
+<div class="line"><a name="l13949"></a><span class="lineno">13949</span>&#160;    {</div>
+<div class="line"><a name="l13950"></a><span class="lineno">13950</span>&#160;        VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l13951"></a><span class="lineno">13951</span>&#160;        <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;IsEmpty())</div>
+<div class="line"><a name="l13952"></a><span class="lineno">13952</span>&#160;        {</div>
+<div class="line"><a name="l13953"></a><span class="lineno">13953</span>&#160;            <span class="keywordflow">if</span>(m_Blocks.size() &gt; m_MinBlockCount)</div>
+<div class="line"><a name="l13954"></a><span class="lineno">13954</span>&#160;            {</div>
+<div class="line"><a name="l13955"></a><span class="lineno">13955</span>&#160;                <span class="keywordflow">if</span>(pDefragmentationStats != VMA_NULL)</div>
+<div class="line"><a name="l13956"></a><span class="lineno">13956</span>&#160;                {</div>
+<div class="line"><a name="l13957"></a><span class="lineno">13957</span>&#160;                    ++pDefragmentationStats-&gt;<a class="code" href="struct_vma_defragmentation_stats.html#a0113f1877904a5d1ee8f409216ff276b">deviceMemoryBlocksFreed</a>;</div>
+<div class="line"><a name="l13958"></a><span class="lineno">13958</span>&#160;                    pDefragmentationStats-&gt;<a class="code" href="struct_vma_defragmentation_stats.html#ab0cb9ac0dbc106c77e384ea676422f28">bytesFreed</a> += pBlock-&gt;m_pMetadata-&gt;GetSize();</div>
+<div class="line"><a name="l13959"></a><span class="lineno">13959</span>&#160;                }</div>
+<div class="line"><a name="l13960"></a><span class="lineno">13960</span>&#160; </div>
+<div class="line"><a name="l13961"></a><span class="lineno">13961</span>&#160;                VmaVectorRemove(m_Blocks, blockIndex);</div>
+<div class="line"><a name="l13962"></a><span class="lineno">13962</span>&#160;                pBlock-&gt;Destroy(m_hAllocator);</div>
+<div class="line"><a name="l13963"></a><span class="lineno">13963</span>&#160;                vma_delete(m_hAllocator, pBlock);</div>
+<div class="line"><a name="l13964"></a><span class="lineno">13964</span>&#160;            }</div>
+<div class="line"><a name="l13965"></a><span class="lineno">13965</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l13966"></a><span class="lineno">13966</span>&#160;            {</div>
+<div class="line"><a name="l13967"></a><span class="lineno">13967</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l13968"></a><span class="lineno">13968</span>&#160;            }</div>
+<div class="line"><a name="l13969"></a><span class="lineno">13969</span>&#160;        }</div>
+<div class="line"><a name="l13970"></a><span class="lineno">13970</span>&#160;    }</div>
+<div class="line"><a name="l13971"></a><span class="lineno">13971</span>&#160;    UpdateHasEmptyBlock();</div>
+<div class="line"><a name="l13972"></a><span class="lineno">13972</span>&#160;}</div>
+<div class="line"><a name="l13973"></a><span class="lineno">13973</span>&#160; </div>
+<div class="line"><a name="l13974"></a><span class="lineno">13974</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::UpdateHasEmptyBlock()</div>
+<div class="line"><a name="l13975"></a><span class="lineno">13975</span>&#160;{</div>
+<div class="line"><a name="l13976"></a><span class="lineno">13976</span>&#160;    m_HasEmptyBlock = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l13977"></a><span class="lineno">13977</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> index = 0, count = m_Blocks.size(); index &lt; count; ++index)</div>
+<div class="line"><a name="l13978"></a><span class="lineno">13978</span>&#160;    {</div>
+<div class="line"><a name="l13979"></a><span class="lineno">13979</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[index];</div>
+<div class="line"><a name="l13980"></a><span class="lineno">13980</span>&#160;        <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;IsEmpty())</div>
+<div class="line"><a name="l13981"></a><span class="lineno">13981</span>&#160;        {</div>
+<div class="line"><a name="l13982"></a><span class="lineno">13982</span>&#160;            m_HasEmptyBlock = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l13983"></a><span class="lineno">13983</span>&#160;            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l13984"></a><span class="lineno">13984</span>&#160;        }</div>
+<div class="line"><a name="l13985"></a><span class="lineno">13985</span>&#160;    }</div>
+<div class="line"><a name="l13986"></a><span class="lineno">13986</span>&#160;}</div>
+<div class="line"><a name="l13987"></a><span class="lineno">13987</span>&#160; </div>
+<div class="line"><a name="l13988"></a><span class="lineno">13988</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l13989"></a><span class="lineno">13989</span>&#160; </div>
+<div class="line"><a name="l13990"></a><span class="lineno">13990</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::PrintDetailedMap(<span class="keyword">class</span> VmaJsonWriter&amp; json)</div>
+<div class="line"><a name="l13991"></a><span class="lineno">13991</span>&#160;{</div>
+<div class="line"><a name="l13992"></a><span class="lineno">13992</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l13993"></a><span class="lineno">13993</span>&#160; </div>
+<div class="line"><a name="l13994"></a><span class="lineno">13994</span>&#160;    json.BeginObject();</div>
+<div class="line"><a name="l13995"></a><span class="lineno">13995</span>&#160; </div>
+<div class="line"><a name="l13996"></a><span class="lineno">13996</span>&#160;    <span class="keywordflow">if</span>(IsCustomPool())</div>
+<div class="line"><a name="l13997"></a><span class="lineno">13997</span>&#160;    {</div>
+<div class="line"><a name="l13998"></a><span class="lineno">13998</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span>* poolName = m_hParentPool-&gt;GetName();</div>
+<div class="line"><a name="l13999"></a><span class="lineno">13999</span>&#160;        <span class="keywordflow">if</span>(poolName != VMA_NULL &amp;&amp; poolName[0] != <span class="charliteral">&#39;\0&#39;</span>)</div>
+<div class="line"><a name="l14000"></a><span class="lineno">14000</span>&#160;        {</div>
+<div class="line"><a name="l14001"></a><span class="lineno">14001</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Name&quot;</span>);</div>
+<div class="line"><a name="l14002"></a><span class="lineno">14002</span>&#160;            json.WriteString(poolName);</div>
+<div class="line"><a name="l14003"></a><span class="lineno">14003</span>&#160;        }</div>
+<div class="line"><a name="l14004"></a><span class="lineno">14004</span>&#160; </div>
+<div class="line"><a name="l14005"></a><span class="lineno">14005</span>&#160;        json.WriteString(<span class="stringliteral">&quot;MemoryTypeIndex&quot;</span>);</div>
+<div class="line"><a name="l14006"></a><span class="lineno">14006</span>&#160;        json.WriteNumber(m_MemoryTypeIndex);</div>
+<div class="line"><a name="l14007"></a><span class="lineno">14007</span>&#160; </div>
+<div class="line"><a name="l14008"></a><span class="lineno">14008</span>&#160;        json.WriteString(<span class="stringliteral">&quot;BlockSize&quot;</span>);</div>
+<div class="line"><a name="l14009"></a><span class="lineno">14009</span>&#160;        json.WriteNumber(m_PreferredBlockSize);</div>
+<div class="line"><a name="l14010"></a><span class="lineno">14010</span>&#160; </div>
+<div class="line"><a name="l14011"></a><span class="lineno">14011</span>&#160;        json.WriteString(<span class="stringliteral">&quot;BlockCount&quot;</span>);</div>
+<div class="line"><a name="l14012"></a><span class="lineno">14012</span>&#160;        json.BeginObject(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l14013"></a><span class="lineno">14013</span>&#160;        <span class="keywordflow">if</span>(m_MinBlockCount &gt; 0)</div>
+<div class="line"><a name="l14014"></a><span class="lineno">14014</span>&#160;        {</div>
+<div class="line"><a name="l14015"></a><span class="lineno">14015</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Min&quot;</span>);</div>
+<div class="line"><a name="l14016"></a><span class="lineno">14016</span>&#160;            json.WriteNumber((uint64_t)m_MinBlockCount);</div>
+<div class="line"><a name="l14017"></a><span class="lineno">14017</span>&#160;        }</div>
+<div class="line"><a name="l14018"></a><span class="lineno">14018</span>&#160;        <span class="keywordflow">if</span>(m_MaxBlockCount &lt; SIZE_MAX)</div>
+<div class="line"><a name="l14019"></a><span class="lineno">14019</span>&#160;        {</div>
+<div class="line"><a name="l14020"></a><span class="lineno">14020</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Max&quot;</span>);</div>
+<div class="line"><a name="l14021"></a><span class="lineno">14021</span>&#160;            json.WriteNumber((uint64_t)m_MaxBlockCount);</div>
+<div class="line"><a name="l14022"></a><span class="lineno">14022</span>&#160;        }</div>
+<div class="line"><a name="l14023"></a><span class="lineno">14023</span>&#160;        json.WriteString(<span class="stringliteral">&quot;Cur&quot;</span>);</div>
+<div class="line"><a name="l14024"></a><span class="lineno">14024</span>&#160;        json.WriteNumber((uint64_t)m_Blocks.size());</div>
+<div class="line"><a name="l14025"></a><span class="lineno">14025</span>&#160;        json.EndObject();</div>
+<div class="line"><a name="l14026"></a><span class="lineno">14026</span>&#160; </div>
+<div class="line"><a name="l14027"></a><span class="lineno">14027</span>&#160;        <span class="keywordflow">if</span>(m_FrameInUseCount &gt; 0)</div>
+<div class="line"><a name="l14028"></a><span class="lineno">14028</span>&#160;        {</div>
+<div class="line"><a name="l14029"></a><span class="lineno">14029</span>&#160;            json.WriteString(<span class="stringliteral">&quot;FrameInUseCount&quot;</span>);</div>
+<div class="line"><a name="l14030"></a><span class="lineno">14030</span>&#160;            json.WriteNumber(m_FrameInUseCount);</div>
+<div class="line"><a name="l14031"></a><span class="lineno">14031</span>&#160;        }</div>
+<div class="line"><a name="l14032"></a><span class="lineno">14032</span>&#160; </div>
+<div class="line"><a name="l14033"></a><span class="lineno">14033</span>&#160;        <span class="keywordflow">if</span>(m_Algorithm != 0)</div>
+<div class="line"><a name="l14034"></a><span class="lineno">14034</span>&#160;        {</div>
+<div class="line"><a name="l14035"></a><span class="lineno">14035</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Algorithm&quot;</span>);</div>
+<div class="line"><a name="l14036"></a><span class="lineno">14036</span>&#160;            json.WriteString(VmaAlgorithmToStr(m_Algorithm));</div>
+<div class="line"><a name="l14037"></a><span class="lineno">14037</span>&#160;        }</div>
+<div class="line"><a name="l14038"></a><span class="lineno">14038</span>&#160;    }</div>
+<div class="line"><a name="l14039"></a><span class="lineno">14039</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14040"></a><span class="lineno">14040</span>&#160;    {</div>
+<div class="line"><a name="l14041"></a><span class="lineno">14041</span>&#160;        json.WriteString(<span class="stringliteral">&quot;PreferredBlockSize&quot;</span>);</div>
+<div class="line"><a name="l14042"></a><span class="lineno">14042</span>&#160;        json.WriteNumber(m_PreferredBlockSize);</div>
+<div class="line"><a name="l14043"></a><span class="lineno">14043</span>&#160;    }</div>
+<div class="line"><a name="l14044"></a><span class="lineno">14044</span>&#160; </div>
+<div class="line"><a name="l14045"></a><span class="lineno">14045</span>&#160;    json.WriteString(<span class="stringliteral">&quot;Blocks&quot;</span>);</div>
+<div class="line"><a name="l14046"></a><span class="lineno">14046</span>&#160;    json.BeginObject();</div>
+<div class="line"><a name="l14047"></a><span class="lineno">14047</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; m_Blocks.size(); ++i)</div>
+<div class="line"><a name="l14048"></a><span class="lineno">14048</span>&#160;    {</div>
+<div class="line"><a name="l14049"></a><span class="lineno">14049</span>&#160;        json.BeginString();</div>
+<div class="line"><a name="l14050"></a><span class="lineno">14050</span>&#160;        json.ContinueString(m_Blocks[i]-&gt;GetId());</div>
+<div class="line"><a name="l14051"></a><span class="lineno">14051</span>&#160;        json.EndString();</div>
+<div class="line"><a name="l14052"></a><span class="lineno">14052</span>&#160; </div>
+<div class="line"><a name="l14053"></a><span class="lineno">14053</span>&#160;        m_Blocks[i]-&gt;m_pMetadata-&gt;PrintDetailedMap(json);</div>
+<div class="line"><a name="l14054"></a><span class="lineno">14054</span>&#160;    }</div>
+<div class="line"><a name="l14055"></a><span class="lineno">14055</span>&#160;    json.EndObject();</div>
+<div class="line"><a name="l14056"></a><span class="lineno">14056</span>&#160; </div>
+<div class="line"><a name="l14057"></a><span class="lineno">14057</span>&#160;    json.EndObject();</div>
+<div class="line"><a name="l14058"></a><span class="lineno">14058</span>&#160;}</div>
+<div class="line"><a name="l14059"></a><span class="lineno">14059</span>&#160; </div>
+<div class="line"><a name="l14060"></a><span class="lineno">14060</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l14061"></a><span class="lineno">14061</span>&#160; </div>
+<div class="line"><a name="l14062"></a><span class="lineno">14062</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::Defragment(</div>
+<div class="line"><a name="l14063"></a><span class="lineno">14063</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pCtx,</div>
+<div class="line"><a name="l14064"></a><span class="lineno">14064</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats, <a class="code" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> flags,</div>
+<div class="line"><a name="l14065"></a><span class="lineno">14065</span>&#160;    VkDeviceSize&amp; maxCpuBytesToMove, uint32_t&amp; maxCpuAllocationsToMove,</div>
+<div class="line"><a name="l14066"></a><span class="lineno">14066</span>&#160;    VkDeviceSize&amp; maxGpuBytesToMove, uint32_t&amp; maxGpuAllocationsToMove,</div>
+<div class="line"><a name="l14067"></a><span class="lineno">14067</span>&#160;    VkCommandBuffer commandBuffer)</div>
+<div class="line"><a name="l14068"></a><span class="lineno">14068</span>&#160;{</div>
+<div class="line"><a name="l14069"></a><span class="lineno">14069</span>&#160;    pCtx-&gt;res = VK_SUCCESS;</div>
+<div class="line"><a name="l14070"></a><span class="lineno">14070</span>&#160; </div>
+<div class="line"><a name="l14071"></a><span class="lineno">14071</span>&#160;    <span class="keyword">const</span> VkMemoryPropertyFlags memPropFlags =</div>
+<div class="line"><a name="l14072"></a><span class="lineno">14072</span>&#160;        m_hAllocator-&gt;m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags;</div>
+<div class="line"><a name="l14073"></a><span class="lineno">14073</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> isHostVisible = (memPropFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0;</div>
+<div class="line"><a name="l14074"></a><span class="lineno">14074</span>&#160; </div>
+<div class="line"><a name="l14075"></a><span class="lineno">14075</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> canDefragmentOnCpu = maxCpuBytesToMove &gt; 0 &amp;&amp; maxCpuAllocationsToMove &gt; 0 &amp;&amp;</div>
+<div class="line"><a name="l14076"></a><span class="lineno">14076</span>&#160;        isHostVisible;</div>
+<div class="line"><a name="l14077"></a><span class="lineno">14077</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> canDefragmentOnGpu = maxGpuBytesToMove &gt; 0 &amp;&amp; maxGpuAllocationsToMove &gt; 0 &amp;&amp;</div>
+<div class="line"><a name="l14078"></a><span class="lineno">14078</span>&#160;        !IsCorruptionDetectionEnabled() &amp;&amp;</div>
+<div class="line"><a name="l14079"></a><span class="lineno">14079</span>&#160;        ((1u &lt;&lt; m_MemoryTypeIndex) &amp; m_hAllocator-&gt;GetGpuDefragmentationMemoryTypeBits()) != 0;</div>
+<div class="line"><a name="l14080"></a><span class="lineno">14080</span>&#160; </div>
+<div class="line"><a name="l14081"></a><span class="lineno">14081</span>&#160;    <span class="comment">// There are options to defragment this memory type.</span></div>
+<div class="line"><a name="l14082"></a><span class="lineno">14082</span>&#160;    <span class="keywordflow">if</span>(canDefragmentOnCpu || canDefragmentOnGpu)</div>
+<div class="line"><a name="l14083"></a><span class="lineno">14083</span>&#160;    {</div>
+<div class="line"><a name="l14084"></a><span class="lineno">14084</span>&#160;        <span class="keywordtype">bool</span> defragmentOnGpu;</div>
+<div class="line"><a name="l14085"></a><span class="lineno">14085</span>&#160;        <span class="comment">// There is only one option to defragment this memory type.</span></div>
+<div class="line"><a name="l14086"></a><span class="lineno">14086</span>&#160;        <span class="keywordflow">if</span>(canDefragmentOnGpu != canDefragmentOnCpu)</div>
+<div class="line"><a name="l14087"></a><span class="lineno">14087</span>&#160;        {</div>
+<div class="line"><a name="l14088"></a><span class="lineno">14088</span>&#160;            defragmentOnGpu = canDefragmentOnGpu;</div>
+<div class="line"><a name="l14089"></a><span class="lineno">14089</span>&#160;        }</div>
+<div class="line"><a name="l14090"></a><span class="lineno">14090</span>&#160;        <span class="comment">// Both options are available: Heuristics to choose the best one.</span></div>
+<div class="line"><a name="l14091"></a><span class="lineno">14091</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14092"></a><span class="lineno">14092</span>&#160;        {</div>
+<div class="line"><a name="l14093"></a><span class="lineno">14093</span>&#160;            defragmentOnGpu = (memPropFlags &amp; VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) != 0 ||</div>
+<div class="line"><a name="l14094"></a><span class="lineno">14094</span>&#160;                m_hAllocator-&gt;IsIntegratedGpu();</div>
+<div class="line"><a name="l14095"></a><span class="lineno">14095</span>&#160;        }</div>
+<div class="line"><a name="l14096"></a><span class="lineno">14096</span>&#160; </div>
+<div class="line"><a name="l14097"></a><span class="lineno">14097</span>&#160;        <span class="keywordtype">bool</span> overlappingMoveSupported = !defragmentOnGpu;</div>
+<div class="line"><a name="l14098"></a><span class="lineno">14098</span>&#160; </div>
+<div class="line"><a name="l14099"></a><span class="lineno">14099</span>&#160;        <span class="keywordflow">if</span>(m_hAllocator-&gt;m_UseMutex)</div>
+<div class="line"><a name="l14100"></a><span class="lineno">14100</span>&#160;        {</div>
+<div class="line"><a name="l14101"></a><span class="lineno">14101</span>&#160;            <span class="keywordflow">if</span>(flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a>)</div>
+<div class="line"><a name="l14102"></a><span class="lineno">14102</span>&#160;            {</div>
+<div class="line"><a name="l14103"></a><span class="lineno">14103</span>&#160;                <span class="keywordflow">if</span>(!m_Mutex.TryLockWrite())</div>
+<div class="line"><a name="l14104"></a><span class="lineno">14104</span>&#160;                {</div>
+<div class="line"><a name="l14105"></a><span class="lineno">14105</span>&#160;                    pCtx-&gt;res = VK_ERROR_INITIALIZATION_FAILED;</div>
+<div class="line"><a name="l14106"></a><span class="lineno">14106</span>&#160;                    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l14107"></a><span class="lineno">14107</span>&#160;                }</div>
+<div class="line"><a name="l14108"></a><span class="lineno">14108</span>&#160;            }</div>
+<div class="line"><a name="l14109"></a><span class="lineno">14109</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14110"></a><span class="lineno">14110</span>&#160;            {</div>
+<div class="line"><a name="l14111"></a><span class="lineno">14111</span>&#160;                m_Mutex.LockWrite();</div>
+<div class="line"><a name="l14112"></a><span class="lineno">14112</span>&#160;                pCtx-&gt;mutexLocked = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l14113"></a><span class="lineno">14113</span>&#160;            }</div>
+<div class="line"><a name="l14114"></a><span class="lineno">14114</span>&#160;        }</div>
+<div class="line"><a name="l14115"></a><span class="lineno">14115</span>&#160; </div>
+<div class="line"><a name="l14116"></a><span class="lineno">14116</span>&#160;        pCtx-&gt;Begin(overlappingMoveSupported, flags);</div>
+<div class="line"><a name="l14117"></a><span class="lineno">14117</span>&#160; </div>
+<div class="line"><a name="l14118"></a><span class="lineno">14118</span>&#160;        <span class="comment">// Defragment.</span></div>
+<div class="line"><a name="l14119"></a><span class="lineno">14119</span>&#160; </div>
+<div class="line"><a name="l14120"></a><span class="lineno">14120</span>&#160;        <span class="keyword">const</span> VkDeviceSize maxBytesToMove = defragmentOnGpu ? maxGpuBytesToMove : maxCpuBytesToMove;</div>
+<div class="line"><a name="l14121"></a><span class="lineno">14121</span>&#160;        <span class="keyword">const</span> uint32_t maxAllocationsToMove = defragmentOnGpu ? maxGpuAllocationsToMove : maxCpuAllocationsToMove;</div>
+<div class="line"><a name="l14122"></a><span class="lineno">14122</span>&#160;        pCtx-&gt;res = pCtx-&gt;GetAlgorithm()-&gt;Defragment(pCtx-&gt;defragmentationMoves, maxBytesToMove, maxAllocationsToMove, flags);</div>
+<div class="line"><a name="l14123"></a><span class="lineno">14123</span>&#160; </div>
+<div class="line"><a name="l14124"></a><span class="lineno">14124</span>&#160;        <span class="comment">// Accumulate statistics.</span></div>
+<div class="line"><a name="l14125"></a><span class="lineno">14125</span>&#160;        <span class="keywordflow">if</span>(pStats != VMA_NULL)</div>
+<div class="line"><a name="l14126"></a><span class="lineno">14126</span>&#160;        {</div>
+<div class="line"><a name="l14127"></a><span class="lineno">14127</span>&#160;            <span class="keyword">const</span> VkDeviceSize bytesMoved = pCtx-&gt;GetAlgorithm()-&gt;GetBytesMoved();</div>
+<div class="line"><a name="l14128"></a><span class="lineno">14128</span>&#160;            <span class="keyword">const</span> uint32_t allocationsMoved = pCtx-&gt;GetAlgorithm()-&gt;GetAllocationsMoved();</div>
+<div class="line"><a name="l14129"></a><span class="lineno">14129</span>&#160;            pStats-&gt;<a class="code" href="struct_vma_defragmentation_stats.html#a36f9d5df2a10ba2a36b16e126d60572d">bytesMoved</a> += bytesMoved;</div>
+<div class="line"><a name="l14130"></a><span class="lineno">14130</span>&#160;            pStats-&gt;<a class="code" href="struct_vma_defragmentation_stats.html#aefeabf130022008eadd75999478af3f9">allocationsMoved</a> += allocationsMoved;</div>
+<div class="line"><a name="l14131"></a><span class="lineno">14131</span>&#160;            VMA_ASSERT(bytesMoved &lt;= maxBytesToMove);</div>
+<div class="line"><a name="l14132"></a><span class="lineno">14132</span>&#160;            VMA_ASSERT(allocationsMoved &lt;= maxAllocationsToMove);</div>
+<div class="line"><a name="l14133"></a><span class="lineno">14133</span>&#160;            <span class="keywordflow">if</span>(defragmentOnGpu)</div>
+<div class="line"><a name="l14134"></a><span class="lineno">14134</span>&#160;            {</div>
+<div class="line"><a name="l14135"></a><span class="lineno">14135</span>&#160;                maxGpuBytesToMove -= bytesMoved;</div>
+<div class="line"><a name="l14136"></a><span class="lineno">14136</span>&#160;                maxGpuAllocationsToMove -= allocationsMoved;</div>
+<div class="line"><a name="l14137"></a><span class="lineno">14137</span>&#160;            }</div>
+<div class="line"><a name="l14138"></a><span class="lineno">14138</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14139"></a><span class="lineno">14139</span>&#160;            {</div>
+<div class="line"><a name="l14140"></a><span class="lineno">14140</span>&#160;                maxCpuBytesToMove -= bytesMoved;</div>
+<div class="line"><a name="l14141"></a><span class="lineno">14141</span>&#160;                maxCpuAllocationsToMove -= allocationsMoved;</div>
+<div class="line"><a name="l14142"></a><span class="lineno">14142</span>&#160;            }</div>
+<div class="line"><a name="l14143"></a><span class="lineno">14143</span>&#160;        }</div>
+<div class="line"><a name="l14144"></a><span class="lineno">14144</span>&#160; </div>
+<div class="line"><a name="l14145"></a><span class="lineno">14145</span>&#160;        <span class="keywordflow">if</span>(flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a>)</div>
+<div class="line"><a name="l14146"></a><span class="lineno">14146</span>&#160;        {</div>
+<div class="line"><a name="l14147"></a><span class="lineno">14147</span>&#160;            <span class="keywordflow">if</span>(m_hAllocator-&gt;m_UseMutex)</div>
+<div class="line"><a name="l14148"></a><span class="lineno">14148</span>&#160;                m_Mutex.UnlockWrite();</div>
+<div class="line"><a name="l14149"></a><span class="lineno">14149</span>&#160; </div>
+<div class="line"><a name="l14150"></a><span class="lineno">14150</span>&#160;            <span class="keywordflow">if</span>(pCtx-&gt;res &gt;= VK_SUCCESS &amp;&amp; !pCtx-&gt;defragmentationMoves.empty())</div>
+<div class="line"><a name="l14151"></a><span class="lineno">14151</span>&#160;                pCtx-&gt;res = VK_NOT_READY;</div>
+<div class="line"><a name="l14152"></a><span class="lineno">14152</span>&#160; </div>
+<div class="line"><a name="l14153"></a><span class="lineno">14153</span>&#160;            <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l14154"></a><span class="lineno">14154</span>&#160;        }</div>
+<div class="line"><a name="l14155"></a><span class="lineno">14155</span>&#160; </div>
+<div class="line"><a name="l14156"></a><span class="lineno">14156</span>&#160;        <span class="keywordflow">if</span>(pCtx-&gt;res &gt;= VK_SUCCESS)</div>
+<div class="line"><a name="l14157"></a><span class="lineno">14157</span>&#160;        {</div>
+<div class="line"><a name="l14158"></a><span class="lineno">14158</span>&#160;            <span class="keywordflow">if</span>(defragmentOnGpu)</div>
+<div class="line"><a name="l14159"></a><span class="lineno">14159</span>&#160;            {</div>
+<div class="line"><a name="l14160"></a><span class="lineno">14160</span>&#160;                ApplyDefragmentationMovesGpu(pCtx, pCtx-&gt;defragmentationMoves, commandBuffer);</div>
+<div class="line"><a name="l14161"></a><span class="lineno">14161</span>&#160;            }</div>
+<div class="line"><a name="l14162"></a><span class="lineno">14162</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14163"></a><span class="lineno">14163</span>&#160;            {</div>
+<div class="line"><a name="l14164"></a><span class="lineno">14164</span>&#160;                ApplyDefragmentationMovesCpu(pCtx, pCtx-&gt;defragmentationMoves);</div>
+<div class="line"><a name="l14165"></a><span class="lineno">14165</span>&#160;            }</div>
+<div class="line"><a name="l14166"></a><span class="lineno">14166</span>&#160;        }</div>
+<div class="line"><a name="l14167"></a><span class="lineno">14167</span>&#160;    }</div>
+<div class="line"><a name="l14168"></a><span class="lineno">14168</span>&#160;}</div>
+<div class="line"><a name="l14169"></a><span class="lineno">14169</span>&#160; </div>
+<div class="line"><a name="l14170"></a><span class="lineno">14170</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::DefragmentationEnd(</div>
+<div class="line"><a name="l14171"></a><span class="lineno">14171</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pCtx,</div>
+<div class="line"><a name="l14172"></a><span class="lineno">14172</span>&#160;    uint32_t flags,</div>
+<div class="line"><a name="l14173"></a><span class="lineno">14173</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats)</div>
+<div class="line"><a name="l14174"></a><span class="lineno">14174</span>&#160;{</div>
+<div class="line"><a name="l14175"></a><span class="lineno">14175</span>&#160;    <span class="keywordflow">if</span>(flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a> &amp;&amp; m_hAllocator-&gt;m_UseMutex)</div>
+<div class="line"><a name="l14176"></a><span class="lineno">14176</span>&#160;    {</div>
+<div class="line"><a name="l14177"></a><span class="lineno">14177</span>&#160;        VMA_ASSERT(pCtx-&gt;mutexLocked == <span class="keyword">false</span>);</div>
+<div class="line"><a name="l14178"></a><span class="lineno">14178</span>&#160; </div>
+<div class="line"><a name="l14179"></a><span class="lineno">14179</span>&#160;        <span class="comment">// Incremental defragmentation doesn&#39;t hold the lock, so when we enter here we don&#39;t actually have any</span></div>
+<div class="line"><a name="l14180"></a><span class="lineno">14180</span>&#160;        <span class="comment">// lock protecting us. Since we mutate state here, we have to take the lock out now</span></div>
+<div class="line"><a name="l14181"></a><span class="lineno">14181</span>&#160;        m_Mutex.LockWrite();</div>
+<div class="line"><a name="l14182"></a><span class="lineno">14182</span>&#160;        pCtx-&gt;mutexLocked = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l14183"></a><span class="lineno">14183</span>&#160;    }</div>
+<div class="line"><a name="l14184"></a><span class="lineno">14184</span>&#160; </div>
+<div class="line"><a name="l14185"></a><span class="lineno">14185</span>&#160;    <span class="comment">// If the mutex isn&#39;t locked we didn&#39;t do any work and there is nothing to delete.</span></div>
+<div class="line"><a name="l14186"></a><span class="lineno">14186</span>&#160;    <span class="keywordflow">if</span>(pCtx-&gt;mutexLocked || !m_hAllocator-&gt;m_UseMutex)</div>
+<div class="line"><a name="l14187"></a><span class="lineno">14187</span>&#160;    {</div>
+<div class="line"><a name="l14188"></a><span class="lineno">14188</span>&#160;        <span class="comment">// Destroy buffers.</span></div>
+<div class="line"><a name="l14189"></a><span class="lineno">14189</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = pCtx-&gt;blockContexts.size(); blockIndex--;)</div>
+<div class="line"><a name="l14190"></a><span class="lineno">14190</span>&#160;        {</div>
+<div class="line"><a name="l14191"></a><span class="lineno">14191</span>&#160;            VmaBlockDefragmentationContext &amp;blockCtx = pCtx-&gt;blockContexts[blockIndex];</div>
+<div class="line"><a name="l14192"></a><span class="lineno">14192</span>&#160;            <span class="keywordflow">if</span>(blockCtx.hBuffer)</div>
+<div class="line"><a name="l14193"></a><span class="lineno">14193</span>&#160;            {</div>
+<div class="line"><a name="l14194"></a><span class="lineno">14194</span>&#160;                (*m_hAllocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(m_hAllocator-&gt;m_hDevice, blockCtx.hBuffer, m_hAllocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l14195"></a><span class="lineno">14195</span>&#160;            }</div>
+<div class="line"><a name="l14196"></a><span class="lineno">14196</span>&#160;        }</div>
+<div class="line"><a name="l14197"></a><span class="lineno">14197</span>&#160; </div>
+<div class="line"><a name="l14198"></a><span class="lineno">14198</span>&#160;        <span class="keywordflow">if</span>(pCtx-&gt;res &gt;= VK_SUCCESS)</div>
+<div class="line"><a name="l14199"></a><span class="lineno">14199</span>&#160;        {</div>
+<div class="line"><a name="l14200"></a><span class="lineno">14200</span>&#160;            FreeEmptyBlocks(pStats);</div>
+<div class="line"><a name="l14201"></a><span class="lineno">14201</span>&#160;        }</div>
+<div class="line"><a name="l14202"></a><span class="lineno">14202</span>&#160;    }</div>
+<div class="line"><a name="l14203"></a><span class="lineno">14203</span>&#160; </div>
+<div class="line"><a name="l14204"></a><span class="lineno">14204</span>&#160;    <span class="keywordflow">if</span>(pCtx-&gt;mutexLocked)</div>
+<div class="line"><a name="l14205"></a><span class="lineno">14205</span>&#160;    {</div>
+<div class="line"><a name="l14206"></a><span class="lineno">14206</span>&#160;        VMA_ASSERT(m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l14207"></a><span class="lineno">14207</span>&#160;        m_Mutex.UnlockWrite();</div>
+<div class="line"><a name="l14208"></a><span class="lineno">14208</span>&#160;    }</div>
+<div class="line"><a name="l14209"></a><span class="lineno">14209</span>&#160;}</div>
+<div class="line"><a name="l14210"></a><span class="lineno">14210</span>&#160; </div>
+<div class="line"><a name="l14211"></a><span class="lineno">14211</span>&#160;uint32_t VmaBlockVector::ProcessDefragmentations(</div>
+<div class="line"><a name="l14212"></a><span class="lineno">14212</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext *pCtx,</div>
+<div class="line"><a name="l14213"></a><span class="lineno">14213</span>&#160;    <a class="code" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a>* pMove, uint32_t maxMoves)</div>
+<div class="line"><a name="l14214"></a><span class="lineno">14214</span>&#160;{</div>
+<div class="line"><a name="l14215"></a><span class="lineno">14215</span>&#160;    VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l14216"></a><span class="lineno">14216</span>&#160; </div>
+<div class="line"><a name="l14217"></a><span class="lineno">14217</span>&#160;    <span class="keyword">const</span> uint32_t moveCount = VMA_MIN(uint32_t(pCtx-&gt;defragmentationMoves.size()) - pCtx-&gt;defragmentationMovesProcessed, maxMoves);</div>
+<div class="line"><a name="l14218"></a><span class="lineno">14218</span>&#160; </div>
+<div class="line"><a name="l14219"></a><span class="lineno">14219</span>&#160;    <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; moveCount; ++ i)</div>
+<div class="line"><a name="l14220"></a><span class="lineno">14220</span>&#160;    {</div>
+<div class="line"><a name="l14221"></a><span class="lineno">14221</span>&#160;        VmaDefragmentationMove&amp; move = pCtx-&gt;defragmentationMoves[pCtx-&gt;defragmentationMovesProcessed + i];</div>
+<div class="line"><a name="l14222"></a><span class="lineno">14222</span>&#160; </div>
+<div class="line"><a name="l14223"></a><span class="lineno">14223</span>&#160;        pMove-&gt;<a class="code" href="struct_vma_defragmentation_pass_move_info.html#ae885c861c2dd8d622e6c19e281d035cc">allocation</a> = move.hAllocation;</div>
+<div class="line"><a name="l14224"></a><span class="lineno">14224</span>&#160;        pMove-&gt;<a class="code" href="struct_vma_defragmentation_pass_move_info.html#a06eb0c8690aa0d3478a036753492e769">memory</a> = move.pDstBlock-&gt;GetDeviceMemory();</div>
+<div class="line"><a name="l14225"></a><span class="lineno">14225</span>&#160;        pMove-&gt;<a class="code" href="struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6">offset</a> = move.dstOffset;</div>
+<div class="line"><a name="l14226"></a><span class="lineno">14226</span>&#160; </div>
+<div class="line"><a name="l14227"></a><span class="lineno">14227</span>&#160;        ++ pMove;</div>
+<div class="line"><a name="l14228"></a><span class="lineno">14228</span>&#160;    }</div>
+<div class="line"><a name="l14229"></a><span class="lineno">14229</span>&#160; </div>
+<div class="line"><a name="l14230"></a><span class="lineno">14230</span>&#160;    pCtx-&gt;defragmentationMovesProcessed += moveCount;</div>
+<div class="line"><a name="l14231"></a><span class="lineno">14231</span>&#160; </div>
+<div class="line"><a name="l14232"></a><span class="lineno">14232</span>&#160;    <span class="keywordflow">return</span> moveCount;</div>
+<div class="line"><a name="l14233"></a><span class="lineno">14233</span>&#160;}</div>
+<div class="line"><a name="l14234"></a><span class="lineno">14234</span>&#160; </div>
+<div class="line"><a name="l14235"></a><span class="lineno">14235</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::CommitDefragmentations(</div>
+<div class="line"><a name="l14236"></a><span class="lineno">14236</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext *pCtx,</div>
+<div class="line"><a name="l14237"></a><span class="lineno">14237</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats)</div>
+<div class="line"><a name="l14238"></a><span class="lineno">14238</span>&#160;{</div>
+<div class="line"><a name="l14239"></a><span class="lineno">14239</span>&#160;    VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l14240"></a><span class="lineno">14240</span>&#160; </div>
+<div class="line"><a name="l14241"></a><span class="lineno">14241</span>&#160;    <span class="keywordflow">for</span>(uint32_t i = pCtx-&gt;defragmentationMovesCommitted; i &lt; pCtx-&gt;defragmentationMovesProcessed; ++ i)</div>
+<div class="line"><a name="l14242"></a><span class="lineno">14242</span>&#160;    {</div>
+<div class="line"><a name="l14243"></a><span class="lineno">14243</span>&#160;        <span class="keyword">const</span> VmaDefragmentationMove &amp;move = pCtx-&gt;defragmentationMoves[i];</div>
+<div class="line"><a name="l14244"></a><span class="lineno">14244</span>&#160; </div>
+<div class="line"><a name="l14245"></a><span class="lineno">14245</span>&#160;        move.pSrcBlock-&gt;m_pMetadata-&gt;FreeAtOffset(move.srcOffset);</div>
+<div class="line"><a name="l14246"></a><span class="lineno">14246</span>&#160;        move.hAllocation-&gt;ChangeBlockAllocation(m_hAllocator, move.pDstBlock, move.dstOffset);</div>
+<div class="line"><a name="l14247"></a><span class="lineno">14247</span>&#160;    }</div>
+<div class="line"><a name="l14248"></a><span class="lineno">14248</span>&#160; </div>
+<div class="line"><a name="l14249"></a><span class="lineno">14249</span>&#160;    pCtx-&gt;defragmentationMovesCommitted = pCtx-&gt;defragmentationMovesProcessed;</div>
+<div class="line"><a name="l14250"></a><span class="lineno">14250</span>&#160;    FreeEmptyBlocks(pStats);</div>
+<div class="line"><a name="l14251"></a><span class="lineno">14251</span>&#160;}</div>
+<div class="line"><a name="l14252"></a><span class="lineno">14252</span>&#160; </div>
+<div class="line"><a name="l14253"></a><span class="lineno">14253</span>&#160;<span class="keywordtype">size_t</span> VmaBlockVector::CalcAllocationCount()<span class="keyword"> const</span></div>
+<div class="line"><a name="l14254"></a><span class="lineno">14254</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l14255"></a><span class="lineno">14255</span>&#160;    <span class="keywordtype">size_t</span> result = 0;</div>
+<div class="line"><a name="l14256"></a><span class="lineno">14256</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; m_Blocks.size(); ++i)</div>
+<div class="line"><a name="l14257"></a><span class="lineno">14257</span>&#160;    {</div>
+<div class="line"><a name="l14258"></a><span class="lineno">14258</span>&#160;        result += m_Blocks[i]-&gt;m_pMetadata-&gt;GetAllocationCount();</div>
+<div class="line"><a name="l14259"></a><span class="lineno">14259</span>&#160;    }</div>
+<div class="line"><a name="l14260"></a><span class="lineno">14260</span>&#160;    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l14261"></a><span class="lineno">14261</span>&#160;}</div>
+<div class="line"><a name="l14262"></a><span class="lineno">14262</span>&#160; </div>
+<div class="line"><a name="l14263"></a><span class="lineno">14263</span>&#160;<span class="keywordtype">bool</span> VmaBlockVector::IsBufferImageGranularityConflictPossible()<span class="keyword"> const</span></div>
+<div class="line"><a name="l14264"></a><span class="lineno">14264</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l14265"></a><span class="lineno">14265</span>&#160;    <span class="keywordflow">if</span>(m_BufferImageGranularity == 1)</div>
+<div class="line"><a name="l14266"></a><span class="lineno">14266</span>&#160;    {</div>
+<div class="line"><a name="l14267"></a><span class="lineno">14267</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l14268"></a><span class="lineno">14268</span>&#160;    }</div>
+<div class="line"><a name="l14269"></a><span class="lineno">14269</span>&#160;    VmaSuballocationType lastSuballocType = VMA_SUBALLOCATION_TYPE_FREE;</div>
+<div class="line"><a name="l14270"></a><span class="lineno">14270</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0, count = m_Blocks.size(); i &lt; count; ++i)</div>
+<div class="line"><a name="l14271"></a><span class="lineno">14271</span>&#160;    {</div>
+<div class="line"><a name="l14272"></a><span class="lineno">14272</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[i];</div>
+<div class="line"><a name="l14273"></a><span class="lineno">14273</span>&#160;        VMA_ASSERT(m_Algorithm == 0);</div>
+<div class="line"><a name="l14274"></a><span class="lineno">14274</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pMetadata = (VmaBlockMetadata_Generic*)pBlock-&gt;m_pMetadata;</div>
+<div class="line"><a name="l14275"></a><span class="lineno">14275</span>&#160;        <span class="keywordflow">if</span>(pMetadata-&gt;IsBufferImageGranularityConflictPossible(m_BufferImageGranularity, lastSuballocType))</div>
+<div class="line"><a name="l14276"></a><span class="lineno">14276</span>&#160;        {</div>
+<div class="line"><a name="l14277"></a><span class="lineno">14277</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l14278"></a><span class="lineno">14278</span>&#160;        }</div>
+<div class="line"><a name="l14279"></a><span class="lineno">14279</span>&#160;    }</div>
+<div class="line"><a name="l14280"></a><span class="lineno">14280</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l14281"></a><span class="lineno">14281</span>&#160;}</div>
+<div class="line"><a name="l14282"></a><span class="lineno">14282</span>&#160; </div>
+<div class="line"><a name="l14283"></a><span class="lineno">14283</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::MakePoolAllocationsLost(</div>
+<div class="line"><a name="l14284"></a><span class="lineno">14284</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l14285"></a><span class="lineno">14285</span>&#160;    <span class="keywordtype">size_t</span>* pLostAllocationCount)</div>
+<div class="line"><a name="l14286"></a><span class="lineno">14286</span>&#160;{</div>
+<div class="line"><a name="l14287"></a><span class="lineno">14287</span>&#160;    VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l14288"></a><span class="lineno">14288</span>&#160;    <span class="keywordtype">size_t</span> lostAllocationCount = 0;</div>
+<div class="line"><a name="l14289"></a><span class="lineno">14289</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</div>
+<div class="line"><a name="l14290"></a><span class="lineno">14290</span>&#160;    {</div>
+<div class="line"><a name="l14291"></a><span class="lineno">14291</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l14292"></a><span class="lineno">14292</span>&#160;        VMA_ASSERT(pBlock);</div>
+<div class="line"><a name="l14293"></a><span class="lineno">14293</span>&#160;        lostAllocationCount += pBlock-&gt;m_pMetadata-&gt;MakeAllocationsLost(currentFrameIndex, m_FrameInUseCount);</div>
+<div class="line"><a name="l14294"></a><span class="lineno">14294</span>&#160;    }</div>
+<div class="line"><a name="l14295"></a><span class="lineno">14295</span>&#160;    <span class="keywordflow">if</span>(pLostAllocationCount != VMA_NULL)</div>
+<div class="line"><a name="l14296"></a><span class="lineno">14296</span>&#160;    {</div>
+<div class="line"><a name="l14297"></a><span class="lineno">14297</span>&#160;        *pLostAllocationCount = lostAllocationCount;</div>
+<div class="line"><a name="l14298"></a><span class="lineno">14298</span>&#160;    }</div>
+<div class="line"><a name="l14299"></a><span class="lineno">14299</span>&#160;}</div>
+<div class="line"><a name="l14300"></a><span class="lineno">14300</span>&#160; </div>
+<div class="line"><a name="l14301"></a><span class="lineno">14301</span>&#160;VkResult VmaBlockVector::CheckCorruption()</div>
+<div class="line"><a name="l14302"></a><span class="lineno">14302</span>&#160;{</div>
+<div class="line"><a name="l14303"></a><span class="lineno">14303</span>&#160;    <span class="keywordflow">if</span>(!IsCorruptionDetectionEnabled())</div>
+<div class="line"><a name="l14304"></a><span class="lineno">14304</span>&#160;    {</div>
+<div class="line"><a name="l14305"></a><span class="lineno">14305</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</div>
+<div class="line"><a name="l14306"></a><span class="lineno">14306</span>&#160;    }</div>
+<div class="line"><a name="l14307"></a><span class="lineno">14307</span>&#160; </div>
+<div class="line"><a name="l14308"></a><span class="lineno">14308</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l14309"></a><span class="lineno">14309</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</div>
+<div class="line"><a name="l14310"></a><span class="lineno">14310</span>&#160;    {</div>
+<div class="line"><a name="l14311"></a><span class="lineno">14311</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l14312"></a><span class="lineno">14312</span>&#160;        VMA_ASSERT(pBlock);</div>
+<div class="line"><a name="l14313"></a><span class="lineno">14313</span>&#160;        VkResult res = pBlock-&gt;CheckCorruption(m_hAllocator);</div>
+<div class="line"><a name="l14314"></a><span class="lineno">14314</span>&#160;        <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l14315"></a><span class="lineno">14315</span>&#160;        {</div>
+<div class="line"><a name="l14316"></a><span class="lineno">14316</span>&#160;            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l14317"></a><span class="lineno">14317</span>&#160;        }</div>
+<div class="line"><a name="l14318"></a><span class="lineno">14318</span>&#160;    }</div>
+<div class="line"><a name="l14319"></a><span class="lineno">14319</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l14320"></a><span class="lineno">14320</span>&#160;}</div>
+<div class="line"><a name="l14321"></a><span class="lineno">14321</span>&#160; </div>
+<div class="line"><a name="l14322"></a><span class="lineno">14322</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::AddStats(<a class="code" href="struct_vma_stats.html">VmaStats</a>* pStats)</div>
+<div class="line"><a name="l14323"></a><span class="lineno">14323</span>&#160;{</div>
+<div class="line"><a name="l14324"></a><span class="lineno">14324</span>&#160;    <span class="keyword">const</span> uint32_t memTypeIndex = m_MemoryTypeIndex;</div>
+<div class="line"><a name="l14325"></a><span class="lineno">14325</span>&#160;    <span class="keyword">const</span> uint32_t memHeapIndex = m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
+<div class="line"><a name="l14326"></a><span class="lineno">14326</span>&#160; </div>
+<div class="line"><a name="l14327"></a><span class="lineno">14327</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l14328"></a><span class="lineno">14328</span>&#160; </div>
+<div class="line"><a name="l14329"></a><span class="lineno">14329</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</div>
+<div class="line"><a name="l14330"></a><span class="lineno">14330</span>&#160;    {</div>
+<div class="line"><a name="l14331"></a><span class="lineno">14331</span>&#160;        <span class="keyword">const</span> VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l14332"></a><span class="lineno">14332</span>&#160;        VMA_ASSERT(pBlock);</div>
+<div class="line"><a name="l14333"></a><span class="lineno">14333</span>&#160;        VMA_HEAVY_ASSERT(pBlock-&gt;Validate());</div>
+<div class="line"><a name="l14334"></a><span class="lineno">14334</span>&#160;        <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> allocationStatInfo;</div>
+<div class="line"><a name="l14335"></a><span class="lineno">14335</span>&#160;        pBlock-&gt;m_pMetadata-&gt;CalcAllocationStatInfo(allocationStatInfo);</div>
+<div class="line"><a name="l14336"></a><span class="lineno">14336</span>&#160;        VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>, allocationStatInfo);</div>
+<div class="line"><a name="l14337"></a><span class="lineno">14337</span>&#160;        VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[memTypeIndex], allocationStatInfo);</div>
+<div class="line"><a name="l14338"></a><span class="lineno">14338</span>&#160;        VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[memHeapIndex], allocationStatInfo);</div>
+<div class="line"><a name="l14339"></a><span class="lineno">14339</span>&#160;    }</div>
+<div class="line"><a name="l14340"></a><span class="lineno">14340</span>&#160;}</div>
+<div class="line"><a name="l14341"></a><span class="lineno">14341</span>&#160; </div>
+<div class="line"><a name="l14343"></a><span class="lineno">14343</span>&#160;<span class="comment">// VmaDefragmentationAlgorithm_Generic members definition</span></div>
+<div class="line"><a name="l14344"></a><span class="lineno">14344</span>&#160; </div>
+<div class="line"><a name="l14345"></a><span class="lineno">14345</span>&#160;VmaDefragmentationAlgorithm_Generic::VmaDefragmentationAlgorithm_Generic(</div>
+<div class="line"><a name="l14346"></a><span class="lineno">14346</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
+<div class="line"><a name="l14347"></a><span class="lineno">14347</span>&#160;    VmaBlockVector* pBlockVector,</div>
+<div class="line"><a name="l14348"></a><span class="lineno">14348</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l14349"></a><span class="lineno">14349</span>&#160;    <span class="keywordtype">bool</span> overlappingMoveSupported) :</div>
+<div class="line"><a name="l14350"></a><span class="lineno">14350</span>&#160;    VmaDefragmentationAlgorithm(hAllocator, pBlockVector, currentFrameIndex),</div>
+<div class="line"><a name="l14351"></a><span class="lineno">14351</span>&#160;    m_AllocationCount(0),</div>
+<div class="line"><a name="l14352"></a><span class="lineno">14352</span>&#160;    m_AllAllocations(false),</div>
+<div class="line"><a name="l14353"></a><span class="lineno">14353</span>&#160;    m_BytesMoved(0),</div>
+<div class="line"><a name="l14354"></a><span class="lineno">14354</span>&#160;    m_AllocationsMoved(0),</div>
+<div class="line"><a name="l14355"></a><span class="lineno">14355</span>&#160;    m_Blocks(VmaStlAllocator&lt;BlockInfo*&gt;(hAllocator-&gt;GetAllocationCallbacks()))</div>
+<div class="line"><a name="l14356"></a><span class="lineno">14356</span>&#160;{</div>
+<div class="line"><a name="l14357"></a><span class="lineno">14357</span>&#160;    <span class="comment">// Create block info for each block.</span></div>
+<div class="line"><a name="l14358"></a><span class="lineno">14358</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_pBlockVector-&gt;m_Blocks.size();</div>
+<div class="line"><a name="l14359"></a><span class="lineno">14359</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; blockIndex &lt; blockCount; ++blockIndex)</div>
+<div class="line"><a name="l14360"></a><span class="lineno">14360</span>&#160;    {</div>
+<div class="line"><a name="l14361"></a><span class="lineno">14361</span>&#160;        BlockInfo* pBlockInfo = vma_new(m_hAllocator, BlockInfo)(m_hAllocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l14362"></a><span class="lineno">14362</span>&#160;        pBlockInfo-&gt;m_OriginalBlockIndex = blockIndex;</div>
+<div class="line"><a name="l14363"></a><span class="lineno">14363</span>&#160;        pBlockInfo-&gt;m_pBlock = m_pBlockVector-&gt;m_Blocks[blockIndex];</div>
+<div class="line"><a name="l14364"></a><span class="lineno">14364</span>&#160;        m_Blocks.push_back(pBlockInfo);</div>
+<div class="line"><a name="l14365"></a><span class="lineno">14365</span>&#160;    }</div>
+<div class="line"><a name="l14366"></a><span class="lineno">14366</span>&#160; </div>
+<div class="line"><a name="l14367"></a><span class="lineno">14367</span>&#160;    <span class="comment">// Sort them by m_pBlock pointer value.</span></div>
+<div class="line"><a name="l14368"></a><span class="lineno">14368</span>&#160;    VMA_SORT(m_Blocks.begin(), m_Blocks.end(), BlockPointerLess());</div>
+<div class="line"><a name="l14369"></a><span class="lineno">14369</span>&#160;}</div>
+<div class="line"><a name="l14370"></a><span class="lineno">14370</span>&#160; </div>
+<div class="line"><a name="l14371"></a><span class="lineno">14371</span>&#160;VmaDefragmentationAlgorithm_Generic::~VmaDefragmentationAlgorithm_Generic()</div>
+<div class="line"><a name="l14372"></a><span class="lineno">14372</span>&#160;{</div>
+<div class="line"><a name="l14373"></a><span class="lineno">14373</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_Blocks.size(); i--; )</div>
+<div class="line"><a name="l14374"></a><span class="lineno">14374</span>&#160;    {</div>
+<div class="line"><a name="l14375"></a><span class="lineno">14375</span>&#160;        vma_delete(m_hAllocator, m_Blocks[i]);</div>
+<div class="line"><a name="l14376"></a><span class="lineno">14376</span>&#160;    }</div>
+<div class="line"><a name="l14377"></a><span class="lineno">14377</span>&#160;}</div>
+<div class="line"><a name="l14378"></a><span class="lineno">14378</span>&#160; </div>
+<div class="line"><a name="l14379"></a><span class="lineno">14379</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationAlgorithm_Generic::AddAllocation(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAlloc, VkBool32* pChanged)</div>
+<div class="line"><a name="l14380"></a><span class="lineno">14380</span>&#160;{</div>
+<div class="line"><a name="l14381"></a><span class="lineno">14381</span>&#160;    <span class="comment">// Now as we are inside VmaBlockVector::m_Mutex, we can make final check if this allocation was not lost.</span></div>
+<div class="line"><a name="l14382"></a><span class="lineno">14382</span>&#160;    <span class="keywordflow">if</span>(hAlloc-&gt;GetLastUseFrameIndex() != VMA_FRAME_INDEX_LOST)</div>
+<div class="line"><a name="l14383"></a><span class="lineno">14383</span>&#160;    {</div>
+<div class="line"><a name="l14384"></a><span class="lineno">14384</span>&#160;        VmaDeviceMemoryBlock* pBlock = hAlloc-&gt;GetBlock();</div>
+<div class="line"><a name="l14385"></a><span class="lineno">14385</span>&#160;        BlockInfoVector::iterator it = VmaBinaryFindFirstNotLess(m_Blocks.begin(), m_Blocks.end(), pBlock, BlockPointerLess());</div>
+<div class="line"><a name="l14386"></a><span class="lineno">14386</span>&#160;        <span class="keywordflow">if</span>(it != m_Blocks.end() &amp;&amp; (*it)-&gt;m_pBlock == pBlock)</div>
+<div class="line"><a name="l14387"></a><span class="lineno">14387</span>&#160;        {</div>
+<div class="line"><a name="l14388"></a><span class="lineno">14388</span>&#160;            AllocationInfo allocInfo = AllocationInfo(hAlloc, pChanged);</div>
+<div class="line"><a name="l14389"></a><span class="lineno">14389</span>&#160;            (*it)-&gt;m_Allocations.push_back(allocInfo);</div>
+<div class="line"><a name="l14390"></a><span class="lineno">14390</span>&#160;        }</div>
+<div class="line"><a name="l14391"></a><span class="lineno">14391</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14392"></a><span class="lineno">14392</span>&#160;        {</div>
+<div class="line"><a name="l14393"></a><span class="lineno">14393</span>&#160;            VMA_ASSERT(0);</div>
+<div class="line"><a name="l14394"></a><span class="lineno">14394</span>&#160;        }</div>
+<div class="line"><a name="l14395"></a><span class="lineno">14395</span>&#160; </div>
+<div class="line"><a name="l14396"></a><span class="lineno">14396</span>&#160;        ++m_AllocationCount;</div>
+<div class="line"><a name="l14397"></a><span class="lineno">14397</span>&#160;    }</div>
+<div class="line"><a name="l14398"></a><span class="lineno">14398</span>&#160;}</div>
+<div class="line"><a name="l14399"></a><span class="lineno">14399</span>&#160; </div>
+<div class="line"><a name="l14400"></a><span class="lineno">14400</span>&#160;VkResult VmaDefragmentationAlgorithm_Generic::DefragmentRound(</div>
+<div class="line"><a name="l14401"></a><span class="lineno">14401</span>&#160;    VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
+<div class="line"><a name="l14402"></a><span class="lineno">14402</span>&#160;    VkDeviceSize maxBytesToMove,</div>
+<div class="line"><a name="l14403"></a><span class="lineno">14403</span>&#160;    uint32_t maxAllocationsToMove,</div>
+<div class="line"><a name="l14404"></a><span class="lineno">14404</span>&#160;    <span class="keywordtype">bool</span> freeOldAllocations)</div>
+<div class="line"><a name="l14405"></a><span class="lineno">14405</span>&#160;{</div>
+<div class="line"><a name="l14406"></a><span class="lineno">14406</span>&#160;    <span class="keywordflow">if</span>(m_Blocks.empty())</div>
+<div class="line"><a name="l14407"></a><span class="lineno">14407</span>&#160;    {</div>
+<div class="line"><a name="l14408"></a><span class="lineno">14408</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l14409"></a><span class="lineno">14409</span>&#160;    }</div>
+<div class="line"><a name="l14410"></a><span class="lineno">14410</span>&#160; </div>
+<div class="line"><a name="l14411"></a><span class="lineno">14411</span>&#160;    <span class="comment">// This is a choice based on research.</span></div>
+<div class="line"><a name="l14412"></a><span class="lineno">14412</span>&#160;    <span class="comment">// Option 1:</span></div>
+<div class="line"><a name="l14413"></a><span class="lineno">14413</span>&#160;    uint32_t strategy = <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</a>;</div>
+<div class="line"><a name="l14414"></a><span class="lineno">14414</span>&#160;    <span class="comment">// Option 2:</span></div>
+<div class="line"><a name="l14415"></a><span class="lineno">14415</span>&#160;    <span class="comment">//uint32_t strategy = VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT;</span></div>
+<div class="line"><a name="l14416"></a><span class="lineno">14416</span>&#160;    <span class="comment">// Option 3:</span></div>
+<div class="line"><a name="l14417"></a><span class="lineno">14417</span>&#160;    <span class="comment">//uint32_t strategy = VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT;</span></div>
+<div class="line"><a name="l14418"></a><span class="lineno">14418</span>&#160; </div>
+<div class="line"><a name="l14419"></a><span class="lineno">14419</span>&#160;    <span class="keywordtype">size_t</span> srcBlockMinIndex = 0;</div>
+<div class="line"><a name="l14420"></a><span class="lineno">14420</span>&#160;    <span class="comment">// When FAST_ALGORITHM, move allocations from only last out of blocks that contain non-movable allocations.</span></div>
+<div class="line"><a name="l14421"></a><span class="lineno">14421</span>&#160;    <span class="comment">/*</span></div>
+<div class="line"><a name="l14422"></a><span class="lineno">14422</span>&#160;<span class="comment">    if(m_AlgorithmFlags &amp; VMA_DEFRAGMENTATION_FAST_ALGORITHM_BIT)</span></div>
+<div class="line"><a name="l14423"></a><span class="lineno">14423</span>&#160;<span class="comment">    {</span></div>
+<div class="line"><a name="l14424"></a><span class="lineno">14424</span>&#160;<span class="comment">        const size_t blocksWithNonMovableCount = CalcBlocksWithNonMovableCount();</span></div>
+<div class="line"><a name="l14425"></a><span class="lineno">14425</span>&#160;<span class="comment">        if(blocksWithNonMovableCount &gt; 0)</span></div>
+<div class="line"><a name="l14426"></a><span class="lineno">14426</span>&#160;<span class="comment">        {</span></div>
+<div class="line"><a name="l14427"></a><span class="lineno">14427</span>&#160;<span class="comment">            srcBlockMinIndex = blocksWithNonMovableCount - 1;</span></div>
+<div class="line"><a name="l14428"></a><span class="lineno">14428</span>&#160;<span class="comment">        }</span></div>
+<div class="line"><a name="l14429"></a><span class="lineno">14429</span>&#160;<span class="comment">    }</span></div>
+<div class="line"><a name="l14430"></a><span class="lineno">14430</span>&#160;<span class="comment">    */</span></div>
+<div class="line"><a name="l14431"></a><span class="lineno">14431</span>&#160; </div>
+<div class="line"><a name="l14432"></a><span class="lineno">14432</span>&#160;    <span class="keywordtype">size_t</span> srcBlockIndex = m_Blocks.size() - 1;</div>
+<div class="line"><a name="l14433"></a><span class="lineno">14433</span>&#160;    <span class="keywordtype">size_t</span> srcAllocIndex = SIZE_MAX;</div>
+<div class="line"><a name="l14434"></a><span class="lineno">14434</span>&#160;    <span class="keywordflow">for</span>(;;)</div>
+<div class="line"><a name="l14435"></a><span class="lineno">14435</span>&#160;    {</div>
+<div class="line"><a name="l14436"></a><span class="lineno">14436</span>&#160;        <span class="comment">// 1. Find next allocation to move.</span></div>
+<div class="line"><a name="l14437"></a><span class="lineno">14437</span>&#160;        <span class="comment">// 1.1. Start from last to first m_Blocks - they are sorted from most &quot;destination&quot; to most &quot;source&quot;.</span></div>
+<div class="line"><a name="l14438"></a><span class="lineno">14438</span>&#160;        <span class="comment">// 1.2. Then start from last to first m_Allocations.</span></div>
+<div class="line"><a name="l14439"></a><span class="lineno">14439</span>&#160;        <span class="keywordflow">while</span>(srcAllocIndex &gt;= m_Blocks[srcBlockIndex]-&gt;m_Allocations.size())</div>
+<div class="line"><a name="l14440"></a><span class="lineno">14440</span>&#160;        {</div>
+<div class="line"><a name="l14441"></a><span class="lineno">14441</span>&#160;            <span class="keywordflow">if</span>(m_Blocks[srcBlockIndex]-&gt;m_Allocations.empty())</div>
+<div class="line"><a name="l14442"></a><span class="lineno">14442</span>&#160;            {</div>
+<div class="line"><a name="l14443"></a><span class="lineno">14443</span>&#160;                <span class="comment">// Finished: no more allocations to process.</span></div>
+<div class="line"><a name="l14444"></a><span class="lineno">14444</span>&#160;                <span class="keywordflow">if</span>(srcBlockIndex == srcBlockMinIndex)</div>
+<div class="line"><a name="l14445"></a><span class="lineno">14445</span>&#160;                {</div>
+<div class="line"><a name="l14446"></a><span class="lineno">14446</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l14447"></a><span class="lineno">14447</span>&#160;                }</div>
+<div class="line"><a name="l14448"></a><span class="lineno">14448</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14449"></a><span class="lineno">14449</span>&#160;                {</div>
+<div class="line"><a name="l14450"></a><span class="lineno">14450</span>&#160;                    --srcBlockIndex;</div>
+<div class="line"><a name="l14451"></a><span class="lineno">14451</span>&#160;                    srcAllocIndex = SIZE_MAX;</div>
+<div class="line"><a name="l14452"></a><span class="lineno">14452</span>&#160;                }</div>
+<div class="line"><a name="l14453"></a><span class="lineno">14453</span>&#160;            }</div>
+<div class="line"><a name="l14454"></a><span class="lineno">14454</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14455"></a><span class="lineno">14455</span>&#160;            {</div>
+<div class="line"><a name="l14456"></a><span class="lineno">14456</span>&#160;                srcAllocIndex = m_Blocks[srcBlockIndex]-&gt;m_Allocations.size() - 1;</div>
+<div class="line"><a name="l14457"></a><span class="lineno">14457</span>&#160;            }</div>
+<div class="line"><a name="l14458"></a><span class="lineno">14458</span>&#160;        }</div>
+<div class="line"><a name="l14459"></a><span class="lineno">14459</span>&#160; </div>
+<div class="line"><a name="l14460"></a><span class="lineno">14460</span>&#160;        BlockInfo* pSrcBlockInfo = m_Blocks[srcBlockIndex];</div>
+<div class="line"><a name="l14461"></a><span class="lineno">14461</span>&#160;        AllocationInfo&amp; allocInfo = pSrcBlockInfo-&gt;m_Allocations[srcAllocIndex];</div>
+<div class="line"><a name="l14462"></a><span class="lineno">14462</span>&#160; </div>
+<div class="line"><a name="l14463"></a><span class="lineno">14463</span>&#160;        <span class="keyword">const</span> VkDeviceSize size = allocInfo.m_hAllocation-&gt;GetSize();</div>
+<div class="line"><a name="l14464"></a><span class="lineno">14464</span>&#160;        <span class="keyword">const</span> VkDeviceSize srcOffset = allocInfo.m_hAllocation-&gt;GetOffset();</div>
+<div class="line"><a name="l14465"></a><span class="lineno">14465</span>&#160;        <span class="keyword">const</span> VkDeviceSize alignment = allocInfo.m_hAllocation-&gt;GetAlignment();</div>
+<div class="line"><a name="l14466"></a><span class="lineno">14466</span>&#160;        <span class="keyword">const</span> VmaSuballocationType suballocType = allocInfo.m_hAllocation-&gt;GetSuballocationType();</div>
+<div class="line"><a name="l14467"></a><span class="lineno">14467</span>&#160; </div>
+<div class="line"><a name="l14468"></a><span class="lineno">14468</span>&#160;        <span class="comment">// 2. Try to find new place for this allocation in preceding or current block.</span></div>
+<div class="line"><a name="l14469"></a><span class="lineno">14469</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> dstBlockIndex = 0; dstBlockIndex &lt;= srcBlockIndex; ++dstBlockIndex)</div>
+<div class="line"><a name="l14470"></a><span class="lineno">14470</span>&#160;        {</div>
+<div class="line"><a name="l14471"></a><span class="lineno">14471</span>&#160;            BlockInfo* pDstBlockInfo = m_Blocks[dstBlockIndex];</div>
+<div class="line"><a name="l14472"></a><span class="lineno">14472</span>&#160;            VmaAllocationRequest dstAllocRequest;</div>
+<div class="line"><a name="l14473"></a><span class="lineno">14473</span>&#160;            <span class="keywordflow">if</span>(pDstBlockInfo-&gt;m_pBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
+<div class="line"><a name="l14474"></a><span class="lineno">14474</span>&#160;                m_CurrentFrameIndex,</div>
+<div class="line"><a name="l14475"></a><span class="lineno">14475</span>&#160;                m_pBlockVector-&gt;GetFrameInUseCount(),</div>
+<div class="line"><a name="l14476"></a><span class="lineno">14476</span>&#160;                m_pBlockVector-&gt;GetBufferImageGranularity(),</div>
+<div class="line"><a name="l14477"></a><span class="lineno">14477</span>&#160;                size,</div>
+<div class="line"><a name="l14478"></a><span class="lineno">14478</span>&#160;                alignment,</div>
+<div class="line"><a name="l14479"></a><span class="lineno">14479</span>&#160;                <span class="keyword">false</span>, <span class="comment">// upperAddress</span></div>
+<div class="line"><a name="l14480"></a><span class="lineno">14480</span>&#160;                suballocType,</div>
+<div class="line"><a name="l14481"></a><span class="lineno">14481</span>&#160;                <span class="keyword">false</span>, <span class="comment">// canMakeOtherLost</span></div>
+<div class="line"><a name="l14482"></a><span class="lineno">14482</span>&#160;                strategy,</div>
+<div class="line"><a name="l14483"></a><span class="lineno">14483</span>&#160;                &amp;dstAllocRequest) &amp;&amp;</div>
+<div class="line"><a name="l14484"></a><span class="lineno">14484</span>&#160;            MoveMakesSense(</div>
+<div class="line"><a name="l14485"></a><span class="lineno">14485</span>&#160;                dstBlockIndex, dstAllocRequest.offset, srcBlockIndex, srcOffset))</div>
+<div class="line"><a name="l14486"></a><span class="lineno">14486</span>&#160;            {</div>
+<div class="line"><a name="l14487"></a><span class="lineno">14487</span>&#160;                VMA_ASSERT(dstAllocRequest.itemsToMakeLostCount == 0);</div>
+<div class="line"><a name="l14488"></a><span class="lineno">14488</span>&#160; </div>
+<div class="line"><a name="l14489"></a><span class="lineno">14489</span>&#160;                <span class="comment">// Reached limit on number of allocations or bytes to move.</span></div>
+<div class="line"><a name="l14490"></a><span class="lineno">14490</span>&#160;                <span class="keywordflow">if</span>((m_AllocationsMoved + 1 &gt; maxAllocationsToMove) ||</div>
+<div class="line"><a name="l14491"></a><span class="lineno">14491</span>&#160;                    (m_BytesMoved + size &gt; maxBytesToMove))</div>
+<div class="line"><a name="l14492"></a><span class="lineno">14492</span>&#160;                {</div>
+<div class="line"><a name="l14493"></a><span class="lineno">14493</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l14494"></a><span class="lineno">14494</span>&#160;                }</div>
+<div class="line"><a name="l14495"></a><span class="lineno">14495</span>&#160; </div>
+<div class="line"><a name="l14496"></a><span class="lineno">14496</span>&#160;                VmaDefragmentationMove move = {};</div>
+<div class="line"><a name="l14497"></a><span class="lineno">14497</span>&#160;                move.srcBlockIndex = pSrcBlockInfo-&gt;m_OriginalBlockIndex;</div>
+<div class="line"><a name="l14498"></a><span class="lineno">14498</span>&#160;                move.dstBlockIndex = pDstBlockInfo-&gt;m_OriginalBlockIndex;</div>
+<div class="line"><a name="l14499"></a><span class="lineno">14499</span>&#160;                move.srcOffset = srcOffset;</div>
+<div class="line"><a name="l14500"></a><span class="lineno">14500</span>&#160;                move.dstOffset = dstAllocRequest.offset;</div>
+<div class="line"><a name="l14501"></a><span class="lineno">14501</span>&#160;                move.size = size;</div>
+<div class="line"><a name="l14502"></a><span class="lineno">14502</span>&#160;                move.hAllocation = allocInfo.m_hAllocation;</div>
+<div class="line"><a name="l14503"></a><span class="lineno">14503</span>&#160;                move.pSrcBlock = pSrcBlockInfo-&gt;m_pBlock;</div>
+<div class="line"><a name="l14504"></a><span class="lineno">14504</span>&#160;                move.pDstBlock = pDstBlockInfo-&gt;m_pBlock;</div>
+<div class="line"><a name="l14505"></a><span class="lineno">14505</span>&#160; </div>
+<div class="line"><a name="l14506"></a><span class="lineno">14506</span>&#160;                moves.push_back(move);</div>
+<div class="line"><a name="l14507"></a><span class="lineno">14507</span>&#160; </div>
+<div class="line"><a name="l14508"></a><span class="lineno">14508</span>&#160;                pDstBlockInfo-&gt;m_pBlock-&gt;m_pMetadata-&gt;Alloc(</div>
+<div class="line"><a name="l14509"></a><span class="lineno">14509</span>&#160;                    dstAllocRequest,</div>
+<div class="line"><a name="l14510"></a><span class="lineno">14510</span>&#160;                    suballocType,</div>
+<div class="line"><a name="l14511"></a><span class="lineno">14511</span>&#160;                    size,</div>
+<div class="line"><a name="l14512"></a><span class="lineno">14512</span>&#160;                    allocInfo.m_hAllocation);</div>
+<div class="line"><a name="l14513"></a><span class="lineno">14513</span>&#160; </div>
+<div class="line"><a name="l14514"></a><span class="lineno">14514</span>&#160;                <span class="keywordflow">if</span>(freeOldAllocations)</div>
+<div class="line"><a name="l14515"></a><span class="lineno">14515</span>&#160;                {</div>
+<div class="line"><a name="l14516"></a><span class="lineno">14516</span>&#160;                    pSrcBlockInfo-&gt;m_pBlock-&gt;m_pMetadata-&gt;FreeAtOffset(srcOffset);</div>
+<div class="line"><a name="l14517"></a><span class="lineno">14517</span>&#160;                    allocInfo.m_hAllocation-&gt;ChangeBlockAllocation(m_hAllocator, pDstBlockInfo-&gt;m_pBlock, dstAllocRequest.offset);</div>
+<div class="line"><a name="l14518"></a><span class="lineno">14518</span>&#160;                }</div>
+<div class="line"><a name="l14519"></a><span class="lineno">14519</span>&#160; </div>
+<div class="line"><a name="l14520"></a><span class="lineno">14520</span>&#160;                <span class="keywordflow">if</span>(allocInfo.m_pChanged != VMA_NULL)</div>
+<div class="line"><a name="l14521"></a><span class="lineno">14521</span>&#160;                {</div>
+<div class="line"><a name="l14522"></a><span class="lineno">14522</span>&#160;                    *allocInfo.m_pChanged = VK_TRUE;</div>
+<div class="line"><a name="l14523"></a><span class="lineno">14523</span>&#160;                }</div>
+<div class="line"><a name="l14524"></a><span class="lineno">14524</span>&#160; </div>
+<div class="line"><a name="l14525"></a><span class="lineno">14525</span>&#160;                ++m_AllocationsMoved;</div>
+<div class="line"><a name="l14526"></a><span class="lineno">14526</span>&#160;                m_BytesMoved += size;</div>
+<div class="line"><a name="l14527"></a><span class="lineno">14527</span>&#160; </div>
+<div class="line"><a name="l14528"></a><span class="lineno">14528</span>&#160;                VmaVectorRemove(pSrcBlockInfo-&gt;m_Allocations, srcAllocIndex);</div>
+<div class="line"><a name="l14529"></a><span class="lineno">14529</span>&#160; </div>
+<div class="line"><a name="l14530"></a><span class="lineno">14530</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l14531"></a><span class="lineno">14531</span>&#160;            }</div>
+<div class="line"><a name="l14532"></a><span class="lineno">14532</span>&#160;        }</div>
+<div class="line"><a name="l14533"></a><span class="lineno">14533</span>&#160; </div>
+<div class="line"><a name="l14534"></a><span class="lineno">14534</span>&#160;        <span class="comment">// If not processed, this allocInfo remains in pBlockInfo-&gt;m_Allocations for next round.</span></div>
+<div class="line"><a name="l14535"></a><span class="lineno">14535</span>&#160; </div>
+<div class="line"><a name="l14536"></a><span class="lineno">14536</span>&#160;        <span class="keywordflow">if</span>(srcAllocIndex &gt; 0)</div>
+<div class="line"><a name="l14537"></a><span class="lineno">14537</span>&#160;        {</div>
+<div class="line"><a name="l14538"></a><span class="lineno">14538</span>&#160;            --srcAllocIndex;</div>
+<div class="line"><a name="l14539"></a><span class="lineno">14539</span>&#160;        }</div>
+<div class="line"><a name="l14540"></a><span class="lineno">14540</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14541"></a><span class="lineno">14541</span>&#160;        {</div>
+<div class="line"><a name="l14542"></a><span class="lineno">14542</span>&#160;            <span class="keywordflow">if</span>(srcBlockIndex &gt; 0)</div>
+<div class="line"><a name="l14543"></a><span class="lineno">14543</span>&#160;            {</div>
+<div class="line"><a name="l14544"></a><span class="lineno">14544</span>&#160;                --srcBlockIndex;</div>
+<div class="line"><a name="l14545"></a><span class="lineno">14545</span>&#160;                srcAllocIndex = SIZE_MAX;</div>
+<div class="line"><a name="l14546"></a><span class="lineno">14546</span>&#160;            }</div>
+<div class="line"><a name="l14547"></a><span class="lineno">14547</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14548"></a><span class="lineno">14548</span>&#160;            {</div>
+<div class="line"><a name="l14549"></a><span class="lineno">14549</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l14550"></a><span class="lineno">14550</span>&#160;            }</div>
+<div class="line"><a name="l14551"></a><span class="lineno">14551</span>&#160;        }</div>
+<div class="line"><a name="l14552"></a><span class="lineno">14552</span>&#160;    }</div>
+<div class="line"><a name="l14553"></a><span class="lineno">14553</span>&#160;}</div>
+<div class="line"><a name="l14554"></a><span class="lineno">14554</span>&#160; </div>
+<div class="line"><a name="l14555"></a><span class="lineno">14555</span>&#160;<span class="keywordtype">size_t</span> VmaDefragmentationAlgorithm_Generic::CalcBlocksWithNonMovableCount()<span class="keyword"> const</span></div>
+<div class="line"><a name="l14556"></a><span class="lineno">14556</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l14557"></a><span class="lineno">14557</span>&#160;    <span class="keywordtype">size_t</span> result = 0;</div>
+<div class="line"><a name="l14558"></a><span class="lineno">14558</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; m_Blocks.size(); ++i)</div>
+<div class="line"><a name="l14559"></a><span class="lineno">14559</span>&#160;    {</div>
+<div class="line"><a name="l14560"></a><span class="lineno">14560</span>&#160;        <span class="keywordflow">if</span>(m_Blocks[i]-&gt;m_HasNonMovableAllocations)</div>
+<div class="line"><a name="l14561"></a><span class="lineno">14561</span>&#160;        {</div>
+<div class="line"><a name="l14562"></a><span class="lineno">14562</span>&#160;            ++result;</div>
+<div class="line"><a name="l14563"></a><span class="lineno">14563</span>&#160;        }</div>
+<div class="line"><a name="l14564"></a><span class="lineno">14564</span>&#160;    }</div>
+<div class="line"><a name="l14565"></a><span class="lineno">14565</span>&#160;    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l14566"></a><span class="lineno">14566</span>&#160;}</div>
+<div class="line"><a name="l14567"></a><span class="lineno">14567</span>&#160; </div>
+<div class="line"><a name="l14568"></a><span class="lineno">14568</span>&#160;VkResult VmaDefragmentationAlgorithm_Generic::Defragment(</div>
+<div class="line"><a name="l14569"></a><span class="lineno">14569</span>&#160;    VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
+<div class="line"><a name="l14570"></a><span class="lineno">14570</span>&#160;    VkDeviceSize maxBytesToMove,</div>
+<div class="line"><a name="l14571"></a><span class="lineno">14571</span>&#160;    uint32_t maxAllocationsToMove,</div>
+<div class="line"><a name="l14572"></a><span class="lineno">14572</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> flags)</div>
+<div class="line"><a name="l14573"></a><span class="lineno">14573</span>&#160;{</div>
+<div class="line"><a name="l14574"></a><span class="lineno">14574</span>&#160;    <span class="keywordflow">if</span>(!m_AllAllocations &amp;&amp; m_AllocationCount == 0)</div>
+<div class="line"><a name="l14575"></a><span class="lineno">14575</span>&#160;    {</div>
+<div class="line"><a name="l14576"></a><span class="lineno">14576</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l14577"></a><span class="lineno">14577</span>&#160;    }</div>
+<div class="line"><a name="l14578"></a><span class="lineno">14578</span>&#160; </div>
+<div class="line"><a name="l14579"></a><span class="lineno">14579</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_Blocks.size();</div>
+<div class="line"><a name="l14580"></a><span class="lineno">14580</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; blockIndex &lt; blockCount; ++blockIndex)</div>
+<div class="line"><a name="l14581"></a><span class="lineno">14581</span>&#160;    {</div>
+<div class="line"><a name="l14582"></a><span class="lineno">14582</span>&#160;        BlockInfo* pBlockInfo = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l14583"></a><span class="lineno">14583</span>&#160; </div>
+<div class="line"><a name="l14584"></a><span class="lineno">14584</span>&#160;        <span class="keywordflow">if</span>(m_AllAllocations)</div>
+<div class="line"><a name="l14585"></a><span class="lineno">14585</span>&#160;        {</div>
+<div class="line"><a name="l14586"></a><span class="lineno">14586</span>&#160;            VmaBlockMetadata_Generic* pMetadata = (VmaBlockMetadata_Generic*)pBlockInfo-&gt;m_pBlock-&gt;m_pMetadata;</div>
+<div class="line"><a name="l14587"></a><span class="lineno">14587</span>&#160;            <span class="keywordflow">for</span>(VmaSuballocationList::const_iterator it = pMetadata-&gt;m_Suballocations.begin();</div>
+<div class="line"><a name="l14588"></a><span class="lineno">14588</span>&#160;                it != pMetadata-&gt;m_Suballocations.end();</div>
+<div class="line"><a name="l14589"></a><span class="lineno">14589</span>&#160;                ++it)</div>
+<div class="line"><a name="l14590"></a><span class="lineno">14590</span>&#160;            {</div>
+<div class="line"><a name="l14591"></a><span class="lineno">14591</span>&#160;                <span class="keywordflow">if</span>(it-&gt;type != VMA_SUBALLOCATION_TYPE_FREE)</div>
+<div class="line"><a name="l14592"></a><span class="lineno">14592</span>&#160;                {</div>
+<div class="line"><a name="l14593"></a><span class="lineno">14593</span>&#160;                    AllocationInfo allocInfo = AllocationInfo(it-&gt;hAllocation, VMA_NULL);</div>
+<div class="line"><a name="l14594"></a><span class="lineno">14594</span>&#160;                    pBlockInfo-&gt;m_Allocations.push_back(allocInfo);</div>
+<div class="line"><a name="l14595"></a><span class="lineno">14595</span>&#160;                }</div>
+<div class="line"><a name="l14596"></a><span class="lineno">14596</span>&#160;            }</div>
+<div class="line"><a name="l14597"></a><span class="lineno">14597</span>&#160;        }</div>
+<div class="line"><a name="l14598"></a><span class="lineno">14598</span>&#160; </div>
+<div class="line"><a name="l14599"></a><span class="lineno">14599</span>&#160;        pBlockInfo-&gt;CalcHasNonMovableAllocations();</div>
+<div class="line"><a name="l14600"></a><span class="lineno">14600</span>&#160; </div>
+<div class="line"><a name="l14601"></a><span class="lineno">14601</span>&#160;        <span class="comment">// This is a choice based on research.</span></div>
+<div class="line"><a name="l14602"></a><span class="lineno">14602</span>&#160;        <span class="comment">// Option 1:</span></div>
+<div class="line"><a name="l14603"></a><span class="lineno">14603</span>&#160;        pBlockInfo-&gt;SortAllocationsByOffsetDescending();</div>
+<div class="line"><a name="l14604"></a><span class="lineno">14604</span>&#160;        <span class="comment">// Option 2:</span></div>
+<div class="line"><a name="l14605"></a><span class="lineno">14605</span>&#160;        <span class="comment">//pBlockInfo-&gt;SortAllocationsBySizeDescending();</span></div>
+<div class="line"><a name="l14606"></a><span class="lineno">14606</span>&#160;    }</div>
+<div class="line"><a name="l14607"></a><span class="lineno">14607</span>&#160; </div>
+<div class="line"><a name="l14608"></a><span class="lineno">14608</span>&#160;    <span class="comment">// Sort m_Blocks this time by the main criterium, from most &quot;destination&quot; to most &quot;source&quot; blocks.</span></div>
+<div class="line"><a name="l14609"></a><span class="lineno">14609</span>&#160;    VMA_SORT(m_Blocks.begin(), m_Blocks.end(), BlockInfoCompareMoveDestination());</div>
+<div class="line"><a name="l14610"></a><span class="lineno">14610</span>&#160; </div>
+<div class="line"><a name="l14611"></a><span class="lineno">14611</span>&#160;    <span class="comment">// This is a choice based on research.</span></div>
+<div class="line"><a name="l14612"></a><span class="lineno">14612</span>&#160;    <span class="keyword">const</span> uint32_t roundCount = 2;</div>
+<div class="line"><a name="l14613"></a><span class="lineno">14613</span>&#160; </div>
+<div class="line"><a name="l14614"></a><span class="lineno">14614</span>&#160;    <span class="comment">// Execute defragmentation rounds (the main part).</span></div>
+<div class="line"><a name="l14615"></a><span class="lineno">14615</span>&#160;    VkResult result = VK_SUCCESS;</div>
+<div class="line"><a name="l14616"></a><span class="lineno">14616</span>&#160;    <span class="keywordflow">for</span>(uint32_t round = 0; (round &lt; roundCount) &amp;&amp; (result == VK_SUCCESS); ++round)</div>
+<div class="line"><a name="l14617"></a><span class="lineno">14617</span>&#160;    {</div>
+<div class="line"><a name="l14618"></a><span class="lineno">14618</span>&#160;        result = DefragmentRound(moves, maxBytesToMove, maxAllocationsToMove, !(flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a>));</div>
+<div class="line"><a name="l14619"></a><span class="lineno">14619</span>&#160;    }</div>
+<div class="line"><a name="l14620"></a><span class="lineno">14620</span>&#160; </div>
+<div class="line"><a name="l14621"></a><span class="lineno">14621</span>&#160;    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l14622"></a><span class="lineno">14622</span>&#160;}</div>
+<div class="line"><a name="l14623"></a><span class="lineno">14623</span>&#160; </div>
+<div class="line"><a name="l14624"></a><span class="lineno">14624</span>&#160;<span class="keywordtype">bool</span> VmaDefragmentationAlgorithm_Generic::MoveMakesSense(</div>
+<div class="line"><a name="l14625"></a><span class="lineno">14625</span>&#160;        <span class="keywordtype">size_t</span> dstBlockIndex, VkDeviceSize dstOffset,</div>
+<div class="line"><a name="l14626"></a><span class="lineno">14626</span>&#160;        <span class="keywordtype">size_t</span> srcBlockIndex, VkDeviceSize srcOffset)</div>
+<div class="line"><a name="l14627"></a><span class="lineno">14627</span>&#160;{</div>
+<div class="line"><a name="l14628"></a><span class="lineno">14628</span>&#160;    <span class="keywordflow">if</span>(dstBlockIndex &lt; srcBlockIndex)</div>
+<div class="line"><a name="l14629"></a><span class="lineno">14629</span>&#160;    {</div>
+<div class="line"><a name="l14630"></a><span class="lineno">14630</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l14631"></a><span class="lineno">14631</span>&#160;    }</div>
+<div class="line"><a name="l14632"></a><span class="lineno">14632</span>&#160;    <span class="keywordflow">if</span>(dstBlockIndex &gt; srcBlockIndex)</div>
+<div class="line"><a name="l14633"></a><span class="lineno">14633</span>&#160;    {</div>
+<div class="line"><a name="l14634"></a><span class="lineno">14634</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l14635"></a><span class="lineno">14635</span>&#160;    }</div>
+<div class="line"><a name="l14636"></a><span class="lineno">14636</span>&#160;    <span class="keywordflow">if</span>(dstOffset &lt; srcOffset)</div>
+<div class="line"><a name="l14637"></a><span class="lineno">14637</span>&#160;    {</div>
+<div class="line"><a name="l14638"></a><span class="lineno">14638</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l14639"></a><span class="lineno">14639</span>&#160;    }</div>
+<div class="line"><a name="l14640"></a><span class="lineno">14640</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l14641"></a><span class="lineno">14641</span>&#160;}</div>
+<div class="line"><a name="l14642"></a><span class="lineno">14642</span>&#160; </div>
+<div class="line"><a name="l14644"></a><span class="lineno">14644</span>&#160;<span class="comment">// VmaDefragmentationAlgorithm_Fast</span></div>
+<div class="line"><a name="l14645"></a><span class="lineno">14645</span>&#160; </div>
+<div class="line"><a name="l14646"></a><span class="lineno">14646</span>&#160;VmaDefragmentationAlgorithm_Fast::VmaDefragmentationAlgorithm_Fast(</div>
+<div class="line"><a name="l14647"></a><span class="lineno">14647</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
+<div class="line"><a name="l14648"></a><span class="lineno">14648</span>&#160;    VmaBlockVector* pBlockVector,</div>
+<div class="line"><a name="l14649"></a><span class="lineno">14649</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l14650"></a><span class="lineno">14650</span>&#160;    <span class="keywordtype">bool</span> overlappingMoveSupported) :</div>
+<div class="line"><a name="l14651"></a><span class="lineno">14651</span>&#160;    VmaDefragmentationAlgorithm(hAllocator, pBlockVector, currentFrameIndex),</div>
+<div class="line"><a name="l14652"></a><span class="lineno">14652</span>&#160;    m_OverlappingMoveSupported(overlappingMoveSupported),</div>
+<div class="line"><a name="l14653"></a><span class="lineno">14653</span>&#160;    m_AllocationCount(0),</div>
+<div class="line"><a name="l14654"></a><span class="lineno">14654</span>&#160;    m_AllAllocations(false),</div>
+<div class="line"><a name="l14655"></a><span class="lineno">14655</span>&#160;    m_BytesMoved(0),</div>
+<div class="line"><a name="l14656"></a><span class="lineno">14656</span>&#160;    m_AllocationsMoved(0),</div>
+<div class="line"><a name="l14657"></a><span class="lineno">14657</span>&#160;    m_BlockInfos(VmaStlAllocator&lt;BlockInfo&gt;(hAllocator-&gt;GetAllocationCallbacks()))</div>
+<div class="line"><a name="l14658"></a><span class="lineno">14658</span>&#160;{</div>
+<div class="line"><a name="l14659"></a><span class="lineno">14659</span>&#160;    VMA_ASSERT(VMA_DEBUG_MARGIN == 0);</div>
+<div class="line"><a name="l14660"></a><span class="lineno">14660</span>&#160; </div>
+<div class="line"><a name="l14661"></a><span class="lineno">14661</span>&#160;}</div>
+<div class="line"><a name="l14662"></a><span class="lineno">14662</span>&#160; </div>
+<div class="line"><a name="l14663"></a><span class="lineno">14663</span>&#160;VmaDefragmentationAlgorithm_Fast::~VmaDefragmentationAlgorithm_Fast()</div>
+<div class="line"><a name="l14664"></a><span class="lineno">14664</span>&#160;{</div>
+<div class="line"><a name="l14665"></a><span class="lineno">14665</span>&#160;}</div>
+<div class="line"><a name="l14666"></a><span class="lineno">14666</span>&#160; </div>
+<div class="line"><a name="l14667"></a><span class="lineno">14667</span>&#160;VkResult VmaDefragmentationAlgorithm_Fast::Defragment(</div>
+<div class="line"><a name="l14668"></a><span class="lineno">14668</span>&#160;    VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
+<div class="line"><a name="l14669"></a><span class="lineno">14669</span>&#160;    VkDeviceSize maxBytesToMove,</div>
+<div class="line"><a name="l14670"></a><span class="lineno">14670</span>&#160;    uint32_t maxAllocationsToMove,</div>
+<div class="line"><a name="l14671"></a><span class="lineno">14671</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> flags)</div>
+<div class="line"><a name="l14672"></a><span class="lineno">14672</span>&#160;{</div>
+<div class="line"><a name="l14673"></a><span class="lineno">14673</span>&#160;    VMA_ASSERT(m_AllAllocations || m_pBlockVector-&gt;CalcAllocationCount() == m_AllocationCount);</div>
+<div class="line"><a name="l14674"></a><span class="lineno">14674</span>&#160; </div>
+<div class="line"><a name="l14675"></a><span class="lineno">14675</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_pBlockVector-&gt;GetBlockCount();</div>
+<div class="line"><a name="l14676"></a><span class="lineno">14676</span>&#160;    <span class="keywordflow">if</span>(blockCount == 0 || maxBytesToMove == 0 || maxAllocationsToMove == 0)</div>
+<div class="line"><a name="l14677"></a><span class="lineno">14677</span>&#160;    {</div>
+<div class="line"><a name="l14678"></a><span class="lineno">14678</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l14679"></a><span class="lineno">14679</span>&#160;    }</div>
+<div class="line"><a name="l14680"></a><span class="lineno">14680</span>&#160; </div>
+<div class="line"><a name="l14681"></a><span class="lineno">14681</span>&#160;    PreprocessMetadata();</div>
+<div class="line"><a name="l14682"></a><span class="lineno">14682</span>&#160; </div>
+<div class="line"><a name="l14683"></a><span class="lineno">14683</span>&#160;    <span class="comment">// Sort blocks in order from most destination.</span></div>
+<div class="line"><a name="l14684"></a><span class="lineno">14684</span>&#160; </div>
+<div class="line"><a name="l14685"></a><span class="lineno">14685</span>&#160;    m_BlockInfos.resize(blockCount);</div>
+<div class="line"><a name="l14686"></a><span class="lineno">14686</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; blockCount; ++i)</div>
+<div class="line"><a name="l14687"></a><span class="lineno">14687</span>&#160;    {</div>
+<div class="line"><a name="l14688"></a><span class="lineno">14688</span>&#160;        m_BlockInfos[i].origBlockIndex = i;</div>
+<div class="line"><a name="l14689"></a><span class="lineno">14689</span>&#160;    }</div>
+<div class="line"><a name="l14690"></a><span class="lineno">14690</span>&#160; </div>
+<div class="line"><a name="l14691"></a><span class="lineno">14691</span>&#160;    VMA_SORT(m_BlockInfos.begin(), m_BlockInfos.end(), [<span class="keyword">this</span>](<span class="keyword">const</span> BlockInfo&amp; lhs, <span class="keyword">const</span> BlockInfo&amp; rhs) -&gt; <span class="keywordtype">bool</span> {</div>
+<div class="line"><a name="l14692"></a><span class="lineno">14692</span>&#160;        return m_pBlockVector-&gt;GetBlock(lhs.origBlockIndex)-&gt;m_pMetadata-&gt;GetSumFreeSize() &lt;</div>
+<div class="line"><a name="l14693"></a><span class="lineno">14693</span>&#160;            m_pBlockVector-&gt;GetBlock(rhs.origBlockIndex)-&gt;m_pMetadata-&gt;GetSumFreeSize();</div>
+<div class="line"><a name="l14694"></a><span class="lineno">14694</span>&#160;    });</div>
+<div class="line"><a name="l14695"></a><span class="lineno">14695</span>&#160; </div>
+<div class="line"><a name="l14696"></a><span class="lineno">14696</span>&#160;    <span class="comment">// THE MAIN ALGORITHM</span></div>
+<div class="line"><a name="l14697"></a><span class="lineno">14697</span>&#160; </div>
+<div class="line"><a name="l14698"></a><span class="lineno">14698</span>&#160;    FreeSpaceDatabase freeSpaceDb;</div>
+<div class="line"><a name="l14699"></a><span class="lineno">14699</span>&#160; </div>
+<div class="line"><a name="l14700"></a><span class="lineno">14700</span>&#160;    <span class="keywordtype">size_t</span> dstBlockInfoIndex = 0;</div>
+<div class="line"><a name="l14701"></a><span class="lineno">14701</span>&#160;    <span class="keywordtype">size_t</span> dstOrigBlockIndex = m_BlockInfos[dstBlockInfoIndex].origBlockIndex;</div>
+<div class="line"><a name="l14702"></a><span class="lineno">14702</span>&#160;    VmaDeviceMemoryBlock* pDstBlock = m_pBlockVector-&gt;GetBlock(dstOrigBlockIndex);</div>
+<div class="line"><a name="l14703"></a><span class="lineno">14703</span>&#160;    VmaBlockMetadata_Generic* pDstMetadata = (VmaBlockMetadata_Generic*)pDstBlock-&gt;m_pMetadata;</div>
+<div class="line"><a name="l14704"></a><span class="lineno">14704</span>&#160;    VkDeviceSize dstBlockSize = pDstMetadata-&gt;GetSize();</div>
+<div class="line"><a name="l14705"></a><span class="lineno">14705</span>&#160;    VkDeviceSize dstOffset = 0;</div>
+<div class="line"><a name="l14706"></a><span class="lineno">14706</span>&#160; </div>
+<div class="line"><a name="l14707"></a><span class="lineno">14707</span>&#160;    <span class="keywordtype">bool</span> end = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l14708"></a><span class="lineno">14708</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> srcBlockInfoIndex = 0; !end &amp;&amp; srcBlockInfoIndex &lt; blockCount; ++srcBlockInfoIndex)</div>
+<div class="line"><a name="l14709"></a><span class="lineno">14709</span>&#160;    {</div>
+<div class="line"><a name="l14710"></a><span class="lineno">14710</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> srcOrigBlockIndex = m_BlockInfos[srcBlockInfoIndex].origBlockIndex;</div>
+<div class="line"><a name="l14711"></a><span class="lineno">14711</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pSrcBlock = m_pBlockVector-&gt;GetBlock(srcOrigBlockIndex);</div>
+<div class="line"><a name="l14712"></a><span class="lineno">14712</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pSrcMetadata = (VmaBlockMetadata_Generic*)pSrcBlock-&gt;m_pMetadata;</div>
+<div class="line"><a name="l14713"></a><span class="lineno">14713</span>&#160;        <span class="keywordflow">for</span>(VmaSuballocationList::iterator srcSuballocIt = pSrcMetadata-&gt;m_Suballocations.begin();</div>
+<div class="line"><a name="l14714"></a><span class="lineno">14714</span>&#160;            !end &amp;&amp; srcSuballocIt != pSrcMetadata-&gt;m_Suballocations.end(); )</div>
+<div class="line"><a name="l14715"></a><span class="lineno">14715</span>&#160;        {</div>
+<div class="line"><a name="l14716"></a><span class="lineno">14716</span>&#160;            VmaAllocation_T* <span class="keyword">const</span> pAlloc = srcSuballocIt-&gt;hAllocation;</div>
+<div class="line"><a name="l14717"></a><span class="lineno">14717</span>&#160;            <span class="keyword">const</span> VkDeviceSize srcAllocAlignment = pAlloc-&gt;GetAlignment();</div>
+<div class="line"><a name="l14718"></a><span class="lineno">14718</span>&#160;            <span class="keyword">const</span> VkDeviceSize srcAllocSize = srcSuballocIt-&gt;size;</div>
+<div class="line"><a name="l14719"></a><span class="lineno">14719</span>&#160;            <span class="keywordflow">if</span>(m_AllocationsMoved == maxAllocationsToMove ||</div>
+<div class="line"><a name="l14720"></a><span class="lineno">14720</span>&#160;                m_BytesMoved + srcAllocSize &gt; maxBytesToMove)</div>
+<div class="line"><a name="l14721"></a><span class="lineno">14721</span>&#160;            {</div>
+<div class="line"><a name="l14722"></a><span class="lineno">14722</span>&#160;                end = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l14723"></a><span class="lineno">14723</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l14724"></a><span class="lineno">14724</span>&#160;            }</div>
+<div class="line"><a name="l14725"></a><span class="lineno">14725</span>&#160;            <span class="keyword">const</span> VkDeviceSize srcAllocOffset = srcSuballocIt-&gt;offset;</div>
+<div class="line"><a name="l14726"></a><span class="lineno">14726</span>&#160; </div>
+<div class="line"><a name="l14727"></a><span class="lineno">14727</span>&#160;            VmaDefragmentationMove move = {};</div>
+<div class="line"><a name="l14728"></a><span class="lineno">14728</span>&#160;            <span class="comment">// Try to place it in one of free spaces from the database.</span></div>
+<div class="line"><a name="l14729"></a><span class="lineno">14729</span>&#160;            <span class="keywordtype">size_t</span> freeSpaceInfoIndex;</div>
+<div class="line"><a name="l14730"></a><span class="lineno">14730</span>&#160;            VkDeviceSize dstAllocOffset;</div>
+<div class="line"><a name="l14731"></a><span class="lineno">14731</span>&#160;            <span class="keywordflow">if</span>(freeSpaceDb.Fetch(srcAllocAlignment, srcAllocSize,</div>
+<div class="line"><a name="l14732"></a><span class="lineno">14732</span>&#160;                freeSpaceInfoIndex, dstAllocOffset))</div>
+<div class="line"><a name="l14733"></a><span class="lineno">14733</span>&#160;            {</div>
+<div class="line"><a name="l14734"></a><span class="lineno">14734</span>&#160;                <span class="keywordtype">size_t</span> freeSpaceOrigBlockIndex = m_BlockInfos[freeSpaceInfoIndex].origBlockIndex;</div>
+<div class="line"><a name="l14735"></a><span class="lineno">14735</span>&#160;                VmaDeviceMemoryBlock* pFreeSpaceBlock = m_pBlockVector-&gt;GetBlock(freeSpaceOrigBlockIndex);</div>
+<div class="line"><a name="l14736"></a><span class="lineno">14736</span>&#160;                VmaBlockMetadata_Generic* pFreeSpaceMetadata = (VmaBlockMetadata_Generic*)pFreeSpaceBlock-&gt;m_pMetadata;</div>
+<div class="line"><a name="l14737"></a><span class="lineno">14737</span>&#160; </div>
+<div class="line"><a name="l14738"></a><span class="lineno">14738</span>&#160;                <span class="comment">// Same block</span></div>
+<div class="line"><a name="l14739"></a><span class="lineno">14739</span>&#160;                <span class="keywordflow">if</span>(freeSpaceInfoIndex == srcBlockInfoIndex)</div>
+<div class="line"><a name="l14740"></a><span class="lineno">14740</span>&#160;                {</div>
+<div class="line"><a name="l14741"></a><span class="lineno">14741</span>&#160;                    VMA_ASSERT(dstAllocOffset &lt;= srcAllocOffset);</div>
+<div class="line"><a name="l14742"></a><span class="lineno">14742</span>&#160; </div>
+<div class="line"><a name="l14743"></a><span class="lineno">14743</span>&#160;                    <span class="comment">// MOVE OPTION 1: Move the allocation inside the same block by decreasing offset.</span></div>
+<div class="line"><a name="l14744"></a><span class="lineno">14744</span>&#160; </div>
+<div class="line"><a name="l14745"></a><span class="lineno">14745</span>&#160;                    VmaSuballocation suballoc = *srcSuballocIt;</div>
+<div class="line"><a name="l14746"></a><span class="lineno">14746</span>&#160;                    suballoc.offset = dstAllocOffset;</div>
+<div class="line"><a name="l14747"></a><span class="lineno">14747</span>&#160;                    suballoc.hAllocation-&gt;ChangeOffset(dstAllocOffset);</div>
+<div class="line"><a name="l14748"></a><span class="lineno">14748</span>&#160;                    m_BytesMoved += srcAllocSize;</div>
+<div class="line"><a name="l14749"></a><span class="lineno">14749</span>&#160;                    ++m_AllocationsMoved;</div>
+<div class="line"><a name="l14750"></a><span class="lineno">14750</span>&#160; </div>
+<div class="line"><a name="l14751"></a><span class="lineno">14751</span>&#160;                    VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;</div>
+<div class="line"><a name="l14752"></a><span class="lineno">14752</span>&#160;                    ++nextSuballocIt;</div>
+<div class="line"><a name="l14753"></a><span class="lineno">14753</span>&#160;                    pSrcMetadata-&gt;m_Suballocations.erase(srcSuballocIt);</div>
+<div class="line"><a name="l14754"></a><span class="lineno">14754</span>&#160;                    srcSuballocIt = nextSuballocIt;</div>
+<div class="line"><a name="l14755"></a><span class="lineno">14755</span>&#160; </div>
+<div class="line"><a name="l14756"></a><span class="lineno">14756</span>&#160;                    InsertSuballoc(pFreeSpaceMetadata, suballoc);</div>
+<div class="line"><a name="l14757"></a><span class="lineno">14757</span>&#160; </div>
+<div class="line"><a name="l14758"></a><span class="lineno">14758</span>&#160;                    move.srcBlockIndex = srcOrigBlockIndex;</div>
+<div class="line"><a name="l14759"></a><span class="lineno">14759</span>&#160;                    move.dstBlockIndex = freeSpaceOrigBlockIndex;</div>
+<div class="line"><a name="l14760"></a><span class="lineno">14760</span>&#160;                    move.srcOffset = srcAllocOffset;</div>
+<div class="line"><a name="l14761"></a><span class="lineno">14761</span>&#160;                    move.dstOffset = dstAllocOffset;</div>
+<div class="line"><a name="l14762"></a><span class="lineno">14762</span>&#160;                    move.size = srcAllocSize;</div>
+<div class="line"><a name="l14763"></a><span class="lineno">14763</span>&#160; </div>
+<div class="line"><a name="l14764"></a><span class="lineno">14764</span>&#160;                    moves.push_back(move);</div>
+<div class="line"><a name="l14765"></a><span class="lineno">14765</span>&#160;                }</div>
+<div class="line"><a name="l14766"></a><span class="lineno">14766</span>&#160;                <span class="comment">// Different block</span></div>
+<div class="line"><a name="l14767"></a><span class="lineno">14767</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14768"></a><span class="lineno">14768</span>&#160;                {</div>
+<div class="line"><a name="l14769"></a><span class="lineno">14769</span>&#160;                    <span class="comment">// MOVE OPTION 2: Move the allocation to a different block.</span></div>
+<div class="line"><a name="l14770"></a><span class="lineno">14770</span>&#160; </div>
+<div class="line"><a name="l14771"></a><span class="lineno">14771</span>&#160;                    VMA_ASSERT(freeSpaceInfoIndex &lt; srcBlockInfoIndex);</div>
+<div class="line"><a name="l14772"></a><span class="lineno">14772</span>&#160; </div>
+<div class="line"><a name="l14773"></a><span class="lineno">14773</span>&#160;                    VmaSuballocation suballoc = *srcSuballocIt;</div>
+<div class="line"><a name="l14774"></a><span class="lineno">14774</span>&#160;                    suballoc.offset = dstAllocOffset;</div>
+<div class="line"><a name="l14775"></a><span class="lineno">14775</span>&#160;                    suballoc.hAllocation-&gt;ChangeBlockAllocation(m_hAllocator, pFreeSpaceBlock, dstAllocOffset);</div>
+<div class="line"><a name="l14776"></a><span class="lineno">14776</span>&#160;                    m_BytesMoved += srcAllocSize;</div>
+<div class="line"><a name="l14777"></a><span class="lineno">14777</span>&#160;                    ++m_AllocationsMoved;</div>
+<div class="line"><a name="l14778"></a><span class="lineno">14778</span>&#160; </div>
+<div class="line"><a name="l14779"></a><span class="lineno">14779</span>&#160;                    VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;</div>
+<div class="line"><a name="l14780"></a><span class="lineno">14780</span>&#160;                    ++nextSuballocIt;</div>
+<div class="line"><a name="l14781"></a><span class="lineno">14781</span>&#160;                    pSrcMetadata-&gt;m_Suballocations.erase(srcSuballocIt);</div>
+<div class="line"><a name="l14782"></a><span class="lineno">14782</span>&#160;                    srcSuballocIt = nextSuballocIt;</div>
+<div class="line"><a name="l14783"></a><span class="lineno">14783</span>&#160; </div>
+<div class="line"><a name="l14784"></a><span class="lineno">14784</span>&#160;                    InsertSuballoc(pFreeSpaceMetadata, suballoc);</div>
+<div class="line"><a name="l14785"></a><span class="lineno">14785</span>&#160; </div>
+<div class="line"><a name="l14786"></a><span class="lineno">14786</span>&#160;                    move.srcBlockIndex = srcOrigBlockIndex;</div>
+<div class="line"><a name="l14787"></a><span class="lineno">14787</span>&#160;                    move.dstBlockIndex = freeSpaceOrigBlockIndex;</div>
+<div class="line"><a name="l14788"></a><span class="lineno">14788</span>&#160;                    move.srcOffset = srcAllocOffset;</div>
+<div class="line"><a name="l14789"></a><span class="lineno">14789</span>&#160;                    move.dstOffset = dstAllocOffset;</div>
+<div class="line"><a name="l14790"></a><span class="lineno">14790</span>&#160;                    move.size = srcAllocSize;</div>
+<div class="line"><a name="l14791"></a><span class="lineno">14791</span>&#160; </div>
+<div class="line"><a name="l14792"></a><span class="lineno">14792</span>&#160;                    moves.push_back(move);</div>
+<div class="line"><a name="l14793"></a><span class="lineno">14793</span>&#160;                }</div>
+<div class="line"><a name="l14794"></a><span class="lineno">14794</span>&#160;            }</div>
+<div class="line"><a name="l14795"></a><span class="lineno">14795</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14796"></a><span class="lineno">14796</span>&#160;            {</div>
+<div class="line"><a name="l14797"></a><span class="lineno">14797</span>&#160;                dstAllocOffset = VmaAlignUp(dstOffset, srcAllocAlignment);</div>
+<div class="line"><a name="l14798"></a><span class="lineno">14798</span>&#160; </div>
+<div class="line"><a name="l14799"></a><span class="lineno">14799</span>&#160;                <span class="comment">// If the allocation doesn&#39;t fit before the end of dstBlock, forward to next block.</span></div>
+<div class="line"><a name="l14800"></a><span class="lineno">14800</span>&#160;                <span class="keywordflow">while</span>(dstBlockInfoIndex &lt; srcBlockInfoIndex &amp;&amp;</div>
+<div class="line"><a name="l14801"></a><span class="lineno">14801</span>&#160;                    dstAllocOffset + srcAllocSize &gt; dstBlockSize)</div>
+<div class="line"><a name="l14802"></a><span class="lineno">14802</span>&#160;                {</div>
+<div class="line"><a name="l14803"></a><span class="lineno">14803</span>&#160;                    <span class="comment">// But before that, register remaining free space at the end of dst block.</span></div>
+<div class="line"><a name="l14804"></a><span class="lineno">14804</span>&#160;                    freeSpaceDb.Register(dstBlockInfoIndex, dstOffset, dstBlockSize - dstOffset);</div>
+<div class="line"><a name="l14805"></a><span class="lineno">14805</span>&#160; </div>
+<div class="line"><a name="l14806"></a><span class="lineno">14806</span>&#160;                    ++dstBlockInfoIndex;</div>
+<div class="line"><a name="l14807"></a><span class="lineno">14807</span>&#160;                    dstOrigBlockIndex = m_BlockInfos[dstBlockInfoIndex].origBlockIndex;</div>
+<div class="line"><a name="l14808"></a><span class="lineno">14808</span>&#160;                    pDstBlock = m_pBlockVector-&gt;GetBlock(dstOrigBlockIndex);</div>
+<div class="line"><a name="l14809"></a><span class="lineno">14809</span>&#160;                    pDstMetadata = (VmaBlockMetadata_Generic*)pDstBlock-&gt;m_pMetadata;</div>
+<div class="line"><a name="l14810"></a><span class="lineno">14810</span>&#160;                    dstBlockSize = pDstMetadata-&gt;GetSize();</div>
+<div class="line"><a name="l14811"></a><span class="lineno">14811</span>&#160;                    dstOffset = 0;</div>
+<div class="line"><a name="l14812"></a><span class="lineno">14812</span>&#160;                    dstAllocOffset = 0;</div>
+<div class="line"><a name="l14813"></a><span class="lineno">14813</span>&#160;                }</div>
+<div class="line"><a name="l14814"></a><span class="lineno">14814</span>&#160; </div>
+<div class="line"><a name="l14815"></a><span class="lineno">14815</span>&#160;                <span class="comment">// Same block</span></div>
+<div class="line"><a name="l14816"></a><span class="lineno">14816</span>&#160;                <span class="keywordflow">if</span>(dstBlockInfoIndex == srcBlockInfoIndex)</div>
+<div class="line"><a name="l14817"></a><span class="lineno">14817</span>&#160;                {</div>
+<div class="line"><a name="l14818"></a><span class="lineno">14818</span>&#160;                    VMA_ASSERT(dstAllocOffset &lt;= srcAllocOffset);</div>
+<div class="line"><a name="l14819"></a><span class="lineno">14819</span>&#160; </div>
+<div class="line"><a name="l14820"></a><span class="lineno">14820</span>&#160;                    <span class="keyword">const</span> <span class="keywordtype">bool</span> overlap = dstAllocOffset + srcAllocSize &gt; srcAllocOffset;</div>
+<div class="line"><a name="l14821"></a><span class="lineno">14821</span>&#160; </div>
+<div class="line"><a name="l14822"></a><span class="lineno">14822</span>&#160;                    <span class="keywordtype">bool</span> skipOver = overlap;</div>
+<div class="line"><a name="l14823"></a><span class="lineno">14823</span>&#160;                    <span class="keywordflow">if</span>(overlap &amp;&amp; m_OverlappingMoveSupported &amp;&amp; dstAllocOffset &lt; srcAllocOffset)</div>
+<div class="line"><a name="l14824"></a><span class="lineno">14824</span>&#160;                    {</div>
+<div class="line"><a name="l14825"></a><span class="lineno">14825</span>&#160;                        <span class="comment">// If destination and source place overlap, skip if it would move it</span></div>
+<div class="line"><a name="l14826"></a><span class="lineno">14826</span>&#160;                        <span class="comment">// by only &lt; 1/64 of its size.</span></div>
+<div class="line"><a name="l14827"></a><span class="lineno">14827</span>&#160;                        skipOver = (srcAllocOffset - dstAllocOffset) * 64 &lt; srcAllocSize;</div>
+<div class="line"><a name="l14828"></a><span class="lineno">14828</span>&#160;                    }</div>
+<div class="line"><a name="l14829"></a><span class="lineno">14829</span>&#160; </div>
+<div class="line"><a name="l14830"></a><span class="lineno">14830</span>&#160;                    <span class="keywordflow">if</span>(skipOver)</div>
+<div class="line"><a name="l14831"></a><span class="lineno">14831</span>&#160;                    {</div>
+<div class="line"><a name="l14832"></a><span class="lineno">14832</span>&#160;                        freeSpaceDb.Register(dstBlockInfoIndex, dstOffset, srcAllocOffset - dstOffset);</div>
+<div class="line"><a name="l14833"></a><span class="lineno">14833</span>&#160; </div>
+<div class="line"><a name="l14834"></a><span class="lineno">14834</span>&#160;                        dstOffset = srcAllocOffset + srcAllocSize;</div>
+<div class="line"><a name="l14835"></a><span class="lineno">14835</span>&#160;                        ++srcSuballocIt;</div>
+<div class="line"><a name="l14836"></a><span class="lineno">14836</span>&#160;                    }</div>
+<div class="line"><a name="l14837"></a><span class="lineno">14837</span>&#160;                    <span class="comment">// MOVE OPTION 1: Move the allocation inside the same block by decreasing offset.</span></div>
+<div class="line"><a name="l14838"></a><span class="lineno">14838</span>&#160;                    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14839"></a><span class="lineno">14839</span>&#160;                    {</div>
+<div class="line"><a name="l14840"></a><span class="lineno">14840</span>&#160;                        srcSuballocIt-&gt;offset = dstAllocOffset;</div>
+<div class="line"><a name="l14841"></a><span class="lineno">14841</span>&#160;                        srcSuballocIt-&gt;hAllocation-&gt;ChangeOffset(dstAllocOffset);</div>
+<div class="line"><a name="l14842"></a><span class="lineno">14842</span>&#160;                        dstOffset = dstAllocOffset + srcAllocSize;</div>
+<div class="line"><a name="l14843"></a><span class="lineno">14843</span>&#160;                        m_BytesMoved += srcAllocSize;</div>
+<div class="line"><a name="l14844"></a><span class="lineno">14844</span>&#160;                        ++m_AllocationsMoved;</div>
+<div class="line"><a name="l14845"></a><span class="lineno">14845</span>&#160;                        ++srcSuballocIt;</div>
+<div class="line"><a name="l14846"></a><span class="lineno">14846</span>&#160; </div>
+<div class="line"><a name="l14847"></a><span class="lineno">14847</span>&#160;                        move.srcBlockIndex = srcOrigBlockIndex;</div>
+<div class="line"><a name="l14848"></a><span class="lineno">14848</span>&#160;                        move.dstBlockIndex = dstOrigBlockIndex;</div>
+<div class="line"><a name="l14849"></a><span class="lineno">14849</span>&#160;                        move.srcOffset = srcAllocOffset;</div>
+<div class="line"><a name="l14850"></a><span class="lineno">14850</span>&#160;                        move.dstOffset = dstAllocOffset;</div>
+<div class="line"><a name="l14851"></a><span class="lineno">14851</span>&#160;                        move.size = srcAllocSize;</div>
+<div class="line"><a name="l14852"></a><span class="lineno">14852</span>&#160; </div>
+<div class="line"><a name="l14853"></a><span class="lineno">14853</span>&#160;                        moves.push_back(move);</div>
+<div class="line"><a name="l14854"></a><span class="lineno">14854</span>&#160;                    }</div>
+<div class="line"><a name="l14855"></a><span class="lineno">14855</span>&#160;                }</div>
+<div class="line"><a name="l14856"></a><span class="lineno">14856</span>&#160;                <span class="comment">// Different block</span></div>
+<div class="line"><a name="l14857"></a><span class="lineno">14857</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14858"></a><span class="lineno">14858</span>&#160;                {</div>
+<div class="line"><a name="l14859"></a><span class="lineno">14859</span>&#160;                    <span class="comment">// MOVE OPTION 2: Move the allocation to a different block.</span></div>
+<div class="line"><a name="l14860"></a><span class="lineno">14860</span>&#160; </div>
+<div class="line"><a name="l14861"></a><span class="lineno">14861</span>&#160;                    VMA_ASSERT(dstBlockInfoIndex &lt; srcBlockInfoIndex);</div>
+<div class="line"><a name="l14862"></a><span class="lineno">14862</span>&#160;                    VMA_ASSERT(dstAllocOffset + srcAllocSize &lt;= dstBlockSize);</div>
+<div class="line"><a name="l14863"></a><span class="lineno">14863</span>&#160; </div>
+<div class="line"><a name="l14864"></a><span class="lineno">14864</span>&#160;                    VmaSuballocation suballoc = *srcSuballocIt;</div>
+<div class="line"><a name="l14865"></a><span class="lineno">14865</span>&#160;                    suballoc.offset = dstAllocOffset;</div>
+<div class="line"><a name="l14866"></a><span class="lineno">14866</span>&#160;                    suballoc.hAllocation-&gt;ChangeBlockAllocation(m_hAllocator, pDstBlock, dstAllocOffset);</div>
+<div class="line"><a name="l14867"></a><span class="lineno">14867</span>&#160;                    dstOffset = dstAllocOffset + srcAllocSize;</div>
+<div class="line"><a name="l14868"></a><span class="lineno">14868</span>&#160;                    m_BytesMoved += srcAllocSize;</div>
+<div class="line"><a name="l14869"></a><span class="lineno">14869</span>&#160;                    ++m_AllocationsMoved;</div>
+<div class="line"><a name="l14870"></a><span class="lineno">14870</span>&#160; </div>
+<div class="line"><a name="l14871"></a><span class="lineno">14871</span>&#160;                    VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;</div>
+<div class="line"><a name="l14872"></a><span class="lineno">14872</span>&#160;                    ++nextSuballocIt;</div>
+<div class="line"><a name="l14873"></a><span class="lineno">14873</span>&#160;                    pSrcMetadata-&gt;m_Suballocations.erase(srcSuballocIt);</div>
+<div class="line"><a name="l14874"></a><span class="lineno">14874</span>&#160;                    srcSuballocIt = nextSuballocIt;</div>
+<div class="line"><a name="l14875"></a><span class="lineno">14875</span>&#160; </div>
+<div class="line"><a name="l14876"></a><span class="lineno">14876</span>&#160;                    pDstMetadata-&gt;m_Suballocations.push_back(suballoc);</div>
+<div class="line"><a name="l14877"></a><span class="lineno">14877</span>&#160; </div>
+<div class="line"><a name="l14878"></a><span class="lineno">14878</span>&#160;                    move.srcBlockIndex = srcOrigBlockIndex;</div>
+<div class="line"><a name="l14879"></a><span class="lineno">14879</span>&#160;                    move.dstBlockIndex = dstOrigBlockIndex;</div>
+<div class="line"><a name="l14880"></a><span class="lineno">14880</span>&#160;                    move.srcOffset = srcAllocOffset;</div>
+<div class="line"><a name="l14881"></a><span class="lineno">14881</span>&#160;                    move.dstOffset = dstAllocOffset;</div>
+<div class="line"><a name="l14882"></a><span class="lineno">14882</span>&#160;                    move.size = srcAllocSize;</div>
+<div class="line"><a name="l14883"></a><span class="lineno">14883</span>&#160; </div>
+<div class="line"><a name="l14884"></a><span class="lineno">14884</span>&#160;                    moves.push_back(move);</div>
+<div class="line"><a name="l14885"></a><span class="lineno">14885</span>&#160;                }</div>
+<div class="line"><a name="l14886"></a><span class="lineno">14886</span>&#160;            }</div>
+<div class="line"><a name="l14887"></a><span class="lineno">14887</span>&#160;        }</div>
+<div class="line"><a name="l14888"></a><span class="lineno">14888</span>&#160;    }</div>
+<div class="line"><a name="l14889"></a><span class="lineno">14889</span>&#160; </div>
+<div class="line"><a name="l14890"></a><span class="lineno">14890</span>&#160;    m_BlockInfos.clear();</div>
+<div class="line"><a name="l14891"></a><span class="lineno">14891</span>&#160; </div>
+<div class="line"><a name="l14892"></a><span class="lineno">14892</span>&#160;    PostprocessMetadata();</div>
+<div class="line"><a name="l14893"></a><span class="lineno">14893</span>&#160; </div>
+<div class="line"><a name="l14894"></a><span class="lineno">14894</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l14895"></a><span class="lineno">14895</span>&#160;}</div>
+<div class="line"><a name="l14896"></a><span class="lineno">14896</span>&#160; </div>
+<div class="line"><a name="l14897"></a><span class="lineno">14897</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationAlgorithm_Fast::PreprocessMetadata()</div>
+<div class="line"><a name="l14898"></a><span class="lineno">14898</span>&#160;{</div>
+<div class="line"><a name="l14899"></a><span class="lineno">14899</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_pBlockVector-&gt;GetBlockCount();</div>
+<div class="line"><a name="l14900"></a><span class="lineno">14900</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; blockIndex &lt; blockCount; ++blockIndex)</div>
+<div class="line"><a name="l14901"></a><span class="lineno">14901</span>&#160;    {</div>
+<div class="line"><a name="l14902"></a><span class="lineno">14902</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pMetadata =</div>
+<div class="line"><a name="l14903"></a><span class="lineno">14903</span>&#160;            (VmaBlockMetadata_Generic*)m_pBlockVector-&gt;GetBlock(blockIndex)-&gt;m_pMetadata;</div>
+<div class="line"><a name="l14904"></a><span class="lineno">14904</span>&#160;        pMetadata-&gt;m_FreeCount = 0;</div>
+<div class="line"><a name="l14905"></a><span class="lineno">14905</span>&#160;        pMetadata-&gt;m_SumFreeSize = pMetadata-&gt;GetSize();</div>
+<div class="line"><a name="l14906"></a><span class="lineno">14906</span>&#160;        pMetadata-&gt;m_FreeSuballocationsBySize.clear();</div>
+<div class="line"><a name="l14907"></a><span class="lineno">14907</span>&#160;        <span class="keywordflow">for</span>(VmaSuballocationList::iterator it = pMetadata-&gt;m_Suballocations.begin();</div>
+<div class="line"><a name="l14908"></a><span class="lineno">14908</span>&#160;            it != pMetadata-&gt;m_Suballocations.end(); )</div>
+<div class="line"><a name="l14909"></a><span class="lineno">14909</span>&#160;        {</div>
+<div class="line"><a name="l14910"></a><span class="lineno">14910</span>&#160;            <span class="keywordflow">if</span>(it-&gt;type == VMA_SUBALLOCATION_TYPE_FREE)</div>
+<div class="line"><a name="l14911"></a><span class="lineno">14911</span>&#160;            {</div>
+<div class="line"><a name="l14912"></a><span class="lineno">14912</span>&#160;                VmaSuballocationList::iterator nextIt = it;</div>
+<div class="line"><a name="l14913"></a><span class="lineno">14913</span>&#160;                ++nextIt;</div>
+<div class="line"><a name="l14914"></a><span class="lineno">14914</span>&#160;                pMetadata-&gt;m_Suballocations.erase(it);</div>
+<div class="line"><a name="l14915"></a><span class="lineno">14915</span>&#160;                it = nextIt;</div>
+<div class="line"><a name="l14916"></a><span class="lineno">14916</span>&#160;            }</div>
+<div class="line"><a name="l14917"></a><span class="lineno">14917</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14918"></a><span class="lineno">14918</span>&#160;            {</div>
+<div class="line"><a name="l14919"></a><span class="lineno">14919</span>&#160;                ++it;</div>
+<div class="line"><a name="l14920"></a><span class="lineno">14920</span>&#160;            }</div>
+<div class="line"><a name="l14921"></a><span class="lineno">14921</span>&#160;        }</div>
+<div class="line"><a name="l14922"></a><span class="lineno">14922</span>&#160;    }</div>
+<div class="line"><a name="l14923"></a><span class="lineno">14923</span>&#160;}</div>
+<div class="line"><a name="l14924"></a><span class="lineno">14924</span>&#160; </div>
+<div class="line"><a name="l14925"></a><span class="lineno">14925</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationAlgorithm_Fast::PostprocessMetadata()</div>
+<div class="line"><a name="l14926"></a><span class="lineno">14926</span>&#160;{</div>
+<div class="line"><a name="l14927"></a><span class="lineno">14927</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_pBlockVector-&gt;GetBlockCount();</div>
+<div class="line"><a name="l14928"></a><span class="lineno">14928</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = 0; blockIndex &lt; blockCount; ++blockIndex)</div>
+<div class="line"><a name="l14929"></a><span class="lineno">14929</span>&#160;    {</div>
+<div class="line"><a name="l14930"></a><span class="lineno">14930</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pMetadata =</div>
+<div class="line"><a name="l14931"></a><span class="lineno">14931</span>&#160;            (VmaBlockMetadata_Generic*)m_pBlockVector-&gt;GetBlock(blockIndex)-&gt;m_pMetadata;</div>
+<div class="line"><a name="l14932"></a><span class="lineno">14932</span>&#160;        <span class="keyword">const</span> VkDeviceSize blockSize = pMetadata-&gt;GetSize();</div>
+<div class="line"><a name="l14933"></a><span class="lineno">14933</span>&#160; </div>
+<div class="line"><a name="l14934"></a><span class="lineno">14934</span>&#160;        <span class="comment">// No allocations in this block - entire area is free.</span></div>
+<div class="line"><a name="l14935"></a><span class="lineno">14935</span>&#160;        <span class="keywordflow">if</span>(pMetadata-&gt;m_Suballocations.empty())</div>
+<div class="line"><a name="l14936"></a><span class="lineno">14936</span>&#160;        {</div>
+<div class="line"><a name="l14937"></a><span class="lineno">14937</span>&#160;            pMetadata-&gt;m_FreeCount = 1;</div>
+<div class="line"><a name="l14938"></a><span class="lineno">14938</span>&#160;            <span class="comment">//pMetadata-&gt;m_SumFreeSize is already set to blockSize.</span></div>
+<div class="line"><a name="l14939"></a><span class="lineno">14939</span>&#160;            VmaSuballocation suballoc = {</div>
+<div class="line"><a name="l14940"></a><span class="lineno">14940</span>&#160;                0, <span class="comment">// offset</span></div>
+<div class="line"><a name="l14941"></a><span class="lineno">14941</span>&#160;                blockSize, <span class="comment">// size</span></div>
+<div class="line"><a name="l14942"></a><span class="lineno">14942</span>&#160;                VMA_NULL, <span class="comment">// hAllocation</span></div>
+<div class="line"><a name="l14943"></a><span class="lineno">14943</span>&#160;                VMA_SUBALLOCATION_TYPE_FREE };</div>
+<div class="line"><a name="l14944"></a><span class="lineno">14944</span>&#160;            pMetadata-&gt;m_Suballocations.push_back(suballoc);</div>
+<div class="line"><a name="l14945"></a><span class="lineno">14945</span>&#160;            pMetadata-&gt;RegisterFreeSuballocation(pMetadata-&gt;m_Suballocations.begin());</div>
+<div class="line"><a name="l14946"></a><span class="lineno">14946</span>&#160;        }</div>
+<div class="line"><a name="l14947"></a><span class="lineno">14947</span>&#160;        <span class="comment">// There are some allocations in this block.</span></div>
+<div class="line"><a name="l14948"></a><span class="lineno">14948</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14949"></a><span class="lineno">14949</span>&#160;        {</div>
+<div class="line"><a name="l14950"></a><span class="lineno">14950</span>&#160;            VkDeviceSize offset = 0;</div>
+<div class="line"><a name="l14951"></a><span class="lineno">14951</span>&#160;            VmaSuballocationList::iterator it;</div>
+<div class="line"><a name="l14952"></a><span class="lineno">14952</span>&#160;            <span class="keywordflow">for</span>(it = pMetadata-&gt;m_Suballocations.begin();</div>
+<div class="line"><a name="l14953"></a><span class="lineno">14953</span>&#160;                it != pMetadata-&gt;m_Suballocations.end();</div>
+<div class="line"><a name="l14954"></a><span class="lineno">14954</span>&#160;                ++it)</div>
+<div class="line"><a name="l14955"></a><span class="lineno">14955</span>&#160;            {</div>
+<div class="line"><a name="l14956"></a><span class="lineno">14956</span>&#160;                VMA_ASSERT(it-&gt;type != VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l14957"></a><span class="lineno">14957</span>&#160;                VMA_ASSERT(it-&gt;offset &gt;= offset);</div>
+<div class="line"><a name="l14958"></a><span class="lineno">14958</span>&#160; </div>
+<div class="line"><a name="l14959"></a><span class="lineno">14959</span>&#160;                <span class="comment">// Need to insert preceding free space.</span></div>
+<div class="line"><a name="l14960"></a><span class="lineno">14960</span>&#160;                <span class="keywordflow">if</span>(it-&gt;offset &gt; offset)</div>
+<div class="line"><a name="l14961"></a><span class="lineno">14961</span>&#160;                {</div>
+<div class="line"><a name="l14962"></a><span class="lineno">14962</span>&#160;                    ++pMetadata-&gt;m_FreeCount;</div>
+<div class="line"><a name="l14963"></a><span class="lineno">14963</span>&#160;                    <span class="keyword">const</span> VkDeviceSize freeSize = it-&gt;offset - offset;</div>
+<div class="line"><a name="l14964"></a><span class="lineno">14964</span>&#160;                    VmaSuballocation suballoc = {</div>
+<div class="line"><a name="l14965"></a><span class="lineno">14965</span>&#160;                        offset, <span class="comment">// offset</span></div>
+<div class="line"><a name="l14966"></a><span class="lineno">14966</span>&#160;                        freeSize, <span class="comment">// size</span></div>
+<div class="line"><a name="l14967"></a><span class="lineno">14967</span>&#160;                        VMA_NULL, <span class="comment">// hAllocation</span></div>
+<div class="line"><a name="l14968"></a><span class="lineno">14968</span>&#160;                        VMA_SUBALLOCATION_TYPE_FREE };</div>
+<div class="line"><a name="l14969"></a><span class="lineno">14969</span>&#160;                    VmaSuballocationList::iterator precedingFreeIt = pMetadata-&gt;m_Suballocations.insert(it, suballoc);</div>
+<div class="line"><a name="l14970"></a><span class="lineno">14970</span>&#160;                    <span class="keywordflow">if</span>(freeSize &gt;= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)</div>
+<div class="line"><a name="l14971"></a><span class="lineno">14971</span>&#160;                    {</div>
+<div class="line"><a name="l14972"></a><span class="lineno">14972</span>&#160;                        pMetadata-&gt;m_FreeSuballocationsBySize.push_back(precedingFreeIt);</div>
+<div class="line"><a name="l14973"></a><span class="lineno">14973</span>&#160;                    }</div>
+<div class="line"><a name="l14974"></a><span class="lineno">14974</span>&#160;                }</div>
+<div class="line"><a name="l14975"></a><span class="lineno">14975</span>&#160; </div>
+<div class="line"><a name="l14976"></a><span class="lineno">14976</span>&#160;                pMetadata-&gt;m_SumFreeSize -= it-&gt;size;</div>
+<div class="line"><a name="l14977"></a><span class="lineno">14977</span>&#160;                offset = it-&gt;offset + it-&gt;size;</div>
+<div class="line"><a name="l14978"></a><span class="lineno">14978</span>&#160;            }</div>
+<div class="line"><a name="l14979"></a><span class="lineno">14979</span>&#160; </div>
+<div class="line"><a name="l14980"></a><span class="lineno">14980</span>&#160;            <span class="comment">// Need to insert trailing free space.</span></div>
+<div class="line"><a name="l14981"></a><span class="lineno">14981</span>&#160;            <span class="keywordflow">if</span>(offset &lt; blockSize)</div>
+<div class="line"><a name="l14982"></a><span class="lineno">14982</span>&#160;            {</div>
+<div class="line"><a name="l14983"></a><span class="lineno">14983</span>&#160;                ++pMetadata-&gt;m_FreeCount;</div>
+<div class="line"><a name="l14984"></a><span class="lineno">14984</span>&#160;                <span class="keyword">const</span> VkDeviceSize freeSize = blockSize - offset;</div>
+<div class="line"><a name="l14985"></a><span class="lineno">14985</span>&#160;                VmaSuballocation suballoc = {</div>
+<div class="line"><a name="l14986"></a><span class="lineno">14986</span>&#160;                    offset, <span class="comment">// offset</span></div>
+<div class="line"><a name="l14987"></a><span class="lineno">14987</span>&#160;                    freeSize, <span class="comment">// size</span></div>
+<div class="line"><a name="l14988"></a><span class="lineno">14988</span>&#160;                    VMA_NULL, <span class="comment">// hAllocation</span></div>
+<div class="line"><a name="l14989"></a><span class="lineno">14989</span>&#160;                    VMA_SUBALLOCATION_TYPE_FREE };</div>
+<div class="line"><a name="l14990"></a><span class="lineno">14990</span>&#160;                VMA_ASSERT(it == pMetadata-&gt;m_Suballocations.end());</div>
+<div class="line"><a name="l14991"></a><span class="lineno">14991</span>&#160;                VmaSuballocationList::iterator trailingFreeIt = pMetadata-&gt;m_Suballocations.insert(it, suballoc);</div>
+<div class="line"><a name="l14992"></a><span class="lineno">14992</span>&#160;                <span class="keywordflow">if</span>(freeSize &gt; VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)</div>
+<div class="line"><a name="l14993"></a><span class="lineno">14993</span>&#160;                {</div>
+<div class="line"><a name="l14994"></a><span class="lineno">14994</span>&#160;                    pMetadata-&gt;m_FreeSuballocationsBySize.push_back(trailingFreeIt);</div>
+<div class="line"><a name="l14995"></a><span class="lineno">14995</span>&#160;                }</div>
+<div class="line"><a name="l14996"></a><span class="lineno">14996</span>&#160;            }</div>
+<div class="line"><a name="l14997"></a><span class="lineno">14997</span>&#160; </div>
+<div class="line"><a name="l14998"></a><span class="lineno">14998</span>&#160;            VMA_SORT(</div>
+<div class="line"><a name="l14999"></a><span class="lineno">14999</span>&#160;                pMetadata-&gt;m_FreeSuballocationsBySize.begin(),</div>
+<div class="line"><a name="l15000"></a><span class="lineno">15000</span>&#160;                pMetadata-&gt;m_FreeSuballocationsBySize.end(),</div>
+<div class="line"><a name="l15001"></a><span class="lineno">15001</span>&#160;                VmaSuballocationItemSizeLess());</div>
+<div class="line"><a name="l15002"></a><span class="lineno">15002</span>&#160;        }</div>
+<div class="line"><a name="l15003"></a><span class="lineno">15003</span>&#160; </div>
+<div class="line"><a name="l15004"></a><span class="lineno">15004</span>&#160;        VMA_HEAVY_ASSERT(pMetadata-&gt;Validate());</div>
+<div class="line"><a name="l15005"></a><span class="lineno">15005</span>&#160;    }</div>
+<div class="line"><a name="l15006"></a><span class="lineno">15006</span>&#160;}</div>
+<div class="line"><a name="l15007"></a><span class="lineno">15007</span>&#160; </div>
+<div class="line"><a name="l15008"></a><span class="lineno">15008</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationAlgorithm_Fast::InsertSuballoc(VmaBlockMetadata_Generic* pMetadata, <span class="keyword">const</span> VmaSuballocation&amp; suballoc)</div>
+<div class="line"><a name="l15009"></a><span class="lineno">15009</span>&#160;{</div>
+<div class="line"><a name="l15010"></a><span class="lineno">15010</span>&#160;    <span class="comment">// TODO: Optimize somehow. Remember iterator instead of searching for it linearly.</span></div>
+<div class="line"><a name="l15011"></a><span class="lineno">15011</span>&#160;    VmaSuballocationList::iterator it = pMetadata-&gt;m_Suballocations.begin();</div>
+<div class="line"><a name="l15012"></a><span class="lineno">15012</span>&#160;    <span class="keywordflow">while</span>(it != pMetadata-&gt;m_Suballocations.end())</div>
+<div class="line"><a name="l15013"></a><span class="lineno">15013</span>&#160;    {</div>
+<div class="line"><a name="l15014"></a><span class="lineno">15014</span>&#160;        <span class="keywordflow">if</span>(it-&gt;offset &lt; suballoc.offset)</div>
+<div class="line"><a name="l15015"></a><span class="lineno">15015</span>&#160;        {</div>
+<div class="line"><a name="l15016"></a><span class="lineno">15016</span>&#160;            ++it;</div>
+<div class="line"><a name="l15017"></a><span class="lineno">15017</span>&#160;        }</div>
+<div class="line"><a name="l15018"></a><span class="lineno">15018</span>&#160;    }</div>
+<div class="line"><a name="l15019"></a><span class="lineno">15019</span>&#160;    pMetadata-&gt;m_Suballocations.insert(it, suballoc);</div>
+<div class="line"><a name="l15020"></a><span class="lineno">15020</span>&#160;}</div>
+<div class="line"><a name="l15021"></a><span class="lineno">15021</span>&#160; </div>
+<div class="line"><a name="l15023"></a><span class="lineno">15023</span>&#160;<span class="comment">// VmaBlockVectorDefragmentationContext</span></div>
+<div class="line"><a name="l15024"></a><span class="lineno">15024</span>&#160; </div>
+<div class="line"><a name="l15025"></a><span class="lineno">15025</span>&#160;VmaBlockVectorDefragmentationContext::VmaBlockVectorDefragmentationContext(</div>
+<div class="line"><a name="l15026"></a><span class="lineno">15026</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
+<div class="line"><a name="l15027"></a><span class="lineno">15027</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> hCustomPool,</div>
+<div class="line"><a name="l15028"></a><span class="lineno">15028</span>&#160;    VmaBlockVector* pBlockVector,</div>
+<div class="line"><a name="l15029"></a><span class="lineno">15029</span>&#160;    uint32_t currFrameIndex) :</div>
+<div class="line"><a name="l15030"></a><span class="lineno">15030</span>&#160;    res(VK_SUCCESS),</div>
+<div class="line"><a name="l15031"></a><span class="lineno">15031</span>&#160;    mutexLocked(false),</div>
+<div class="line"><a name="l15032"></a><span class="lineno">15032</span>&#160;    blockContexts(VmaStlAllocator&lt;VmaBlockDefragmentationContext&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
+<div class="line"><a name="l15033"></a><span class="lineno">15033</span>&#160;    defragmentationMoves(VmaStlAllocator&lt;VmaDefragmentationMove&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
+<div class="line"><a name="l15034"></a><span class="lineno">15034</span>&#160;    defragmentationMovesProcessed(0),</div>
+<div class="line"><a name="l15035"></a><span class="lineno">15035</span>&#160;    defragmentationMovesCommitted(0),</div>
+<div class="line"><a name="l15036"></a><span class="lineno">15036</span>&#160;    hasDefragmentationPlan(0),</div>
+<div class="line"><a name="l15037"></a><span class="lineno">15037</span>&#160;    m_hAllocator(hAllocator),</div>
+<div class="line"><a name="l15038"></a><span class="lineno">15038</span>&#160;    m_hCustomPool(hCustomPool),</div>
+<div class="line"><a name="l15039"></a><span class="lineno">15039</span>&#160;    m_pBlockVector(pBlockVector),</div>
+<div class="line"><a name="l15040"></a><span class="lineno">15040</span>&#160;    m_CurrFrameIndex(currFrameIndex),</div>
+<div class="line"><a name="l15041"></a><span class="lineno">15041</span>&#160;    m_pAlgorithm(VMA_NULL),</div>
+<div class="line"><a name="l15042"></a><span class="lineno">15042</span>&#160;    m_Allocations(VmaStlAllocator&lt;AllocInfo&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
+<div class="line"><a name="l15043"></a><span class="lineno">15043</span>&#160;    m_AllAllocations(false)</div>
+<div class="line"><a name="l15044"></a><span class="lineno">15044</span>&#160;{</div>
+<div class="line"><a name="l15045"></a><span class="lineno">15045</span>&#160;}</div>
+<div class="line"><a name="l15046"></a><span class="lineno">15046</span>&#160; </div>
+<div class="line"><a name="l15047"></a><span class="lineno">15047</span>&#160;VmaBlockVectorDefragmentationContext::~VmaBlockVectorDefragmentationContext()</div>
+<div class="line"><a name="l15048"></a><span class="lineno">15048</span>&#160;{</div>
+<div class="line"><a name="l15049"></a><span class="lineno">15049</span>&#160;    vma_delete(m_hAllocator, m_pAlgorithm);</div>
+<div class="line"><a name="l15050"></a><span class="lineno">15050</span>&#160;}</div>
+<div class="line"><a name="l15051"></a><span class="lineno">15051</span>&#160; </div>
+<div class="line"><a name="l15052"></a><span class="lineno">15052</span>&#160;<span class="keywordtype">void</span> VmaBlockVectorDefragmentationContext::AddAllocation(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAlloc, VkBool32* pChanged)</div>
+<div class="line"><a name="l15053"></a><span class="lineno">15053</span>&#160;{</div>
+<div class="line"><a name="l15054"></a><span class="lineno">15054</span>&#160;    AllocInfo info = { hAlloc, pChanged };</div>
+<div class="line"><a name="l15055"></a><span class="lineno">15055</span>&#160;    m_Allocations.push_back(info);</div>
+<div class="line"><a name="l15056"></a><span class="lineno">15056</span>&#160;}</div>
+<div class="line"><a name="l15057"></a><span class="lineno">15057</span>&#160; </div>
+<div class="line"><a name="l15058"></a><span class="lineno">15058</span>&#160;<span class="keywordtype">void</span> VmaBlockVectorDefragmentationContext::Begin(<span class="keywordtype">bool</span> overlappingMoveSupported, <a class="code" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> flags)</div>
+<div class="line"><a name="l15059"></a><span class="lineno">15059</span>&#160;{</div>
+<div class="line"><a name="l15060"></a><span class="lineno">15060</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> allAllocations = m_AllAllocations ||</div>
+<div class="line"><a name="l15061"></a><span class="lineno">15061</span>&#160;        m_Allocations.size() == m_pBlockVector-&gt;CalcAllocationCount();</div>
+<div class="line"><a name="l15062"></a><span class="lineno">15062</span>&#160; </div>
+<div class="line"><a name="l15063"></a><span class="lineno">15063</span>&#160;<span class="comment">    /********************************</span></div>
+<div class="line"><a name="l15064"></a><span class="lineno">15064</span>&#160;<span class="comment">    HERE IS THE CHOICE OF DEFRAGMENTATION ALGORITHM.</span></div>
+<div class="line"><a name="l15065"></a><span class="lineno">15065</span>&#160;<span class="comment">    ********************************/</span></div>
+<div class="line"><a name="l15066"></a><span class="lineno">15066</span>&#160; </div>
+<div class="line"><a name="l15067"></a><span class="lineno">15067</span>&#160;    <span class="comment">/*</span></div>
+<div class="line"><a name="l15068"></a><span class="lineno">15068</span>&#160;<span class="comment">    Fast algorithm is supported only when certain criteria are met:</span></div>
+<div class="line"><a name="l15069"></a><span class="lineno">15069</span>&#160;<span class="comment">    - VMA_DEBUG_MARGIN is 0.</span></div>
+<div class="line"><a name="l15070"></a><span class="lineno">15070</span>&#160;<span class="comment">    - All allocations in this block vector are moveable.</span></div>
+<div class="line"><a name="l15071"></a><span class="lineno">15071</span>&#160;<span class="comment">    - There is no possibility of image/buffer granularity conflict.</span></div>
+<div class="line"><a name="l15072"></a><span class="lineno">15072</span>&#160;<span class="comment">    - The defragmentation is not incremental</span></div>
+<div class="line"><a name="l15073"></a><span class="lineno">15073</span>&#160;<span class="comment">    */</span></div>
+<div class="line"><a name="l15074"></a><span class="lineno">15074</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_MARGIN == 0 &amp;&amp;</div>
+<div class="line"><a name="l15075"></a><span class="lineno">15075</span>&#160;        allAllocations &amp;&amp;</div>
+<div class="line"><a name="l15076"></a><span class="lineno">15076</span>&#160;        !m_pBlockVector-&gt;IsBufferImageGranularityConflictPossible() &amp;&amp;</div>
+<div class="line"><a name="l15077"></a><span class="lineno">15077</span>&#160;        !(flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a>))</div>
+<div class="line"><a name="l15078"></a><span class="lineno">15078</span>&#160;    {</div>
+<div class="line"><a name="l15079"></a><span class="lineno">15079</span>&#160;        m_pAlgorithm = vma_new(m_hAllocator, VmaDefragmentationAlgorithm_Fast)(</div>
+<div class="line"><a name="l15080"></a><span class="lineno">15080</span>&#160;            m_hAllocator, m_pBlockVector, m_CurrFrameIndex, overlappingMoveSupported);</div>
+<div class="line"><a name="l15081"></a><span class="lineno">15081</span>&#160;    }</div>
+<div class="line"><a name="l15082"></a><span class="lineno">15082</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15083"></a><span class="lineno">15083</span>&#160;    {</div>
+<div class="line"><a name="l15084"></a><span class="lineno">15084</span>&#160;        m_pAlgorithm = vma_new(m_hAllocator, VmaDefragmentationAlgorithm_Generic)(</div>
+<div class="line"><a name="l15085"></a><span class="lineno">15085</span>&#160;            m_hAllocator, m_pBlockVector, m_CurrFrameIndex, overlappingMoveSupported);</div>
+<div class="line"><a name="l15086"></a><span class="lineno">15086</span>&#160;    }</div>
+<div class="line"><a name="l15087"></a><span class="lineno">15087</span>&#160; </div>
+<div class="line"><a name="l15088"></a><span class="lineno">15088</span>&#160;    <span class="keywordflow">if</span>(allAllocations)</div>
+<div class="line"><a name="l15089"></a><span class="lineno">15089</span>&#160;    {</div>
+<div class="line"><a name="l15090"></a><span class="lineno">15090</span>&#160;        m_pAlgorithm-&gt;AddAll();</div>
+<div class="line"><a name="l15091"></a><span class="lineno">15091</span>&#160;    }</div>
+<div class="line"><a name="l15092"></a><span class="lineno">15092</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15093"></a><span class="lineno">15093</span>&#160;    {</div>
+<div class="line"><a name="l15094"></a><span class="lineno">15094</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0, count = m_Allocations.size(); i &lt; count; ++i)</div>
+<div class="line"><a name="l15095"></a><span class="lineno">15095</span>&#160;        {</div>
+<div class="line"><a name="l15096"></a><span class="lineno">15096</span>&#160;            m_pAlgorithm-&gt;AddAllocation(m_Allocations[i].hAlloc, m_Allocations[i].pChanged);</div>
+<div class="line"><a name="l15097"></a><span class="lineno">15097</span>&#160;        }</div>
+<div class="line"><a name="l15098"></a><span class="lineno">15098</span>&#160;    }</div>
+<div class="line"><a name="l15099"></a><span class="lineno">15099</span>&#160;}</div>
+<div class="line"><a name="l15100"></a><span class="lineno">15100</span>&#160; </div>
+<div class="line"><a name="l15102"></a><span class="lineno">15102</span>&#160;<span class="comment">// VmaDefragmentationContext</span></div>
+<div class="line"><a name="l15103"></a><span class="lineno">15103</span>&#160; </div>
+<div class="line"><a name="l15104"></a><span class="lineno">15104</span>&#160;VmaDefragmentationContext_T::VmaDefragmentationContext_T(</div>
+<div class="line"><a name="l15105"></a><span class="lineno">15105</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
+<div class="line"><a name="l15106"></a><span class="lineno">15106</span>&#160;    uint32_t currFrameIndex,</div>
+<div class="line"><a name="l15107"></a><span class="lineno">15107</span>&#160;    uint32_t flags,</div>
+<div class="line"><a name="l15108"></a><span class="lineno">15108</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats) :</div>
+<div class="line"><a name="l15109"></a><span class="lineno">15109</span>&#160;    m_hAllocator(hAllocator),</div>
+<div class="line"><a name="l15110"></a><span class="lineno">15110</span>&#160;    m_CurrFrameIndex(currFrameIndex),</div>
+<div class="line"><a name="l15111"></a><span class="lineno">15111</span>&#160;    m_Flags(flags),</div>
+<div class="line"><a name="l15112"></a><span class="lineno">15112</span>&#160;    m_pStats(pStats),</div>
+<div class="line"><a name="l15113"></a><span class="lineno">15113</span>&#160;    m_CustomPoolContexts(VmaStlAllocator&lt;VmaBlockVectorDefragmentationContext*&gt;(hAllocator-&gt;GetAllocationCallbacks()))</div>
+<div class="line"><a name="l15114"></a><span class="lineno">15114</span>&#160;{</div>
+<div class="line"><a name="l15115"></a><span class="lineno">15115</span>&#160;    memset(m_DefaultPoolContexts, 0, <span class="keyword">sizeof</span>(m_DefaultPoolContexts));</div>
+<div class="line"><a name="l15116"></a><span class="lineno">15116</span>&#160;}</div>
+<div class="line"><a name="l15117"></a><span class="lineno">15117</span>&#160; </div>
+<div class="line"><a name="l15118"></a><span class="lineno">15118</span>&#160;VmaDefragmentationContext_T::~VmaDefragmentationContext_T()</div>
+<div class="line"><a name="l15119"></a><span class="lineno">15119</span>&#160;{</div>
+<div class="line"><a name="l15120"></a><span class="lineno">15120</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_CustomPoolContexts.size(); i--; )</div>
+<div class="line"><a name="l15121"></a><span class="lineno">15121</span>&#160;    {</div>
+<div class="line"><a name="l15122"></a><span class="lineno">15122</span>&#160;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_CustomPoolContexts[i];</div>
+<div class="line"><a name="l15123"></a><span class="lineno">15123</span>&#160;        pBlockVectorCtx-&gt;GetBlockVector()-&gt;DefragmentationEnd(pBlockVectorCtx, m_Flags, m_pStats);</div>
+<div class="line"><a name="l15124"></a><span class="lineno">15124</span>&#160;        vma_delete(m_hAllocator, pBlockVectorCtx);</div>
+<div class="line"><a name="l15125"></a><span class="lineno">15125</span>&#160;    }</div>
+<div class="line"><a name="l15126"></a><span class="lineno">15126</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_hAllocator-&gt;m_MemProps.memoryTypeCount; i--; )</div>
+<div class="line"><a name="l15127"></a><span class="lineno">15127</span>&#160;    {</div>
+<div class="line"><a name="l15128"></a><span class="lineno">15128</span>&#160;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_DefaultPoolContexts[i];</div>
+<div class="line"><a name="l15129"></a><span class="lineno">15129</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx)</div>
+<div class="line"><a name="l15130"></a><span class="lineno">15130</span>&#160;        {</div>
+<div class="line"><a name="l15131"></a><span class="lineno">15131</span>&#160;            pBlockVectorCtx-&gt;GetBlockVector()-&gt;DefragmentationEnd(pBlockVectorCtx, m_Flags, m_pStats);</div>
+<div class="line"><a name="l15132"></a><span class="lineno">15132</span>&#160;            vma_delete(m_hAllocator, pBlockVectorCtx);</div>
+<div class="line"><a name="l15133"></a><span class="lineno">15133</span>&#160;        }</div>
+<div class="line"><a name="l15134"></a><span class="lineno">15134</span>&#160;    }</div>
+<div class="line"><a name="l15135"></a><span class="lineno">15135</span>&#160;}</div>
+<div class="line"><a name="l15136"></a><span class="lineno">15136</span>&#160; </div>
+<div class="line"><a name="l15137"></a><span class="lineno">15137</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationContext_T::AddPools(uint32_t poolCount, <span class="keyword">const</span> <a class="code" href="struct_vma_pool.html">VmaPool</a>* pPools)</div>
+<div class="line"><a name="l15138"></a><span class="lineno">15138</span>&#160;{</div>
+<div class="line"><a name="l15139"></a><span class="lineno">15139</span>&#160;    <span class="keywordflow">for</span>(uint32_t poolIndex = 0; poolIndex &lt; poolCount; ++poolIndex)</div>
+<div class="line"><a name="l15140"></a><span class="lineno">15140</span>&#160;    {</div>
+<div class="line"><a name="l15141"></a><span class="lineno">15141</span>&#160;        <a class="code" href="struct_vma_pool.html">VmaPool</a> pool = pPools[poolIndex];</div>
+<div class="line"><a name="l15142"></a><span class="lineno">15142</span>&#160;        VMA_ASSERT(pool);</div>
+<div class="line"><a name="l15143"></a><span class="lineno">15143</span>&#160;        <span class="comment">// Pools with algorithm other than default are not defragmented.</span></div>
+<div class="line"><a name="l15144"></a><span class="lineno">15144</span>&#160;        <span class="keywordflow">if</span>(pool-&gt;m_BlockVector.GetAlgorithm() == 0)</div>
+<div class="line"><a name="l15145"></a><span class="lineno">15145</span>&#160;        {</div>
+<div class="line"><a name="l15146"></a><span class="lineno">15146</span>&#160;            VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;</div>
+<div class="line"><a name="l15147"></a><span class="lineno">15147</span>&#160; </div>
+<div class="line"><a name="l15148"></a><span class="lineno">15148</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_CustomPoolContexts.size(); i--; )</div>
+<div class="line"><a name="l15149"></a><span class="lineno">15149</span>&#160;            {</div>
+<div class="line"><a name="l15150"></a><span class="lineno">15150</span>&#160;                <span class="keywordflow">if</span>(m_CustomPoolContexts[i]-&gt;GetCustomPool() == pool)</div>
+<div class="line"><a name="l15151"></a><span class="lineno">15151</span>&#160;                {</div>
+<div class="line"><a name="l15152"></a><span class="lineno">15152</span>&#160;                    pBlockVectorDefragCtx = m_CustomPoolContexts[i];</div>
+<div class="line"><a name="l15153"></a><span class="lineno">15153</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l15154"></a><span class="lineno">15154</span>&#160;                }</div>
+<div class="line"><a name="l15155"></a><span class="lineno">15155</span>&#160;            }</div>
+<div class="line"><a name="l15156"></a><span class="lineno">15156</span>&#160; </div>
+<div class="line"><a name="l15157"></a><span class="lineno">15157</span>&#160;            <span class="keywordflow">if</span>(!pBlockVectorDefragCtx)</div>
+<div class="line"><a name="l15158"></a><span class="lineno">15158</span>&#160;            {</div>
+<div class="line"><a name="l15159"></a><span class="lineno">15159</span>&#160;                pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(</div>
+<div class="line"><a name="l15160"></a><span class="lineno">15160</span>&#160;                    m_hAllocator,</div>
+<div class="line"><a name="l15161"></a><span class="lineno">15161</span>&#160;                    pool,</div>
+<div class="line"><a name="l15162"></a><span class="lineno">15162</span>&#160;                    &amp;pool-&gt;m_BlockVector,</div>
+<div class="line"><a name="l15163"></a><span class="lineno">15163</span>&#160;                    m_CurrFrameIndex);</div>
+<div class="line"><a name="l15164"></a><span class="lineno">15164</span>&#160;                m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);</div>
+<div class="line"><a name="l15165"></a><span class="lineno">15165</span>&#160;            }</div>
+<div class="line"><a name="l15166"></a><span class="lineno">15166</span>&#160; </div>
+<div class="line"><a name="l15167"></a><span class="lineno">15167</span>&#160;            pBlockVectorDefragCtx-&gt;AddAll();</div>
+<div class="line"><a name="l15168"></a><span class="lineno">15168</span>&#160;        }</div>
+<div class="line"><a name="l15169"></a><span class="lineno">15169</span>&#160;    }</div>
+<div class="line"><a name="l15170"></a><span class="lineno">15170</span>&#160;}</div>
+<div class="line"><a name="l15171"></a><span class="lineno">15171</span>&#160; </div>
+<div class="line"><a name="l15172"></a><span class="lineno">15172</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationContext_T::AddAllocations(</div>
+<div class="line"><a name="l15173"></a><span class="lineno">15173</span>&#160;    uint32_t allocationCount,</div>
+<div class="line"><a name="l15174"></a><span class="lineno">15174</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations,</div>
+<div class="line"><a name="l15175"></a><span class="lineno">15175</span>&#160;    VkBool32* pAllocationsChanged)</div>
+<div class="line"><a name="l15176"></a><span class="lineno">15176</span>&#160;{</div>
+<div class="line"><a name="l15177"></a><span class="lineno">15177</span>&#160;    <span class="comment">// Dispatch pAllocations among defragmentators. Create them when necessary.</span></div>
+<div class="line"><a name="l15178"></a><span class="lineno">15178</span>&#160;    <span class="keywordflow">for</span>(uint32_t allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</div>
+<div class="line"><a name="l15179"></a><span class="lineno">15179</span>&#160;    {</div>
+<div class="line"><a name="l15180"></a><span class="lineno">15180</span>&#160;        <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAlloc = pAllocations[allocIndex];</div>
+<div class="line"><a name="l15181"></a><span class="lineno">15181</span>&#160;        VMA_ASSERT(hAlloc);</div>
+<div class="line"><a name="l15182"></a><span class="lineno">15182</span>&#160;        <span class="comment">// DedicatedAlloc cannot be defragmented.</span></div>
+<div class="line"><a name="l15183"></a><span class="lineno">15183</span>&#160;        <span class="keywordflow">if</span>((hAlloc-&gt;GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK) &amp;&amp;</div>
+<div class="line"><a name="l15184"></a><span class="lineno">15184</span>&#160;            <span class="comment">// Lost allocation cannot be defragmented.</span></div>
+<div class="line"><a name="l15185"></a><span class="lineno">15185</span>&#160;            (hAlloc-&gt;GetLastUseFrameIndex() != VMA_FRAME_INDEX_LOST))</div>
+<div class="line"><a name="l15186"></a><span class="lineno">15186</span>&#160;        {</div>
+<div class="line"><a name="l15187"></a><span class="lineno">15187</span>&#160;            VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;</div>
+<div class="line"><a name="l15188"></a><span class="lineno">15188</span>&#160; </div>
+<div class="line"><a name="l15189"></a><span class="lineno">15189</span>&#160;            <span class="keyword">const</span> <a class="code" href="struct_vma_pool.html">VmaPool</a> hAllocPool = hAlloc-&gt;GetBlock()-&gt;GetParentPool();</div>
+<div class="line"><a name="l15190"></a><span class="lineno">15190</span>&#160;            <span class="comment">// This allocation belongs to custom pool.</span></div>
+<div class="line"><a name="l15191"></a><span class="lineno">15191</span>&#160;            <span class="keywordflow">if</span>(hAllocPool != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l15192"></a><span class="lineno">15192</span>&#160;            {</div>
+<div class="line"><a name="l15193"></a><span class="lineno">15193</span>&#160;                <span class="comment">// Pools with algorithm other than default are not defragmented.</span></div>
+<div class="line"><a name="l15194"></a><span class="lineno">15194</span>&#160;                <span class="keywordflow">if</span>(hAllocPool-&gt;m_BlockVector.GetAlgorithm() == 0)</div>
+<div class="line"><a name="l15195"></a><span class="lineno">15195</span>&#160;                {</div>
+<div class="line"><a name="l15196"></a><span class="lineno">15196</span>&#160;                    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_CustomPoolContexts.size(); i--; )</div>
+<div class="line"><a name="l15197"></a><span class="lineno">15197</span>&#160;                    {</div>
+<div class="line"><a name="l15198"></a><span class="lineno">15198</span>&#160;                        <span class="keywordflow">if</span>(m_CustomPoolContexts[i]-&gt;GetCustomPool() == hAllocPool)</div>
+<div class="line"><a name="l15199"></a><span class="lineno">15199</span>&#160;                        {</div>
+<div class="line"><a name="l15200"></a><span class="lineno">15200</span>&#160;                            pBlockVectorDefragCtx = m_CustomPoolContexts[i];</div>
+<div class="line"><a name="l15201"></a><span class="lineno">15201</span>&#160;                            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l15202"></a><span class="lineno">15202</span>&#160;                        }</div>
+<div class="line"><a name="l15203"></a><span class="lineno">15203</span>&#160;                    }</div>
+<div class="line"><a name="l15204"></a><span class="lineno">15204</span>&#160;                    <span class="keywordflow">if</span>(!pBlockVectorDefragCtx)</div>
+<div class="line"><a name="l15205"></a><span class="lineno">15205</span>&#160;                    {</div>
+<div class="line"><a name="l15206"></a><span class="lineno">15206</span>&#160;                        pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(</div>
+<div class="line"><a name="l15207"></a><span class="lineno">15207</span>&#160;                            m_hAllocator,</div>
+<div class="line"><a name="l15208"></a><span class="lineno">15208</span>&#160;                            hAllocPool,</div>
+<div class="line"><a name="l15209"></a><span class="lineno">15209</span>&#160;                            &amp;hAllocPool-&gt;m_BlockVector,</div>
+<div class="line"><a name="l15210"></a><span class="lineno">15210</span>&#160;                            m_CurrFrameIndex);</div>
+<div class="line"><a name="l15211"></a><span class="lineno">15211</span>&#160;                        m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);</div>
+<div class="line"><a name="l15212"></a><span class="lineno">15212</span>&#160;                    }</div>
+<div class="line"><a name="l15213"></a><span class="lineno">15213</span>&#160;                }</div>
+<div class="line"><a name="l15214"></a><span class="lineno">15214</span>&#160;            }</div>
+<div class="line"><a name="l15215"></a><span class="lineno">15215</span>&#160;            <span class="comment">// This allocation belongs to default pool.</span></div>
+<div class="line"><a name="l15216"></a><span class="lineno">15216</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15217"></a><span class="lineno">15217</span>&#160;            {</div>
+<div class="line"><a name="l15218"></a><span class="lineno">15218</span>&#160;                <span class="keyword">const</span> uint32_t memTypeIndex = hAlloc-&gt;GetMemoryTypeIndex();</div>
+<div class="line"><a name="l15219"></a><span class="lineno">15219</span>&#160;                pBlockVectorDefragCtx = m_DefaultPoolContexts[memTypeIndex];</div>
+<div class="line"><a name="l15220"></a><span class="lineno">15220</span>&#160;                <span class="keywordflow">if</span>(!pBlockVectorDefragCtx)</div>
+<div class="line"><a name="l15221"></a><span class="lineno">15221</span>&#160;                {</div>
+<div class="line"><a name="l15222"></a><span class="lineno">15222</span>&#160;                    pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(</div>
+<div class="line"><a name="l15223"></a><span class="lineno">15223</span>&#160;                        m_hAllocator,</div>
+<div class="line"><a name="l15224"></a><span class="lineno">15224</span>&#160;                        VMA_NULL, <span class="comment">// hCustomPool</span></div>
+<div class="line"><a name="l15225"></a><span class="lineno">15225</span>&#160;                        m_hAllocator-&gt;m_pBlockVectors[memTypeIndex],</div>
+<div class="line"><a name="l15226"></a><span class="lineno">15226</span>&#160;                        m_CurrFrameIndex);</div>
+<div class="line"><a name="l15227"></a><span class="lineno">15227</span>&#160;                    m_DefaultPoolContexts[memTypeIndex] = pBlockVectorDefragCtx;</div>
+<div class="line"><a name="l15228"></a><span class="lineno">15228</span>&#160;                }</div>
+<div class="line"><a name="l15229"></a><span class="lineno">15229</span>&#160;            }</div>
+<div class="line"><a name="l15230"></a><span class="lineno">15230</span>&#160; </div>
+<div class="line"><a name="l15231"></a><span class="lineno">15231</span>&#160;            <span class="keywordflow">if</span>(pBlockVectorDefragCtx)</div>
+<div class="line"><a name="l15232"></a><span class="lineno">15232</span>&#160;            {</div>
+<div class="line"><a name="l15233"></a><span class="lineno">15233</span>&#160;                VkBool32* <span class="keyword">const</span> pChanged = (pAllocationsChanged != VMA_NULL) ?</div>
+<div class="line"><a name="l15234"></a><span class="lineno">15234</span>&#160;                    &amp;pAllocationsChanged[allocIndex] : VMA_NULL;</div>
+<div class="line"><a name="l15235"></a><span class="lineno">15235</span>&#160;                pBlockVectorDefragCtx-&gt;AddAllocation(hAlloc, pChanged);</div>
+<div class="line"><a name="l15236"></a><span class="lineno">15236</span>&#160;            }</div>
+<div class="line"><a name="l15237"></a><span class="lineno">15237</span>&#160;        }</div>
+<div class="line"><a name="l15238"></a><span class="lineno">15238</span>&#160;    }</div>
+<div class="line"><a name="l15239"></a><span class="lineno">15239</span>&#160;}</div>
+<div class="line"><a name="l15240"></a><span class="lineno">15240</span>&#160; </div>
+<div class="line"><a name="l15241"></a><span class="lineno">15241</span>&#160;VkResult VmaDefragmentationContext_T::Defragment(</div>
+<div class="line"><a name="l15242"></a><span class="lineno">15242</span>&#160;    VkDeviceSize maxCpuBytesToMove, uint32_t maxCpuAllocationsToMove,</div>
+<div class="line"><a name="l15243"></a><span class="lineno">15243</span>&#160;    VkDeviceSize maxGpuBytesToMove, uint32_t maxGpuAllocationsToMove,</div>
+<div class="line"><a name="l15244"></a><span class="lineno">15244</span>&#160;    VkCommandBuffer commandBuffer, <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats, <a class="code" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> flags)</div>
+<div class="line"><a name="l15245"></a><span class="lineno">15245</span>&#160;{</div>
+<div class="line"><a name="l15246"></a><span class="lineno">15246</span>&#160;    <span class="keywordflow">if</span>(pStats)</div>
+<div class="line"><a name="l15247"></a><span class="lineno">15247</span>&#160;    {</div>
+<div class="line"><a name="l15248"></a><span class="lineno">15248</span>&#160;        memset(pStats, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>));</div>
+<div class="line"><a name="l15249"></a><span class="lineno">15249</span>&#160;    }</div>
+<div class="line"><a name="l15250"></a><span class="lineno">15250</span>&#160; </div>
+<div class="line"><a name="l15251"></a><span class="lineno">15251</span>&#160;    <span class="keywordflow">if</span>(flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a>)</div>
+<div class="line"><a name="l15252"></a><span class="lineno">15252</span>&#160;    {</div>
+<div class="line"><a name="l15253"></a><span class="lineno">15253</span>&#160;        <span class="comment">// For incremental defragmetnations, we just earmark how much we can move</span></div>
+<div class="line"><a name="l15254"></a><span class="lineno">15254</span>&#160;        <span class="comment">// The real meat is in the defragmentation steps</span></div>
+<div class="line"><a name="l15255"></a><span class="lineno">15255</span>&#160;        m_MaxCpuBytesToMove = maxCpuBytesToMove;</div>
+<div class="line"><a name="l15256"></a><span class="lineno">15256</span>&#160;        m_MaxCpuAllocationsToMove = maxCpuAllocationsToMove;</div>
+<div class="line"><a name="l15257"></a><span class="lineno">15257</span>&#160; </div>
+<div class="line"><a name="l15258"></a><span class="lineno">15258</span>&#160;        m_MaxGpuBytesToMove = maxGpuBytesToMove;</div>
+<div class="line"><a name="l15259"></a><span class="lineno">15259</span>&#160;        m_MaxGpuAllocationsToMove = maxGpuAllocationsToMove;</div>
+<div class="line"><a name="l15260"></a><span class="lineno">15260</span>&#160; </div>
+<div class="line"><a name="l15261"></a><span class="lineno">15261</span>&#160;        <span class="keywordflow">if</span>(m_MaxCpuBytesToMove == 0 &amp;&amp; m_MaxCpuAllocationsToMove == 0 &amp;&amp;</div>
+<div class="line"><a name="l15262"></a><span class="lineno">15262</span>&#160;            m_MaxGpuBytesToMove == 0 &amp;&amp; m_MaxGpuAllocationsToMove == 0)</div>
+<div class="line"><a name="l15263"></a><span class="lineno">15263</span>&#160;            <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l15264"></a><span class="lineno">15264</span>&#160; </div>
+<div class="line"><a name="l15265"></a><span class="lineno">15265</span>&#160;        <span class="keywordflow">return</span> VK_NOT_READY;</div>
+<div class="line"><a name="l15266"></a><span class="lineno">15266</span>&#160;    }</div>
+<div class="line"><a name="l15267"></a><span class="lineno">15267</span>&#160; </div>
+<div class="line"><a name="l15268"></a><span class="lineno">15268</span>&#160;    <span class="keywordflow">if</span>(commandBuffer == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l15269"></a><span class="lineno">15269</span>&#160;    {</div>
+<div class="line"><a name="l15270"></a><span class="lineno">15270</span>&#160;        maxGpuBytesToMove = 0;</div>
+<div class="line"><a name="l15271"></a><span class="lineno">15271</span>&#160;        maxGpuAllocationsToMove = 0;</div>
+<div class="line"><a name="l15272"></a><span class="lineno">15272</span>&#160;    }</div>
+<div class="line"><a name="l15273"></a><span class="lineno">15273</span>&#160; </div>
+<div class="line"><a name="l15274"></a><span class="lineno">15274</span>&#160;    VkResult res = VK_SUCCESS;</div>
+<div class="line"><a name="l15275"></a><span class="lineno">15275</span>&#160; </div>
+<div class="line"><a name="l15276"></a><span class="lineno">15276</span>&#160;    <span class="comment">// Process default pools.</span></div>
+<div class="line"><a name="l15277"></a><span class="lineno">15277</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0;</div>
+<div class="line"><a name="l15278"></a><span class="lineno">15278</span>&#160;        memTypeIndex &lt; m_hAllocator-&gt;GetMemoryTypeCount() &amp;&amp; res &gt;= VK_SUCCESS;</div>
+<div class="line"><a name="l15279"></a><span class="lineno">15279</span>&#160;        ++memTypeIndex)</div>
+<div class="line"><a name="l15280"></a><span class="lineno">15280</span>&#160;    {</div>
+<div class="line"><a name="l15281"></a><span class="lineno">15281</span>&#160;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_DefaultPoolContexts[memTypeIndex];</div>
+<div class="line"><a name="l15282"></a><span class="lineno">15282</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx)</div>
+<div class="line"><a name="l15283"></a><span class="lineno">15283</span>&#160;        {</div>
+<div class="line"><a name="l15284"></a><span class="lineno">15284</span>&#160;            VMA_ASSERT(pBlockVectorCtx-&gt;GetBlockVector());</div>
+<div class="line"><a name="l15285"></a><span class="lineno">15285</span>&#160;            pBlockVectorCtx-&gt;GetBlockVector()-&gt;Defragment(</div>
+<div class="line"><a name="l15286"></a><span class="lineno">15286</span>&#160;                pBlockVectorCtx,</div>
+<div class="line"><a name="l15287"></a><span class="lineno">15287</span>&#160;                pStats, flags,</div>
+<div class="line"><a name="l15288"></a><span class="lineno">15288</span>&#160;                maxCpuBytesToMove, maxCpuAllocationsToMove,</div>
+<div class="line"><a name="l15289"></a><span class="lineno">15289</span>&#160;                maxGpuBytesToMove, maxGpuAllocationsToMove,</div>
+<div class="line"><a name="l15290"></a><span class="lineno">15290</span>&#160;                commandBuffer);</div>
+<div class="line"><a name="l15291"></a><span class="lineno">15291</span>&#160;            <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;res != VK_SUCCESS)</div>
+<div class="line"><a name="l15292"></a><span class="lineno">15292</span>&#160;            {</div>
+<div class="line"><a name="l15293"></a><span class="lineno">15293</span>&#160;                res = pBlockVectorCtx-&gt;res;</div>
+<div class="line"><a name="l15294"></a><span class="lineno">15294</span>&#160;            }</div>
+<div class="line"><a name="l15295"></a><span class="lineno">15295</span>&#160;        }</div>
+<div class="line"><a name="l15296"></a><span class="lineno">15296</span>&#160;    }</div>
+<div class="line"><a name="l15297"></a><span class="lineno">15297</span>&#160; </div>
+<div class="line"><a name="l15298"></a><span class="lineno">15298</span>&#160;    <span class="comment">// Process custom pools.</span></div>
+<div class="line"><a name="l15299"></a><span class="lineno">15299</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> customCtxIndex = 0, customCtxCount = m_CustomPoolContexts.size();</div>
+<div class="line"><a name="l15300"></a><span class="lineno">15300</span>&#160;        customCtxIndex &lt; customCtxCount &amp;&amp; res &gt;= VK_SUCCESS;</div>
+<div class="line"><a name="l15301"></a><span class="lineno">15301</span>&#160;        ++customCtxIndex)</div>
+<div class="line"><a name="l15302"></a><span class="lineno">15302</span>&#160;    {</div>
+<div class="line"><a name="l15303"></a><span class="lineno">15303</span>&#160;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_CustomPoolContexts[customCtxIndex];</div>
+<div class="line"><a name="l15304"></a><span class="lineno">15304</span>&#160;        VMA_ASSERT(pBlockVectorCtx &amp;&amp; pBlockVectorCtx-&gt;GetBlockVector());</div>
+<div class="line"><a name="l15305"></a><span class="lineno">15305</span>&#160;        pBlockVectorCtx-&gt;GetBlockVector()-&gt;Defragment(</div>
+<div class="line"><a name="l15306"></a><span class="lineno">15306</span>&#160;            pBlockVectorCtx,</div>
+<div class="line"><a name="l15307"></a><span class="lineno">15307</span>&#160;            pStats, flags,</div>
+<div class="line"><a name="l15308"></a><span class="lineno">15308</span>&#160;            maxCpuBytesToMove, maxCpuAllocationsToMove,</div>
+<div class="line"><a name="l15309"></a><span class="lineno">15309</span>&#160;            maxGpuBytesToMove, maxGpuAllocationsToMove,</div>
+<div class="line"><a name="l15310"></a><span class="lineno">15310</span>&#160;            commandBuffer);</div>
+<div class="line"><a name="l15311"></a><span class="lineno">15311</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;res != VK_SUCCESS)</div>
+<div class="line"><a name="l15312"></a><span class="lineno">15312</span>&#160;        {</div>
+<div class="line"><a name="l15313"></a><span class="lineno">15313</span>&#160;            res = pBlockVectorCtx-&gt;res;</div>
+<div class="line"><a name="l15314"></a><span class="lineno">15314</span>&#160;        }</div>
+<div class="line"><a name="l15315"></a><span class="lineno">15315</span>&#160;    }</div>
+<div class="line"><a name="l15316"></a><span class="lineno">15316</span>&#160; </div>
+<div class="line"><a name="l15317"></a><span class="lineno">15317</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l15318"></a><span class="lineno">15318</span>&#160;}</div>
+<div class="line"><a name="l15319"></a><span class="lineno">15319</span>&#160; </div>
+<div class="line"><a name="l15320"></a><span class="lineno">15320</span>&#160;VkResult VmaDefragmentationContext_T::DefragmentPassBegin(<a class="code" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a>* pInfo)</div>
+<div class="line"><a name="l15321"></a><span class="lineno">15321</span>&#160;{</div>
+<div class="line"><a name="l15322"></a><span class="lineno">15322</span>&#160;    <a class="code" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a>* pCurrentMove = pInfo-&gt;<a class="code" href="struct_vma_defragmentation_pass_info.html#acbd42d4a3357999da130a95cd99a3792">pMoves</a>;</div>
+<div class="line"><a name="l15323"></a><span class="lineno">15323</span>&#160;    uint32_t movesLeft = pInfo-&gt;<a class="code" href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c">moveCount</a>;</div>
+<div class="line"><a name="l15324"></a><span class="lineno">15324</span>&#160; </div>
+<div class="line"><a name="l15325"></a><span class="lineno">15325</span>&#160;    <span class="comment">// Process default pools.</span></div>
+<div class="line"><a name="l15326"></a><span class="lineno">15326</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0;</div>
+<div class="line"><a name="l15327"></a><span class="lineno">15327</span>&#160;        memTypeIndex &lt; m_hAllocator-&gt;GetMemoryTypeCount();</div>
+<div class="line"><a name="l15328"></a><span class="lineno">15328</span>&#160;        ++memTypeIndex)</div>
+<div class="line"><a name="l15329"></a><span class="lineno">15329</span>&#160;    {</div>
+<div class="line"><a name="l15330"></a><span class="lineno">15330</span>&#160;        VmaBlockVectorDefragmentationContext *pBlockVectorCtx = m_DefaultPoolContexts[memTypeIndex];</div>
+<div class="line"><a name="l15331"></a><span class="lineno">15331</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx)</div>
+<div class="line"><a name="l15332"></a><span class="lineno">15332</span>&#160;        {</div>
+<div class="line"><a name="l15333"></a><span class="lineno">15333</span>&#160;            VMA_ASSERT(pBlockVectorCtx-&gt;GetBlockVector());</div>
+<div class="line"><a name="l15334"></a><span class="lineno">15334</span>&#160; </div>
+<div class="line"><a name="l15335"></a><span class="lineno">15335</span>&#160;            <span class="keywordflow">if</span>(!pBlockVectorCtx-&gt;hasDefragmentationPlan)</div>
+<div class="line"><a name="l15336"></a><span class="lineno">15336</span>&#160;            {</div>
+<div class="line"><a name="l15337"></a><span class="lineno">15337</span>&#160;                pBlockVectorCtx-&gt;GetBlockVector()-&gt;Defragment(</div>
+<div class="line"><a name="l15338"></a><span class="lineno">15338</span>&#160;                    pBlockVectorCtx,</div>
+<div class="line"><a name="l15339"></a><span class="lineno">15339</span>&#160;                    m_pStats, m_Flags,</div>
+<div class="line"><a name="l15340"></a><span class="lineno">15340</span>&#160;                    m_MaxCpuBytesToMove, m_MaxCpuAllocationsToMove,</div>
+<div class="line"><a name="l15341"></a><span class="lineno">15341</span>&#160;                    m_MaxGpuBytesToMove, m_MaxGpuAllocationsToMove,</div>
+<div class="line"><a name="l15342"></a><span class="lineno">15342</span>&#160;                    VK_NULL_HANDLE);</div>
+<div class="line"><a name="l15343"></a><span class="lineno">15343</span>&#160; </div>
+<div class="line"><a name="l15344"></a><span class="lineno">15344</span>&#160;                <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;res &lt; VK_SUCCESS)</div>
+<div class="line"><a name="l15345"></a><span class="lineno">15345</span>&#160;                    <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l15346"></a><span class="lineno">15346</span>&#160; </div>
+<div class="line"><a name="l15347"></a><span class="lineno">15347</span>&#160;                pBlockVectorCtx-&gt;hasDefragmentationPlan = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l15348"></a><span class="lineno">15348</span>&#160;            }</div>
+<div class="line"><a name="l15349"></a><span class="lineno">15349</span>&#160; </div>
+<div class="line"><a name="l15350"></a><span class="lineno">15350</span>&#160;            <span class="keyword">const</span> uint32_t processed = pBlockVectorCtx-&gt;GetBlockVector()-&gt;ProcessDefragmentations(</div>
+<div class="line"><a name="l15351"></a><span class="lineno">15351</span>&#160;                pBlockVectorCtx,</div>
+<div class="line"><a name="l15352"></a><span class="lineno">15352</span>&#160;                pCurrentMove, movesLeft);</div>
+<div class="line"><a name="l15353"></a><span class="lineno">15353</span>&#160; </div>
+<div class="line"><a name="l15354"></a><span class="lineno">15354</span>&#160;            movesLeft -= processed;</div>
+<div class="line"><a name="l15355"></a><span class="lineno">15355</span>&#160;            pCurrentMove += processed;</div>
+<div class="line"><a name="l15356"></a><span class="lineno">15356</span>&#160;        }</div>
+<div class="line"><a name="l15357"></a><span class="lineno">15357</span>&#160;    }</div>
+<div class="line"><a name="l15358"></a><span class="lineno">15358</span>&#160; </div>
+<div class="line"><a name="l15359"></a><span class="lineno">15359</span>&#160;    <span class="comment">// Process custom pools.</span></div>
+<div class="line"><a name="l15360"></a><span class="lineno">15360</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> customCtxIndex = 0, customCtxCount = m_CustomPoolContexts.size();</div>
+<div class="line"><a name="l15361"></a><span class="lineno">15361</span>&#160;        customCtxIndex &lt; customCtxCount;</div>
+<div class="line"><a name="l15362"></a><span class="lineno">15362</span>&#160;        ++customCtxIndex)</div>
+<div class="line"><a name="l15363"></a><span class="lineno">15363</span>&#160;    {</div>
+<div class="line"><a name="l15364"></a><span class="lineno">15364</span>&#160;        VmaBlockVectorDefragmentationContext *pBlockVectorCtx = m_CustomPoolContexts[customCtxIndex];</div>
+<div class="line"><a name="l15365"></a><span class="lineno">15365</span>&#160;        VMA_ASSERT(pBlockVectorCtx &amp;&amp; pBlockVectorCtx-&gt;GetBlockVector());</div>
+<div class="line"><a name="l15366"></a><span class="lineno">15366</span>&#160; </div>
+<div class="line"><a name="l15367"></a><span class="lineno">15367</span>&#160;        <span class="keywordflow">if</span>(!pBlockVectorCtx-&gt;hasDefragmentationPlan)</div>
+<div class="line"><a name="l15368"></a><span class="lineno">15368</span>&#160;        {</div>
+<div class="line"><a name="l15369"></a><span class="lineno">15369</span>&#160;            pBlockVectorCtx-&gt;GetBlockVector()-&gt;Defragment(</div>
+<div class="line"><a name="l15370"></a><span class="lineno">15370</span>&#160;                pBlockVectorCtx,</div>
+<div class="line"><a name="l15371"></a><span class="lineno">15371</span>&#160;                m_pStats, m_Flags,</div>
+<div class="line"><a name="l15372"></a><span class="lineno">15372</span>&#160;                m_MaxCpuBytesToMove, m_MaxCpuAllocationsToMove,</div>
+<div class="line"><a name="l15373"></a><span class="lineno">15373</span>&#160;                m_MaxGpuBytesToMove, m_MaxGpuAllocationsToMove,</div>
+<div class="line"><a name="l15374"></a><span class="lineno">15374</span>&#160;                VK_NULL_HANDLE);</div>
+<div class="line"><a name="l15375"></a><span class="lineno">15375</span>&#160; </div>
+<div class="line"><a name="l15376"></a><span class="lineno">15376</span>&#160;            <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;res &lt; VK_SUCCESS)</div>
+<div class="line"><a name="l15377"></a><span class="lineno">15377</span>&#160;                <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l15378"></a><span class="lineno">15378</span>&#160; </div>
+<div class="line"><a name="l15379"></a><span class="lineno">15379</span>&#160;            pBlockVectorCtx-&gt;hasDefragmentationPlan = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l15380"></a><span class="lineno">15380</span>&#160;        }</div>
+<div class="line"><a name="l15381"></a><span class="lineno">15381</span>&#160; </div>
+<div class="line"><a name="l15382"></a><span class="lineno">15382</span>&#160;        <span class="keyword">const</span> uint32_t processed = pBlockVectorCtx-&gt;GetBlockVector()-&gt;ProcessDefragmentations(</div>
+<div class="line"><a name="l15383"></a><span class="lineno">15383</span>&#160;            pBlockVectorCtx,</div>
+<div class="line"><a name="l15384"></a><span class="lineno">15384</span>&#160;            pCurrentMove, movesLeft);</div>
+<div class="line"><a name="l15385"></a><span class="lineno">15385</span>&#160; </div>
+<div class="line"><a name="l15386"></a><span class="lineno">15386</span>&#160;        movesLeft -= processed;</div>
+<div class="line"><a name="l15387"></a><span class="lineno">15387</span>&#160;        pCurrentMove += processed;</div>
+<div class="line"><a name="l15388"></a><span class="lineno">15388</span>&#160;    }</div>
+<div class="line"><a name="l15389"></a><span class="lineno">15389</span>&#160; </div>
+<div class="line"><a name="l15390"></a><span class="lineno">15390</span>&#160;    pInfo-&gt;<a class="code" href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c">moveCount</a> = pInfo-&gt;<a class="code" href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c">moveCount</a> - movesLeft;</div>
+<div class="line"><a name="l15391"></a><span class="lineno">15391</span>&#160; </div>
+<div class="line"><a name="l15392"></a><span class="lineno">15392</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l15393"></a><span class="lineno">15393</span>&#160;}</div>
+<div class="line"><a name="l15394"></a><span class="lineno">15394</span>&#160;VkResult VmaDefragmentationContext_T::DefragmentPassEnd()</div>
+<div class="line"><a name="l15395"></a><span class="lineno">15395</span>&#160;{</div>
+<div class="line"><a name="l15396"></a><span class="lineno">15396</span>&#160;    VkResult res = VK_SUCCESS;</div>
+<div class="line"><a name="l15397"></a><span class="lineno">15397</span>&#160; </div>
+<div class="line"><a name="l15398"></a><span class="lineno">15398</span>&#160;    <span class="comment">// Process default pools.</span></div>
+<div class="line"><a name="l15399"></a><span class="lineno">15399</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0;</div>
+<div class="line"><a name="l15400"></a><span class="lineno">15400</span>&#160;        memTypeIndex &lt; m_hAllocator-&gt;GetMemoryTypeCount();</div>
+<div class="line"><a name="l15401"></a><span class="lineno">15401</span>&#160;        ++memTypeIndex)</div>
+<div class="line"><a name="l15402"></a><span class="lineno">15402</span>&#160;    {</div>
+<div class="line"><a name="l15403"></a><span class="lineno">15403</span>&#160;        VmaBlockVectorDefragmentationContext *pBlockVectorCtx = m_DefaultPoolContexts[memTypeIndex];</div>
+<div class="line"><a name="l15404"></a><span class="lineno">15404</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx)</div>
+<div class="line"><a name="l15405"></a><span class="lineno">15405</span>&#160;        {</div>
+<div class="line"><a name="l15406"></a><span class="lineno">15406</span>&#160;            VMA_ASSERT(pBlockVectorCtx-&gt;GetBlockVector());</div>
+<div class="line"><a name="l15407"></a><span class="lineno">15407</span>&#160; </div>
+<div class="line"><a name="l15408"></a><span class="lineno">15408</span>&#160;            <span class="keywordflow">if</span>(!pBlockVectorCtx-&gt;hasDefragmentationPlan)</div>
+<div class="line"><a name="l15409"></a><span class="lineno">15409</span>&#160;            {</div>
+<div class="line"><a name="l15410"></a><span class="lineno">15410</span>&#160;                res = VK_NOT_READY;</div>
+<div class="line"><a name="l15411"></a><span class="lineno">15411</span>&#160;                <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l15412"></a><span class="lineno">15412</span>&#160;            }</div>
+<div class="line"><a name="l15413"></a><span class="lineno">15413</span>&#160; </div>
+<div class="line"><a name="l15414"></a><span class="lineno">15414</span>&#160;            pBlockVectorCtx-&gt;GetBlockVector()-&gt;CommitDefragmentations(</div>
+<div class="line"><a name="l15415"></a><span class="lineno">15415</span>&#160;                pBlockVectorCtx, m_pStats);</div>
+<div class="line"><a name="l15416"></a><span class="lineno">15416</span>&#160; </div>
+<div class="line"><a name="l15417"></a><span class="lineno">15417</span>&#160;            <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;defragmentationMoves.size() != pBlockVectorCtx-&gt;defragmentationMovesCommitted)</div>
+<div class="line"><a name="l15418"></a><span class="lineno">15418</span>&#160;                res = VK_NOT_READY;</div>
+<div class="line"><a name="l15419"></a><span class="lineno">15419</span>&#160;        }</div>
+<div class="line"><a name="l15420"></a><span class="lineno">15420</span>&#160;    }</div>
+<div class="line"><a name="l15421"></a><span class="lineno">15421</span>&#160; </div>
+<div class="line"><a name="l15422"></a><span class="lineno">15422</span>&#160;    <span class="comment">// Process custom pools.</span></div>
+<div class="line"><a name="l15423"></a><span class="lineno">15423</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> customCtxIndex = 0, customCtxCount = m_CustomPoolContexts.size();</div>
+<div class="line"><a name="l15424"></a><span class="lineno">15424</span>&#160;        customCtxIndex &lt; customCtxCount;</div>
+<div class="line"><a name="l15425"></a><span class="lineno">15425</span>&#160;        ++customCtxIndex)</div>
+<div class="line"><a name="l15426"></a><span class="lineno">15426</span>&#160;    {</div>
+<div class="line"><a name="l15427"></a><span class="lineno">15427</span>&#160;        VmaBlockVectorDefragmentationContext *pBlockVectorCtx = m_CustomPoolContexts[customCtxIndex];</div>
+<div class="line"><a name="l15428"></a><span class="lineno">15428</span>&#160;        VMA_ASSERT(pBlockVectorCtx &amp;&amp; pBlockVectorCtx-&gt;GetBlockVector());</div>
+<div class="line"><a name="l15429"></a><span class="lineno">15429</span>&#160; </div>
+<div class="line"><a name="l15430"></a><span class="lineno">15430</span>&#160;        <span class="keywordflow">if</span>(!pBlockVectorCtx-&gt;hasDefragmentationPlan)</div>
+<div class="line"><a name="l15431"></a><span class="lineno">15431</span>&#160;        {</div>
+<div class="line"><a name="l15432"></a><span class="lineno">15432</span>&#160;            res = VK_NOT_READY;</div>
+<div class="line"><a name="l15433"></a><span class="lineno">15433</span>&#160;            <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l15434"></a><span class="lineno">15434</span>&#160;        }</div>
+<div class="line"><a name="l15435"></a><span class="lineno">15435</span>&#160; </div>
+<div class="line"><a name="l15436"></a><span class="lineno">15436</span>&#160;        pBlockVectorCtx-&gt;GetBlockVector()-&gt;CommitDefragmentations(</div>
+<div class="line"><a name="l15437"></a><span class="lineno">15437</span>&#160;            pBlockVectorCtx, m_pStats);</div>
+<div class="line"><a name="l15438"></a><span class="lineno">15438</span>&#160; </div>
+<div class="line"><a name="l15439"></a><span class="lineno">15439</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;defragmentationMoves.size() != pBlockVectorCtx-&gt;defragmentationMovesCommitted)</div>
+<div class="line"><a name="l15440"></a><span class="lineno">15440</span>&#160;            res = VK_NOT_READY;</div>
+<div class="line"><a name="l15441"></a><span class="lineno">15441</span>&#160;    }</div>
+<div class="line"><a name="l15442"></a><span class="lineno">15442</span>&#160; </div>
+<div class="line"><a name="l15443"></a><span class="lineno">15443</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l15444"></a><span class="lineno">15444</span>&#160;}</div>
+<div class="line"><a name="l15445"></a><span class="lineno">15445</span>&#160; </div>
+<div class="line"><a name="l15447"></a><span class="lineno">15447</span>&#160;<span class="comment">// VmaRecorder</span></div>
+<div class="line"><a name="l15448"></a><span class="lineno">15448</span>&#160; </div>
+<div class="line"><a name="l15449"></a><span class="lineno">15449</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l15450"></a><span class="lineno">15450</span>&#160; </div>
+<div class="line"><a name="l15451"></a><span class="lineno">15451</span>&#160;VmaRecorder::VmaRecorder() :</div>
+<div class="line"><a name="l15452"></a><span class="lineno">15452</span>&#160;    m_UseMutex(true),</div>
+<div class="line"><a name="l15453"></a><span class="lineno">15453</span>&#160;    m_Flags(0),</div>
+<div class="line"><a name="l15454"></a><span class="lineno">15454</span>&#160;    m_File(VMA_NULL),</div>
+<div class="line"><a name="l15455"></a><span class="lineno">15455</span>&#160;    m_RecordingStartTime(std::chrono::high_resolution_clock::now())</div>
+<div class="line"><a name="l15456"></a><span class="lineno">15456</span>&#160;{</div>
+<div class="line"><a name="l15457"></a><span class="lineno">15457</span>&#160;}</div>
+<div class="line"><a name="l15458"></a><span class="lineno">15458</span>&#160; </div>
+<div class="line"><a name="l15459"></a><span class="lineno">15459</span>&#160;VkResult VmaRecorder::Init(<span class="keyword">const</span> <a class="code" href="struct_vma_record_settings.html">VmaRecordSettings</a>&amp; settings, <span class="keywordtype">bool</span> useMutex)</div>
+<div class="line"><a name="l15460"></a><span class="lineno">15460</span>&#160;{</div>
+<div class="line"><a name="l15461"></a><span class="lineno">15461</span>&#160;    m_UseMutex = useMutex;</div>
+<div class="line"><a name="l15462"></a><span class="lineno">15462</span>&#160;    m_Flags = settings.<a class="code" href="struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a">flags</a>;</div>
+<div class="line"><a name="l15463"></a><span class="lineno">15463</span>&#160; </div>
+<div class="line"><a name="l15464"></a><span class="lineno">15464</span>&#160;<span class="preprocessor">#if defined(_WIN32)</span></div>
+<div class="line"><a name="l15465"></a><span class="lineno">15465</span>&#160;    <span class="comment">// Open file for writing.</span></div>
+<div class="line"><a name="l15466"></a><span class="lineno">15466</span>&#160;    errno_t err = fopen_s(&amp;m_File, settings.<a class="code" href="struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d">pFilePath</a>, <span class="stringliteral">&quot;wb&quot;</span>);</div>
+<div class="line"><a name="l15467"></a><span class="lineno">15467</span>&#160; </div>
+<div class="line"><a name="l15468"></a><span class="lineno">15468</span>&#160;    <span class="keywordflow">if</span>(err != 0)</div>
+<div class="line"><a name="l15469"></a><span class="lineno">15469</span>&#160;    {</div>
+<div class="line"><a name="l15470"></a><span class="lineno">15470</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_INITIALIZATION_FAILED;</div>
+<div class="line"><a name="l15471"></a><span class="lineno">15471</span>&#160;    }</div>
+<div class="line"><a name="l15472"></a><span class="lineno">15472</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l15473"></a><span class="lineno">15473</span>&#160;    <span class="comment">// Open file for writing.</span></div>
+<div class="line"><a name="l15474"></a><span class="lineno">15474</span>&#160;    m_File = fopen(settings.<a class="code" href="struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d">pFilePath</a>, <span class="stringliteral">&quot;wb&quot;</span>);</div>
+<div class="line"><a name="l15475"></a><span class="lineno">15475</span>&#160; </div>
+<div class="line"><a name="l15476"></a><span class="lineno">15476</span>&#160;    <span class="keywordflow">if</span>(m_File == 0)</div>
+<div class="line"><a name="l15477"></a><span class="lineno">15477</span>&#160;    {</div>
+<div class="line"><a name="l15478"></a><span class="lineno">15478</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_INITIALIZATION_FAILED;</div>
+<div class="line"><a name="l15479"></a><span class="lineno">15479</span>&#160;    }</div>
+<div class="line"><a name="l15480"></a><span class="lineno">15480</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l15481"></a><span class="lineno">15481</span>&#160; </div>
+<div class="line"><a name="l15482"></a><span class="lineno">15482</span>&#160;    <span class="comment">// Write header.</span></div>
+<div class="line"><a name="l15483"></a><span class="lineno">15483</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%s\n&quot;</span>, <span class="stringliteral">&quot;Vulkan Memory Allocator,Calls recording&quot;</span>);</div>
+<div class="line"><a name="l15484"></a><span class="lineno">15484</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%s\n&quot;</span>, <span class="stringliteral">&quot;1,8&quot;</span>);</div>
+<div class="line"><a name="l15485"></a><span class="lineno">15485</span>&#160; </div>
+<div class="line"><a name="l15486"></a><span class="lineno">15486</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l15487"></a><span class="lineno">15487</span>&#160;}</div>
+<div class="line"><a name="l15488"></a><span class="lineno">15488</span>&#160; </div>
+<div class="line"><a name="l15489"></a><span class="lineno">15489</span>&#160;VmaRecorder::~VmaRecorder()</div>
+<div class="line"><a name="l15490"></a><span class="lineno">15490</span>&#160;{</div>
+<div class="line"><a name="l15491"></a><span class="lineno">15491</span>&#160;    <span class="keywordflow">if</span>(m_File != VMA_NULL)</div>
+<div class="line"><a name="l15492"></a><span class="lineno">15492</span>&#160;    {</div>
+<div class="line"><a name="l15493"></a><span class="lineno">15493</span>&#160;        fclose(m_File);</div>
+<div class="line"><a name="l15494"></a><span class="lineno">15494</span>&#160;    }</div>
+<div class="line"><a name="l15495"></a><span class="lineno">15495</span>&#160;}</div>
+<div class="line"><a name="l15496"></a><span class="lineno">15496</span>&#160; </div>
+<div class="line"><a name="l15497"></a><span class="lineno">15497</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreateAllocator(uint32_t frameIndex)</div>
+<div class="line"><a name="l15498"></a><span class="lineno">15498</span>&#160;{</div>
+<div class="line"><a name="l15499"></a><span class="lineno">15499</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15500"></a><span class="lineno">15500</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15501"></a><span class="lineno">15501</span>&#160; </div>
+<div class="line"><a name="l15502"></a><span class="lineno">15502</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15503"></a><span class="lineno">15503</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaCreateAllocator\n&quot;</span>, callParams.threadId, callParams.time, frameIndex);</div>
+<div class="line"><a name="l15504"></a><span class="lineno">15504</span>&#160;    Flush();</div>
+<div class="line"><a name="l15505"></a><span class="lineno">15505</span>&#160;}</div>
+<div class="line"><a name="l15506"></a><span class="lineno">15506</span>&#160; </div>
+<div class="line"><a name="l15507"></a><span class="lineno">15507</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDestroyAllocator(uint32_t frameIndex)</div>
+<div class="line"><a name="l15508"></a><span class="lineno">15508</span>&#160;{</div>
+<div class="line"><a name="l15509"></a><span class="lineno">15509</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15510"></a><span class="lineno">15510</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15511"></a><span class="lineno">15511</span>&#160; </div>
+<div class="line"><a name="l15512"></a><span class="lineno">15512</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15513"></a><span class="lineno">15513</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaDestroyAllocator\n&quot;</span>, callParams.threadId, callParams.time, frameIndex);</div>
+<div class="line"><a name="l15514"></a><span class="lineno">15514</span>&#160;    Flush();</div>
+<div class="line"><a name="l15515"></a><span class="lineno">15515</span>&#160;}</div>
+<div class="line"><a name="l15516"></a><span class="lineno">15516</span>&#160; </div>
+<div class="line"><a name="l15517"></a><span class="lineno">15517</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreatePool(uint32_t frameIndex, <span class="keyword">const</span> <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a>&amp; createInfo, <a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</div>
+<div class="line"><a name="l15518"></a><span class="lineno">15518</span>&#160;{</div>
+<div class="line"><a name="l15519"></a><span class="lineno">15519</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15520"></a><span class="lineno">15520</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15521"></a><span class="lineno">15521</span>&#160; </div>
+<div class="line"><a name="l15522"></a><span class="lineno">15522</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15523"></a><span class="lineno">15523</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaCreatePool,%u,%u,%llu,%llu,%llu,%u,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15524"></a><span class="lineno">15524</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a>,</div>
+<div class="line"><a name="l15525"></a><span class="lineno">15525</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">flags</a>,</div>
+<div class="line"><a name="l15526"></a><span class="lineno">15526</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676">blockSize</a>,</div>
+<div class="line"><a name="l15527"></a><span class="lineno">15527</span>&#160;        (uint64_t)createInfo.<a class="code" href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae">minBlockCount</a>,</div>
+<div class="line"><a name="l15528"></a><span class="lineno">15528</span>&#160;        (uint64_t)createInfo.<a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a>,</div>
+<div class="line"><a name="l15529"></a><span class="lineno">15529</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa">frameInUseCount</a>,</div>
+<div class="line"><a name="l15530"></a><span class="lineno">15530</span>&#160;        pool);</div>
+<div class="line"><a name="l15531"></a><span class="lineno">15531</span>&#160;    Flush();</div>
+<div class="line"><a name="l15532"></a><span class="lineno">15532</span>&#160;}</div>
+<div class="line"><a name="l15533"></a><span class="lineno">15533</span>&#160; </div>
+<div class="line"><a name="l15534"></a><span class="lineno">15534</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDestroyPool(uint32_t frameIndex, <a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</div>
+<div class="line"><a name="l15535"></a><span class="lineno">15535</span>&#160;{</div>
+<div class="line"><a name="l15536"></a><span class="lineno">15536</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15537"></a><span class="lineno">15537</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15538"></a><span class="lineno">15538</span>&#160; </div>
+<div class="line"><a name="l15539"></a><span class="lineno">15539</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15540"></a><span class="lineno">15540</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaDestroyPool,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15541"></a><span class="lineno">15541</span>&#160;        pool);</div>
+<div class="line"><a name="l15542"></a><span class="lineno">15542</span>&#160;    Flush();</div>
+<div class="line"><a name="l15543"></a><span class="lineno">15543</span>&#160;}</div>
+<div class="line"><a name="l15544"></a><span class="lineno">15544</span>&#160; </div>
+<div class="line"><a name="l15545"></a><span class="lineno">15545</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordAllocateMemory(uint32_t frameIndex,</div>
+<div class="line"><a name="l15546"></a><span class="lineno">15546</span>&#160;        <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
+<div class="line"><a name="l15547"></a><span class="lineno">15547</span>&#160;        <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
+<div class="line"><a name="l15548"></a><span class="lineno">15548</span>&#160;        <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l15549"></a><span class="lineno">15549</span>&#160;{</div>
+<div class="line"><a name="l15550"></a><span class="lineno">15550</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15551"></a><span class="lineno">15551</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15552"></a><span class="lineno">15552</span>&#160; </div>
+<div class="line"><a name="l15553"></a><span class="lineno">15553</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15554"></a><span class="lineno">15554</span>&#160;    UserDataString userDataStr(createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>, createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>);</div>
+<div class="line"><a name="l15555"></a><span class="lineno">15555</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaAllocateMemory,%llu,%llu,%u,%u,%u,%u,%u,%u,%p,%p,%s\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15556"></a><span class="lineno">15556</span>&#160;        vkMemReq.size,</div>
+<div class="line"><a name="l15557"></a><span class="lineno">15557</span>&#160;        vkMemReq.alignment,</div>
+<div class="line"><a name="l15558"></a><span class="lineno">15558</span>&#160;        vkMemReq.memoryTypeBits,</div>
+<div class="line"><a name="l15559"></a><span class="lineno">15559</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
+<div class="line"><a name="l15560"></a><span class="lineno">15560</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
+<div class="line"><a name="l15561"></a><span class="lineno">15561</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
+<div class="line"><a name="l15562"></a><span class="lineno">15562</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
+<div class="line"><a name="l15563"></a><span class="lineno">15563</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
+<div class="line"><a name="l15564"></a><span class="lineno">15564</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
+<div class="line"><a name="l15565"></a><span class="lineno">15565</span>&#160;        allocation,</div>
+<div class="line"><a name="l15566"></a><span class="lineno">15566</span>&#160;        userDataStr.GetString());</div>
+<div class="line"><a name="l15567"></a><span class="lineno">15567</span>&#160;    Flush();</div>
+<div class="line"><a name="l15568"></a><span class="lineno">15568</span>&#160;}</div>
+<div class="line"><a name="l15569"></a><span class="lineno">15569</span>&#160; </div>
+<div class="line"><a name="l15570"></a><span class="lineno">15570</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordAllocateMemoryPages(uint32_t frameIndex,</div>
+<div class="line"><a name="l15571"></a><span class="lineno">15571</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
+<div class="line"><a name="l15572"></a><span class="lineno">15572</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
+<div class="line"><a name="l15573"></a><span class="lineno">15573</span>&#160;    uint64_t allocationCount,</div>
+<div class="line"><a name="l15574"></a><span class="lineno">15574</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
+<div class="line"><a name="l15575"></a><span class="lineno">15575</span>&#160;{</div>
+<div class="line"><a name="l15576"></a><span class="lineno">15576</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15577"></a><span class="lineno">15577</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15578"></a><span class="lineno">15578</span>&#160; </div>
+<div class="line"><a name="l15579"></a><span class="lineno">15579</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15580"></a><span class="lineno">15580</span>&#160;    UserDataString userDataStr(createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>, createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>);</div>
+<div class="line"><a name="l15581"></a><span class="lineno">15581</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaAllocateMemoryPages,%llu,%llu,%u,%u,%u,%u,%u,%u,%p,&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15582"></a><span class="lineno">15582</span>&#160;        vkMemReq.size,</div>
+<div class="line"><a name="l15583"></a><span class="lineno">15583</span>&#160;        vkMemReq.alignment,</div>
+<div class="line"><a name="l15584"></a><span class="lineno">15584</span>&#160;        vkMemReq.memoryTypeBits,</div>
+<div class="line"><a name="l15585"></a><span class="lineno">15585</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
+<div class="line"><a name="l15586"></a><span class="lineno">15586</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
+<div class="line"><a name="l15587"></a><span class="lineno">15587</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
+<div class="line"><a name="l15588"></a><span class="lineno">15588</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
+<div class="line"><a name="l15589"></a><span class="lineno">15589</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
+<div class="line"><a name="l15590"></a><span class="lineno">15590</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>);</div>
+<div class="line"><a name="l15591"></a><span class="lineno">15591</span>&#160;    PrintPointerList(allocationCount, pAllocations);</div>
+<div class="line"><a name="l15592"></a><span class="lineno">15592</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;,%s\n&quot;</span>, userDataStr.GetString());</div>
+<div class="line"><a name="l15593"></a><span class="lineno">15593</span>&#160;    Flush();</div>
+<div class="line"><a name="l15594"></a><span class="lineno">15594</span>&#160;}</div>
+<div class="line"><a name="l15595"></a><span class="lineno">15595</span>&#160; </div>
+<div class="line"><a name="l15596"></a><span class="lineno">15596</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordAllocateMemoryForBuffer(uint32_t frameIndex,</div>
+<div class="line"><a name="l15597"></a><span class="lineno">15597</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
+<div class="line"><a name="l15598"></a><span class="lineno">15598</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation,</div>
+<div class="line"><a name="l15599"></a><span class="lineno">15599</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation,</div>
+<div class="line"><a name="l15600"></a><span class="lineno">15600</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
+<div class="line"><a name="l15601"></a><span class="lineno">15601</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l15602"></a><span class="lineno">15602</span>&#160;{</div>
+<div class="line"><a name="l15603"></a><span class="lineno">15603</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15604"></a><span class="lineno">15604</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15605"></a><span class="lineno">15605</span>&#160; </div>
+<div class="line"><a name="l15606"></a><span class="lineno">15606</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15607"></a><span class="lineno">15607</span>&#160;    UserDataString userDataStr(createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>, createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>);</div>
+<div class="line"><a name="l15608"></a><span class="lineno">15608</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaAllocateMemoryForBuffer,%llu,%llu,%u,%u,%u,%u,%u,%u,%u,%u,%p,%p,%s\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15609"></a><span class="lineno">15609</span>&#160;        vkMemReq.size,</div>
+<div class="line"><a name="l15610"></a><span class="lineno">15610</span>&#160;        vkMemReq.alignment,</div>
+<div class="line"><a name="l15611"></a><span class="lineno">15611</span>&#160;        vkMemReq.memoryTypeBits,</div>
+<div class="line"><a name="l15612"></a><span class="lineno">15612</span>&#160;        requiresDedicatedAllocation ? 1 : 0,</div>
+<div class="line"><a name="l15613"></a><span class="lineno">15613</span>&#160;        prefersDedicatedAllocation ? 1 : 0,</div>
+<div class="line"><a name="l15614"></a><span class="lineno">15614</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
+<div class="line"><a name="l15615"></a><span class="lineno">15615</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
+<div class="line"><a name="l15616"></a><span class="lineno">15616</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
+<div class="line"><a name="l15617"></a><span class="lineno">15617</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
+<div class="line"><a name="l15618"></a><span class="lineno">15618</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
+<div class="line"><a name="l15619"></a><span class="lineno">15619</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
+<div class="line"><a name="l15620"></a><span class="lineno">15620</span>&#160;        allocation,</div>
+<div class="line"><a name="l15621"></a><span class="lineno">15621</span>&#160;        userDataStr.GetString());</div>
+<div class="line"><a name="l15622"></a><span class="lineno">15622</span>&#160;    Flush();</div>
+<div class="line"><a name="l15623"></a><span class="lineno">15623</span>&#160;}</div>
+<div class="line"><a name="l15624"></a><span class="lineno">15624</span>&#160; </div>
+<div class="line"><a name="l15625"></a><span class="lineno">15625</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordAllocateMemoryForImage(uint32_t frameIndex,</div>
+<div class="line"><a name="l15626"></a><span class="lineno">15626</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
+<div class="line"><a name="l15627"></a><span class="lineno">15627</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation,</div>
+<div class="line"><a name="l15628"></a><span class="lineno">15628</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation,</div>
+<div class="line"><a name="l15629"></a><span class="lineno">15629</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
+<div class="line"><a name="l15630"></a><span class="lineno">15630</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l15631"></a><span class="lineno">15631</span>&#160;{</div>
+<div class="line"><a name="l15632"></a><span class="lineno">15632</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15633"></a><span class="lineno">15633</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15634"></a><span class="lineno">15634</span>&#160; </div>
+<div class="line"><a name="l15635"></a><span class="lineno">15635</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15636"></a><span class="lineno">15636</span>&#160;    UserDataString userDataStr(createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>, createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>);</div>
+<div class="line"><a name="l15637"></a><span class="lineno">15637</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaAllocateMemoryForImage,%llu,%llu,%u,%u,%u,%u,%u,%u,%u,%u,%p,%p,%s\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15638"></a><span class="lineno">15638</span>&#160;        vkMemReq.size,</div>
+<div class="line"><a name="l15639"></a><span class="lineno">15639</span>&#160;        vkMemReq.alignment,</div>
+<div class="line"><a name="l15640"></a><span class="lineno">15640</span>&#160;        vkMemReq.memoryTypeBits,</div>
+<div class="line"><a name="l15641"></a><span class="lineno">15641</span>&#160;        requiresDedicatedAllocation ? 1 : 0,</div>
+<div class="line"><a name="l15642"></a><span class="lineno">15642</span>&#160;        prefersDedicatedAllocation ? 1 : 0,</div>
+<div class="line"><a name="l15643"></a><span class="lineno">15643</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
+<div class="line"><a name="l15644"></a><span class="lineno">15644</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
+<div class="line"><a name="l15645"></a><span class="lineno">15645</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
+<div class="line"><a name="l15646"></a><span class="lineno">15646</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
+<div class="line"><a name="l15647"></a><span class="lineno">15647</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
+<div class="line"><a name="l15648"></a><span class="lineno">15648</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
+<div class="line"><a name="l15649"></a><span class="lineno">15649</span>&#160;        allocation,</div>
+<div class="line"><a name="l15650"></a><span class="lineno">15650</span>&#160;        userDataStr.GetString());</div>
+<div class="line"><a name="l15651"></a><span class="lineno">15651</span>&#160;    Flush();</div>
+<div class="line"><a name="l15652"></a><span class="lineno">15652</span>&#160;}</div>
+<div class="line"><a name="l15653"></a><span class="lineno">15653</span>&#160; </div>
+<div class="line"><a name="l15654"></a><span class="lineno">15654</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordFreeMemory(uint32_t frameIndex,</div>
+<div class="line"><a name="l15655"></a><span class="lineno">15655</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l15656"></a><span class="lineno">15656</span>&#160;{</div>
+<div class="line"><a name="l15657"></a><span class="lineno">15657</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15658"></a><span class="lineno">15658</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15659"></a><span class="lineno">15659</span>&#160; </div>
+<div class="line"><a name="l15660"></a><span class="lineno">15660</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15661"></a><span class="lineno">15661</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaFreeMemory,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15662"></a><span class="lineno">15662</span>&#160;        allocation);</div>
+<div class="line"><a name="l15663"></a><span class="lineno">15663</span>&#160;    Flush();</div>
+<div class="line"><a name="l15664"></a><span class="lineno">15664</span>&#160;}</div>
+<div class="line"><a name="l15665"></a><span class="lineno">15665</span>&#160; </div>
+<div class="line"><a name="l15666"></a><span class="lineno">15666</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordFreeMemoryPages(uint32_t frameIndex,</div>
+<div class="line"><a name="l15667"></a><span class="lineno">15667</span>&#160;    uint64_t allocationCount,</div>
+<div class="line"><a name="l15668"></a><span class="lineno">15668</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
+<div class="line"><a name="l15669"></a><span class="lineno">15669</span>&#160;{</div>
+<div class="line"><a name="l15670"></a><span class="lineno">15670</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15671"></a><span class="lineno">15671</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15672"></a><span class="lineno">15672</span>&#160; </div>
+<div class="line"><a name="l15673"></a><span class="lineno">15673</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15674"></a><span class="lineno">15674</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaFreeMemoryPages,&quot;</span>, callParams.threadId, callParams.time, frameIndex);</div>
+<div class="line"><a name="l15675"></a><span class="lineno">15675</span>&#160;    PrintPointerList(allocationCount, pAllocations);</div>
+<div class="line"><a name="l15676"></a><span class="lineno">15676</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;\n&quot;</span>);</div>
+<div class="line"><a name="l15677"></a><span class="lineno">15677</span>&#160;    Flush();</div>
+<div class="line"><a name="l15678"></a><span class="lineno">15678</span>&#160;}</div>
+<div class="line"><a name="l15679"></a><span class="lineno">15679</span>&#160; </div>
+<div class="line"><a name="l15680"></a><span class="lineno">15680</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordSetAllocationUserData(uint32_t frameIndex,</div>
+<div class="line"><a name="l15681"></a><span class="lineno">15681</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l15682"></a><span class="lineno">15682</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pUserData)</div>
+<div class="line"><a name="l15683"></a><span class="lineno">15683</span>&#160;{</div>
+<div class="line"><a name="l15684"></a><span class="lineno">15684</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15685"></a><span class="lineno">15685</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15686"></a><span class="lineno">15686</span>&#160; </div>
+<div class="line"><a name="l15687"></a><span class="lineno">15687</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15688"></a><span class="lineno">15688</span>&#160;    UserDataString userDataStr(</div>
+<div class="line"><a name="l15689"></a><span class="lineno">15689</span>&#160;        allocation-&gt;IsUserDataString() ? <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a> : 0,</div>
+<div class="line"><a name="l15690"></a><span class="lineno">15690</span>&#160;        pUserData);</div>
+<div class="line"><a name="l15691"></a><span class="lineno">15691</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaSetAllocationUserData,%p,%s\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15692"></a><span class="lineno">15692</span>&#160;        allocation,</div>
+<div class="line"><a name="l15693"></a><span class="lineno">15693</span>&#160;        userDataStr.GetString());</div>
+<div class="line"><a name="l15694"></a><span class="lineno">15694</span>&#160;    Flush();</div>
+<div class="line"><a name="l15695"></a><span class="lineno">15695</span>&#160;}</div>
+<div class="line"><a name="l15696"></a><span class="lineno">15696</span>&#160; </div>
+<div class="line"><a name="l15697"></a><span class="lineno">15697</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreateLostAllocation(uint32_t frameIndex,</div>
+<div class="line"><a name="l15698"></a><span class="lineno">15698</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l15699"></a><span class="lineno">15699</span>&#160;{</div>
+<div class="line"><a name="l15700"></a><span class="lineno">15700</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15701"></a><span class="lineno">15701</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15702"></a><span class="lineno">15702</span>&#160; </div>
+<div class="line"><a name="l15703"></a><span class="lineno">15703</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15704"></a><span class="lineno">15704</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaCreateLostAllocation,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15705"></a><span class="lineno">15705</span>&#160;        allocation);</div>
+<div class="line"><a name="l15706"></a><span class="lineno">15706</span>&#160;    Flush();</div>
+<div class="line"><a name="l15707"></a><span class="lineno">15707</span>&#160;}</div>
+<div class="line"><a name="l15708"></a><span class="lineno">15708</span>&#160; </div>
+<div class="line"><a name="l15709"></a><span class="lineno">15709</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordMapMemory(uint32_t frameIndex,</div>
+<div class="line"><a name="l15710"></a><span class="lineno">15710</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l15711"></a><span class="lineno">15711</span>&#160;{</div>
+<div class="line"><a name="l15712"></a><span class="lineno">15712</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15713"></a><span class="lineno">15713</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15714"></a><span class="lineno">15714</span>&#160; </div>
+<div class="line"><a name="l15715"></a><span class="lineno">15715</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15716"></a><span class="lineno">15716</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaMapMemory,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15717"></a><span class="lineno">15717</span>&#160;        allocation);</div>
+<div class="line"><a name="l15718"></a><span class="lineno">15718</span>&#160;    Flush();</div>
+<div class="line"><a name="l15719"></a><span class="lineno">15719</span>&#160;}</div>
+<div class="line"><a name="l15720"></a><span class="lineno">15720</span>&#160; </div>
+<div class="line"><a name="l15721"></a><span class="lineno">15721</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordUnmapMemory(uint32_t frameIndex,</div>
+<div class="line"><a name="l15722"></a><span class="lineno">15722</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l15723"></a><span class="lineno">15723</span>&#160;{</div>
+<div class="line"><a name="l15724"></a><span class="lineno">15724</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15725"></a><span class="lineno">15725</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15726"></a><span class="lineno">15726</span>&#160; </div>
+<div class="line"><a name="l15727"></a><span class="lineno">15727</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15728"></a><span class="lineno">15728</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaUnmapMemory,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15729"></a><span class="lineno">15729</span>&#160;        allocation);</div>
+<div class="line"><a name="l15730"></a><span class="lineno">15730</span>&#160;    Flush();</div>
+<div class="line"><a name="l15731"></a><span class="lineno">15731</span>&#160;}</div>
+<div class="line"><a name="l15732"></a><span class="lineno">15732</span>&#160; </div>
+<div class="line"><a name="l15733"></a><span class="lineno">15733</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordFlushAllocation(uint32_t frameIndex,</div>
+<div class="line"><a name="l15734"></a><span class="lineno">15734</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</div>
+<div class="line"><a name="l15735"></a><span class="lineno">15735</span>&#160;{</div>
+<div class="line"><a name="l15736"></a><span class="lineno">15736</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15737"></a><span class="lineno">15737</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15738"></a><span class="lineno">15738</span>&#160; </div>
+<div class="line"><a name="l15739"></a><span class="lineno">15739</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15740"></a><span class="lineno">15740</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaFlushAllocation,%p,%llu,%llu\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15741"></a><span class="lineno">15741</span>&#160;        allocation,</div>
+<div class="line"><a name="l15742"></a><span class="lineno">15742</span>&#160;        offset,</div>
+<div class="line"><a name="l15743"></a><span class="lineno">15743</span>&#160;        size);</div>
+<div class="line"><a name="l15744"></a><span class="lineno">15744</span>&#160;    Flush();</div>
+<div class="line"><a name="l15745"></a><span class="lineno">15745</span>&#160;}</div>
+<div class="line"><a name="l15746"></a><span class="lineno">15746</span>&#160; </div>
+<div class="line"><a name="l15747"></a><span class="lineno">15747</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordInvalidateAllocation(uint32_t frameIndex,</div>
+<div class="line"><a name="l15748"></a><span class="lineno">15748</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</div>
+<div class="line"><a name="l15749"></a><span class="lineno">15749</span>&#160;{</div>
+<div class="line"><a name="l15750"></a><span class="lineno">15750</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15751"></a><span class="lineno">15751</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15752"></a><span class="lineno">15752</span>&#160; </div>
+<div class="line"><a name="l15753"></a><span class="lineno">15753</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15754"></a><span class="lineno">15754</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaInvalidateAllocation,%p,%llu,%llu\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15755"></a><span class="lineno">15755</span>&#160;        allocation,</div>
+<div class="line"><a name="l15756"></a><span class="lineno">15756</span>&#160;        offset,</div>
+<div class="line"><a name="l15757"></a><span class="lineno">15757</span>&#160;        size);</div>
+<div class="line"><a name="l15758"></a><span class="lineno">15758</span>&#160;    Flush();</div>
+<div class="line"><a name="l15759"></a><span class="lineno">15759</span>&#160;}</div>
+<div class="line"><a name="l15760"></a><span class="lineno">15760</span>&#160; </div>
+<div class="line"><a name="l15761"></a><span class="lineno">15761</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreateBuffer(uint32_t frameIndex,</div>
+<div class="line"><a name="l15762"></a><span class="lineno">15762</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo&amp; bufCreateInfo,</div>
+<div class="line"><a name="l15763"></a><span class="lineno">15763</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; allocCreateInfo,</div>
+<div class="line"><a name="l15764"></a><span class="lineno">15764</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l15765"></a><span class="lineno">15765</span>&#160;{</div>
+<div class="line"><a name="l15766"></a><span class="lineno">15766</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15767"></a><span class="lineno">15767</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15768"></a><span class="lineno">15768</span>&#160; </div>
+<div class="line"><a name="l15769"></a><span class="lineno">15769</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15770"></a><span class="lineno">15770</span>&#160;    UserDataString userDataStr(allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>, allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>);</div>
+<div class="line"><a name="l15771"></a><span class="lineno">15771</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaCreateBuffer,%u,%llu,%u,%u,%u,%u,%u,%u,%u,%p,%p,%s\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15772"></a><span class="lineno">15772</span>&#160;        bufCreateInfo.flags,</div>
+<div class="line"><a name="l15773"></a><span class="lineno">15773</span>&#160;        bufCreateInfo.size,</div>
+<div class="line"><a name="l15774"></a><span class="lineno">15774</span>&#160;        bufCreateInfo.usage,</div>
+<div class="line"><a name="l15775"></a><span class="lineno">15775</span>&#160;        bufCreateInfo.sharingMode,</div>
+<div class="line"><a name="l15776"></a><span class="lineno">15776</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
+<div class="line"><a name="l15777"></a><span class="lineno">15777</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
+<div class="line"><a name="l15778"></a><span class="lineno">15778</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
+<div class="line"><a name="l15779"></a><span class="lineno">15779</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
+<div class="line"><a name="l15780"></a><span class="lineno">15780</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
+<div class="line"><a name="l15781"></a><span class="lineno">15781</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
+<div class="line"><a name="l15782"></a><span class="lineno">15782</span>&#160;        allocation,</div>
+<div class="line"><a name="l15783"></a><span class="lineno">15783</span>&#160;        userDataStr.GetString());</div>
+<div class="line"><a name="l15784"></a><span class="lineno">15784</span>&#160;    Flush();</div>
+<div class="line"><a name="l15785"></a><span class="lineno">15785</span>&#160;}</div>
+<div class="line"><a name="l15786"></a><span class="lineno">15786</span>&#160; </div>
+<div class="line"><a name="l15787"></a><span class="lineno">15787</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreateImage(uint32_t frameIndex,</div>
+<div class="line"><a name="l15788"></a><span class="lineno">15788</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo&amp; imageCreateInfo,</div>
+<div class="line"><a name="l15789"></a><span class="lineno">15789</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; allocCreateInfo,</div>
+<div class="line"><a name="l15790"></a><span class="lineno">15790</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l15791"></a><span class="lineno">15791</span>&#160;{</div>
+<div class="line"><a name="l15792"></a><span class="lineno">15792</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15793"></a><span class="lineno">15793</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15794"></a><span class="lineno">15794</span>&#160; </div>
+<div class="line"><a name="l15795"></a><span class="lineno">15795</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15796"></a><span class="lineno">15796</span>&#160;    UserDataString userDataStr(allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>, allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>);</div>
+<div class="line"><a name="l15797"></a><span class="lineno">15797</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaCreateImage,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%p,%p,%s\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15798"></a><span class="lineno">15798</span>&#160;        imageCreateInfo.flags,</div>
+<div class="line"><a name="l15799"></a><span class="lineno">15799</span>&#160;        imageCreateInfo.imageType,</div>
+<div class="line"><a name="l15800"></a><span class="lineno">15800</span>&#160;        imageCreateInfo.format,</div>
+<div class="line"><a name="l15801"></a><span class="lineno">15801</span>&#160;        imageCreateInfo.extent.width,</div>
+<div class="line"><a name="l15802"></a><span class="lineno">15802</span>&#160;        imageCreateInfo.extent.height,</div>
+<div class="line"><a name="l15803"></a><span class="lineno">15803</span>&#160;        imageCreateInfo.extent.depth,</div>
+<div class="line"><a name="l15804"></a><span class="lineno">15804</span>&#160;        imageCreateInfo.mipLevels,</div>
+<div class="line"><a name="l15805"></a><span class="lineno">15805</span>&#160;        imageCreateInfo.arrayLayers,</div>
+<div class="line"><a name="l15806"></a><span class="lineno">15806</span>&#160;        imageCreateInfo.samples,</div>
+<div class="line"><a name="l15807"></a><span class="lineno">15807</span>&#160;        imageCreateInfo.tiling,</div>
+<div class="line"><a name="l15808"></a><span class="lineno">15808</span>&#160;        imageCreateInfo.usage,</div>
+<div class="line"><a name="l15809"></a><span class="lineno">15809</span>&#160;        imageCreateInfo.sharingMode,</div>
+<div class="line"><a name="l15810"></a><span class="lineno">15810</span>&#160;        imageCreateInfo.initialLayout,</div>
+<div class="line"><a name="l15811"></a><span class="lineno">15811</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
+<div class="line"><a name="l15812"></a><span class="lineno">15812</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
+<div class="line"><a name="l15813"></a><span class="lineno">15813</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
+<div class="line"><a name="l15814"></a><span class="lineno">15814</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
+<div class="line"><a name="l15815"></a><span class="lineno">15815</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
+<div class="line"><a name="l15816"></a><span class="lineno">15816</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
+<div class="line"><a name="l15817"></a><span class="lineno">15817</span>&#160;        allocation,</div>
+<div class="line"><a name="l15818"></a><span class="lineno">15818</span>&#160;        userDataStr.GetString());</div>
+<div class="line"><a name="l15819"></a><span class="lineno">15819</span>&#160;    Flush();</div>
+<div class="line"><a name="l15820"></a><span class="lineno">15820</span>&#160;}</div>
+<div class="line"><a name="l15821"></a><span class="lineno">15821</span>&#160; </div>
+<div class="line"><a name="l15822"></a><span class="lineno">15822</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDestroyBuffer(uint32_t frameIndex,</div>
+<div class="line"><a name="l15823"></a><span class="lineno">15823</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l15824"></a><span class="lineno">15824</span>&#160;{</div>
+<div class="line"><a name="l15825"></a><span class="lineno">15825</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15826"></a><span class="lineno">15826</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15827"></a><span class="lineno">15827</span>&#160; </div>
+<div class="line"><a name="l15828"></a><span class="lineno">15828</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15829"></a><span class="lineno">15829</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaDestroyBuffer,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15830"></a><span class="lineno">15830</span>&#160;        allocation);</div>
+<div class="line"><a name="l15831"></a><span class="lineno">15831</span>&#160;    Flush();</div>
+<div class="line"><a name="l15832"></a><span class="lineno">15832</span>&#160;}</div>
+<div class="line"><a name="l15833"></a><span class="lineno">15833</span>&#160; </div>
+<div class="line"><a name="l15834"></a><span class="lineno">15834</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDestroyImage(uint32_t frameIndex,</div>
+<div class="line"><a name="l15835"></a><span class="lineno">15835</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l15836"></a><span class="lineno">15836</span>&#160;{</div>
+<div class="line"><a name="l15837"></a><span class="lineno">15837</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15838"></a><span class="lineno">15838</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15839"></a><span class="lineno">15839</span>&#160; </div>
+<div class="line"><a name="l15840"></a><span class="lineno">15840</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15841"></a><span class="lineno">15841</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaDestroyImage,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15842"></a><span class="lineno">15842</span>&#160;        allocation);</div>
+<div class="line"><a name="l15843"></a><span class="lineno">15843</span>&#160;    Flush();</div>
+<div class="line"><a name="l15844"></a><span class="lineno">15844</span>&#160;}</div>
+<div class="line"><a name="l15845"></a><span class="lineno">15845</span>&#160; </div>
+<div class="line"><a name="l15846"></a><span class="lineno">15846</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordTouchAllocation(uint32_t frameIndex,</div>
+<div class="line"><a name="l15847"></a><span class="lineno">15847</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l15848"></a><span class="lineno">15848</span>&#160;{</div>
+<div class="line"><a name="l15849"></a><span class="lineno">15849</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15850"></a><span class="lineno">15850</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15851"></a><span class="lineno">15851</span>&#160; </div>
+<div class="line"><a name="l15852"></a><span class="lineno">15852</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15853"></a><span class="lineno">15853</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaTouchAllocation,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15854"></a><span class="lineno">15854</span>&#160;        allocation);</div>
+<div class="line"><a name="l15855"></a><span class="lineno">15855</span>&#160;    Flush();</div>
+<div class="line"><a name="l15856"></a><span class="lineno">15856</span>&#160;}</div>
+<div class="line"><a name="l15857"></a><span class="lineno">15857</span>&#160; </div>
+<div class="line"><a name="l15858"></a><span class="lineno">15858</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordGetAllocationInfo(uint32_t frameIndex,</div>
+<div class="line"><a name="l15859"></a><span class="lineno">15859</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l15860"></a><span class="lineno">15860</span>&#160;{</div>
+<div class="line"><a name="l15861"></a><span class="lineno">15861</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15862"></a><span class="lineno">15862</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15863"></a><span class="lineno">15863</span>&#160; </div>
+<div class="line"><a name="l15864"></a><span class="lineno">15864</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15865"></a><span class="lineno">15865</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaGetAllocationInfo,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15866"></a><span class="lineno">15866</span>&#160;        allocation);</div>
+<div class="line"><a name="l15867"></a><span class="lineno">15867</span>&#160;    Flush();</div>
+<div class="line"><a name="l15868"></a><span class="lineno">15868</span>&#160;}</div>
+<div class="line"><a name="l15869"></a><span class="lineno">15869</span>&#160; </div>
+<div class="line"><a name="l15870"></a><span class="lineno">15870</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordMakePoolAllocationsLost(uint32_t frameIndex,</div>
+<div class="line"><a name="l15871"></a><span class="lineno">15871</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</div>
+<div class="line"><a name="l15872"></a><span class="lineno">15872</span>&#160;{</div>
+<div class="line"><a name="l15873"></a><span class="lineno">15873</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15874"></a><span class="lineno">15874</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15875"></a><span class="lineno">15875</span>&#160; </div>
+<div class="line"><a name="l15876"></a><span class="lineno">15876</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15877"></a><span class="lineno">15877</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaMakePoolAllocationsLost,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15878"></a><span class="lineno">15878</span>&#160;        pool);</div>
+<div class="line"><a name="l15879"></a><span class="lineno">15879</span>&#160;    Flush();</div>
+<div class="line"><a name="l15880"></a><span class="lineno">15880</span>&#160;}</div>
+<div class="line"><a name="l15881"></a><span class="lineno">15881</span>&#160; </div>
+<div class="line"><a name="l15882"></a><span class="lineno">15882</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDefragmentationBegin(uint32_t frameIndex,</div>
+<div class="line"><a name="l15883"></a><span class="lineno">15883</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a>&amp; info,</div>
+<div class="line"><a name="l15884"></a><span class="lineno">15884</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> ctx)</div>
+<div class="line"><a name="l15885"></a><span class="lineno">15885</span>&#160;{</div>
+<div class="line"><a name="l15886"></a><span class="lineno">15886</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15887"></a><span class="lineno">15887</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15888"></a><span class="lineno">15888</span>&#160; </div>
+<div class="line"><a name="l15889"></a><span class="lineno">15889</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15890"></a><span class="lineno">15890</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaDefragmentationBegin,%u,&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15891"></a><span class="lineno">15891</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">flags</a>);</div>
+<div class="line"><a name="l15892"></a><span class="lineno">15892</span>&#160;    PrintPointerList(info.<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">pAllocations</a>);</div>
+<div class="line"><a name="l15893"></a><span class="lineno">15893</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;,&quot;</span>);</div>
+<div class="line"><a name="l15894"></a><span class="lineno">15894</span>&#160;    PrintPointerList(info.<a class="code" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">poolCount</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b">pPools</a>);</div>
+<div class="line"><a name="l15895"></a><span class="lineno">15895</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;,%llu,%u,%llu,%u,%p,%p\n&quot;</span>,</div>
+<div class="line"><a name="l15896"></a><span class="lineno">15896</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">maxCpuBytesToMove</a>,</div>
+<div class="line"><a name="l15897"></a><span class="lineno">15897</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a>,</div>
+<div class="line"><a name="l15898"></a><span class="lineno">15898</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08">maxGpuBytesToMove</a>,</div>
+<div class="line"><a name="l15899"></a><span class="lineno">15899</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6">maxGpuAllocationsToMove</a>,</div>
+<div class="line"><a name="l15900"></a><span class="lineno">15900</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">commandBuffer</a>,</div>
+<div class="line"><a name="l15901"></a><span class="lineno">15901</span>&#160;        ctx);</div>
+<div class="line"><a name="l15902"></a><span class="lineno">15902</span>&#160;    Flush();</div>
+<div class="line"><a name="l15903"></a><span class="lineno">15903</span>&#160;}</div>
+<div class="line"><a name="l15904"></a><span class="lineno">15904</span>&#160; </div>
+<div class="line"><a name="l15905"></a><span class="lineno">15905</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDefragmentationEnd(uint32_t frameIndex,</div>
+<div class="line"><a name="l15906"></a><span class="lineno">15906</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> ctx)</div>
+<div class="line"><a name="l15907"></a><span class="lineno">15907</span>&#160;{</div>
+<div class="line"><a name="l15908"></a><span class="lineno">15908</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15909"></a><span class="lineno">15909</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15910"></a><span class="lineno">15910</span>&#160; </div>
+<div class="line"><a name="l15911"></a><span class="lineno">15911</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15912"></a><span class="lineno">15912</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaDefragmentationEnd,%p\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15913"></a><span class="lineno">15913</span>&#160;        ctx);</div>
+<div class="line"><a name="l15914"></a><span class="lineno">15914</span>&#160;    Flush();</div>
+<div class="line"><a name="l15915"></a><span class="lineno">15915</span>&#160;}</div>
+<div class="line"><a name="l15916"></a><span class="lineno">15916</span>&#160; </div>
+<div class="line"><a name="l15917"></a><span class="lineno">15917</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordSetPoolName(uint32_t frameIndex,</div>
+<div class="line"><a name="l15918"></a><span class="lineno">15918</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
+<div class="line"><a name="l15919"></a><span class="lineno">15919</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* name)</div>
+<div class="line"><a name="l15920"></a><span class="lineno">15920</span>&#160;{</div>
+<div class="line"><a name="l15921"></a><span class="lineno">15921</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l15922"></a><span class="lineno">15922</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l15923"></a><span class="lineno">15923</span>&#160; </div>
+<div class="line"><a name="l15924"></a><span class="lineno">15924</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l15925"></a><span class="lineno">15925</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;%u,%.3f,%u,vmaSetPoolName,%p,%s\n&quot;</span>, callParams.threadId, callParams.time, frameIndex,</div>
+<div class="line"><a name="l15926"></a><span class="lineno">15926</span>&#160;        pool, name != VMA_NULL ? name : <span class="stringliteral">&quot;&quot;</span>);</div>
+<div class="line"><a name="l15927"></a><span class="lineno">15927</span>&#160;    Flush();</div>
+<div class="line"><a name="l15928"></a><span class="lineno">15928</span>&#160;}</div>
+<div class="line"><a name="l15929"></a><span class="lineno">15929</span>&#160; </div>
+<div class="line"><a name="l15930"></a><span class="lineno">15930</span>&#160;VmaRecorder::UserDataString::UserDataString(<a class="code" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a> allocFlags, <span class="keyword">const</span> <span class="keywordtype">void</span>* pUserData)</div>
+<div class="line"><a name="l15931"></a><span class="lineno">15931</span>&#160;{</div>
+<div class="line"><a name="l15932"></a><span class="lineno">15932</span>&#160;    <span class="keywordflow">if</span>(pUserData != VMA_NULL)</div>
+<div class="line"><a name="l15933"></a><span class="lineno">15933</span>&#160;    {</div>
+<div class="line"><a name="l15934"></a><span class="lineno">15934</span>&#160;        <span class="keywordflow">if</span>((allocFlags &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a>) != 0)</div>
+<div class="line"><a name="l15935"></a><span class="lineno">15935</span>&#160;        {</div>
+<div class="line"><a name="l15936"></a><span class="lineno">15936</span>&#160;            m_Str = (<span class="keyword">const</span> <span class="keywordtype">char</span>*)pUserData;</div>
+<div class="line"><a name="l15937"></a><span class="lineno">15937</span>&#160;        }</div>
+<div class="line"><a name="l15938"></a><span class="lineno">15938</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15939"></a><span class="lineno">15939</span>&#160;        {</div>
+<div class="line"><a name="l15940"></a><span class="lineno">15940</span>&#160;            <span class="comment">// If VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT is not specified, convert the string&#39;s memory address to a string and store it.</span></div>
+<div class="line"><a name="l15941"></a><span class="lineno">15941</span>&#160;            snprintf(m_PtrStr, 17, <span class="stringliteral">&quot;%p&quot;</span>, pUserData);</div>
+<div class="line"><a name="l15942"></a><span class="lineno">15942</span>&#160;            m_Str = m_PtrStr;</div>
+<div class="line"><a name="l15943"></a><span class="lineno">15943</span>&#160;        }</div>
+<div class="line"><a name="l15944"></a><span class="lineno">15944</span>&#160;    }</div>
+<div class="line"><a name="l15945"></a><span class="lineno">15945</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15946"></a><span class="lineno">15946</span>&#160;    {</div>
+<div class="line"><a name="l15947"></a><span class="lineno">15947</span>&#160;        m_Str = <span class="stringliteral">&quot;&quot;</span>;</div>
+<div class="line"><a name="l15948"></a><span class="lineno">15948</span>&#160;    }</div>
+<div class="line"><a name="l15949"></a><span class="lineno">15949</span>&#160;}</div>
+<div class="line"><a name="l15950"></a><span class="lineno">15950</span>&#160; </div>
+<div class="line"><a name="l15951"></a><span class="lineno">15951</span>&#160;<span class="keywordtype">void</span> VmaRecorder::WriteConfiguration(</div>
+<div class="line"><a name="l15952"></a><span class="lineno">15952</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceProperties&amp; devProps,</div>
+<div class="line"><a name="l15953"></a><span class="lineno">15953</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceMemoryProperties&amp; memProps,</div>
+<div class="line"><a name="l15954"></a><span class="lineno">15954</span>&#160;    uint32_t vulkanApiVersion,</div>
+<div class="line"><a name="l15955"></a><span class="lineno">15955</span>&#160;    <span class="keywordtype">bool</span> dedicatedAllocationExtensionEnabled,</div>
+<div class="line"><a name="l15956"></a><span class="lineno">15956</span>&#160;    <span class="keywordtype">bool</span> bindMemory2ExtensionEnabled,</div>
+<div class="line"><a name="l15957"></a><span class="lineno">15957</span>&#160;    <span class="keywordtype">bool</span> memoryBudgetExtensionEnabled,</div>
+<div class="line"><a name="l15958"></a><span class="lineno">15958</span>&#160;    <span class="keywordtype">bool</span> deviceCoherentMemoryExtensionEnabled)</div>
+<div class="line"><a name="l15959"></a><span class="lineno">15959</span>&#160;{</div>
+<div class="line"><a name="l15960"></a><span class="lineno">15960</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Config,Begin\n&quot;</span>);</div>
+<div class="line"><a name="l15961"></a><span class="lineno">15961</span>&#160; </div>
+<div class="line"><a name="l15962"></a><span class="lineno">15962</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;VulkanApiVersion,%u,%u\n&quot;</span>, VK_VERSION_MAJOR(vulkanApiVersion), VK_VERSION_MINOR(vulkanApiVersion));</div>
+<div class="line"><a name="l15963"></a><span class="lineno">15963</span>&#160; </div>
+<div class="line"><a name="l15964"></a><span class="lineno">15964</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,apiVersion,%u\n&quot;</span>, devProps.apiVersion);</div>
+<div class="line"><a name="l15965"></a><span class="lineno">15965</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,driverVersion,%u\n&quot;</span>, devProps.driverVersion);</div>
+<div class="line"><a name="l15966"></a><span class="lineno">15966</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,vendorID,%u\n&quot;</span>, devProps.vendorID);</div>
+<div class="line"><a name="l15967"></a><span class="lineno">15967</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,deviceID,%u\n&quot;</span>, devProps.deviceID);</div>
+<div class="line"><a name="l15968"></a><span class="lineno">15968</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,deviceType,%u\n&quot;</span>, devProps.deviceType);</div>
+<div class="line"><a name="l15969"></a><span class="lineno">15969</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,deviceName,%s\n&quot;</span>, devProps.deviceName);</div>
+<div class="line"><a name="l15970"></a><span class="lineno">15970</span>&#160; </div>
+<div class="line"><a name="l15971"></a><span class="lineno">15971</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceLimits,maxMemoryAllocationCount,%u\n&quot;</span>, devProps.limits.maxMemoryAllocationCount);</div>
+<div class="line"><a name="l15972"></a><span class="lineno">15972</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceLimits,bufferImageGranularity,%llu\n&quot;</span>, devProps.limits.bufferImageGranularity);</div>
+<div class="line"><a name="l15973"></a><span class="lineno">15973</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceLimits,nonCoherentAtomSize,%llu\n&quot;</span>, devProps.limits.nonCoherentAtomSize);</div>
+<div class="line"><a name="l15974"></a><span class="lineno">15974</span>&#160; </div>
+<div class="line"><a name="l15975"></a><span class="lineno">15975</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,HeapCount,%u\n&quot;</span>, memProps.memoryHeapCount);</div>
+<div class="line"><a name="l15976"></a><span class="lineno">15976</span>&#160;    <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; memProps.memoryHeapCount; ++i)</div>
+<div class="line"><a name="l15977"></a><span class="lineno">15977</span>&#160;    {</div>
+<div class="line"><a name="l15978"></a><span class="lineno">15978</span>&#160;        fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,Heap,%u,size,%llu\n&quot;</span>, i, memProps.memoryHeaps[i].size);</div>
+<div class="line"><a name="l15979"></a><span class="lineno">15979</span>&#160;        fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,Heap,%u,flags,%u\n&quot;</span>, i, memProps.memoryHeaps[i].flags);</div>
+<div class="line"><a name="l15980"></a><span class="lineno">15980</span>&#160;    }</div>
+<div class="line"><a name="l15981"></a><span class="lineno">15981</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,TypeCount,%u\n&quot;</span>, memProps.memoryTypeCount);</div>
+<div class="line"><a name="l15982"></a><span class="lineno">15982</span>&#160;    <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; memProps.memoryTypeCount; ++i)</div>
+<div class="line"><a name="l15983"></a><span class="lineno">15983</span>&#160;    {</div>
+<div class="line"><a name="l15984"></a><span class="lineno">15984</span>&#160;        fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,Type,%u,heapIndex,%u\n&quot;</span>, i, memProps.memoryTypes[i].heapIndex);</div>
+<div class="line"><a name="l15985"></a><span class="lineno">15985</span>&#160;        fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,Type,%u,propertyFlags,%u\n&quot;</span>, i, memProps.memoryTypes[i].propertyFlags);</div>
+<div class="line"><a name="l15986"></a><span class="lineno">15986</span>&#160;    }</div>
+<div class="line"><a name="l15987"></a><span class="lineno">15987</span>&#160; </div>
+<div class="line"><a name="l15988"></a><span class="lineno">15988</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Extension,VK_KHR_dedicated_allocation,%u\n&quot;</span>, dedicatedAllocationExtensionEnabled ? 1 : 0);</div>
+<div class="line"><a name="l15989"></a><span class="lineno">15989</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Extension,VK_KHR_bind_memory2,%u\n&quot;</span>, bindMemory2ExtensionEnabled ? 1 : 0);</div>
+<div class="line"><a name="l15990"></a><span class="lineno">15990</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Extension,VK_EXT_memory_budget,%u\n&quot;</span>, memoryBudgetExtensionEnabled ? 1 : 0);</div>
+<div class="line"><a name="l15991"></a><span class="lineno">15991</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Extension,VK_AMD_device_coherent_memory,%u\n&quot;</span>, deviceCoherentMemoryExtensionEnabled ? 1 : 0);</div>
+<div class="line"><a name="l15992"></a><span class="lineno">15992</span>&#160; </div>
+<div class="line"><a name="l15993"></a><span class="lineno">15993</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEBUG_ALWAYS_DEDICATED_MEMORY,%u\n&quot;</span>, VMA_DEBUG_ALWAYS_DEDICATED_MEMORY ? 1 : 0);</div>
+<div class="line"><a name="l15994"></a><span class="lineno">15994</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_MIN_ALIGNMENT,%llu\n&quot;</span>, (VkDeviceSize)VMA_MIN_ALIGNMENT);</div>
+<div class="line"><a name="l15995"></a><span class="lineno">15995</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEBUG_MARGIN,%llu\n&quot;</span>, (VkDeviceSize)VMA_DEBUG_MARGIN);</div>
+<div class="line"><a name="l15996"></a><span class="lineno">15996</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEBUG_INITIALIZE_ALLOCATIONS,%u\n&quot;</span>, VMA_DEBUG_INITIALIZE_ALLOCATIONS ? 1 : 0);</div>
+<div class="line"><a name="l15997"></a><span class="lineno">15997</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEBUG_DETECT_CORRUPTION,%u\n&quot;</span>, VMA_DEBUG_DETECT_CORRUPTION ? 1 : 0);</div>
+<div class="line"><a name="l15998"></a><span class="lineno">15998</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEBUG_GLOBAL_MUTEX,%u\n&quot;</span>, VMA_DEBUG_GLOBAL_MUTEX ? 1 : 0);</div>
+<div class="line"><a name="l15999"></a><span class="lineno">15999</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY,%llu\n&quot;</span>, (VkDeviceSize)VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY);</div>
+<div class="line"><a name="l16000"></a><span class="lineno">16000</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_SMALL_HEAP_MAX_SIZE,%llu\n&quot;</span>, (VkDeviceSize)VMA_SMALL_HEAP_MAX_SIZE);</div>
+<div class="line"><a name="l16001"></a><span class="lineno">16001</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE,%llu\n&quot;</span>, (VkDeviceSize)VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE);</div>
+<div class="line"><a name="l16002"></a><span class="lineno">16002</span>&#160; </div>
+<div class="line"><a name="l16003"></a><span class="lineno">16003</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Config,End\n&quot;</span>);</div>
+<div class="line"><a name="l16004"></a><span class="lineno">16004</span>&#160;}</div>
+<div class="line"><a name="l16005"></a><span class="lineno">16005</span>&#160; </div>
+<div class="line"><a name="l16006"></a><span class="lineno">16006</span>&#160;<span class="keywordtype">void</span> VmaRecorder::GetBasicParams(CallParams&amp; outParams)</div>
+<div class="line"><a name="l16007"></a><span class="lineno">16007</span>&#160;{</div>
+<div class="line"><a name="l16008"></a><span class="lineno">16008</span>&#160;<span class="preprocessor">    #if defined(_WIN32)</span></div>
+<div class="line"><a name="l16009"></a><span class="lineno">16009</span>&#160;        outParams.threadId = GetCurrentThreadId();</div>
+<div class="line"><a name="l16010"></a><span class="lineno">16010</span>&#160;<span class="preprocessor">    #else</span></div>
+<div class="line"><a name="l16011"></a><span class="lineno">16011</span>&#160;        <span class="comment">// Use C++11 features to get thread id and convert it to uint32_t.</span></div>
+<div class="line"><a name="l16012"></a><span class="lineno">16012</span>&#160;        <span class="comment">// There is room for optimization since sstream is quite slow.</span></div>
+<div class="line"><a name="l16013"></a><span class="lineno">16013</span>&#160;        <span class="comment">// Is there a better way to convert std::this_thread::get_id() to uint32_t?</span></div>
+<div class="line"><a name="l16014"></a><span class="lineno">16014</span>&#160;        std::thread::id thread_id = std::this_thread::get_id();</div>
+<div class="line"><a name="l16015"></a><span class="lineno">16015</span>&#160;        std::stringstream thread_id_to_string_converter;</div>
+<div class="line"><a name="l16016"></a><span class="lineno">16016</span>&#160;        thread_id_to_string_converter &lt;&lt; thread_id;</div>
+<div class="line"><a name="l16017"></a><span class="lineno">16017</span>&#160;        std::string thread_id_as_string = thread_id_to_string_converter.str();</div>
+<div class="line"><a name="l16018"></a><span class="lineno">16018</span>&#160;        outParams.threadId = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(std::stoi(thread_id_as_string.c_str()));</div>
+<div class="line"><a name="l16019"></a><span class="lineno">16019</span>&#160;<span class="preprocessor">    #endif</span></div>
+<div class="line"><a name="l16020"></a><span class="lineno">16020</span>&#160; </div>
+<div class="line"><a name="l16021"></a><span class="lineno">16021</span>&#160;    <span class="keyword">auto</span> current_time = std::chrono::high_resolution_clock::now();</div>
+<div class="line"><a name="l16022"></a><span class="lineno">16022</span>&#160; </div>
+<div class="line"><a name="l16023"></a><span class="lineno">16023</span>&#160;    outParams.time = std::chrono::duration&lt;double, std::chrono::seconds::period&gt;(current_time - m_RecordingStartTime).count();</div>
+<div class="line"><a name="l16024"></a><span class="lineno">16024</span>&#160;}</div>
+<div class="line"><a name="l16025"></a><span class="lineno">16025</span>&#160; </div>
+<div class="line"><a name="l16026"></a><span class="lineno">16026</span>&#160;<span class="keywordtype">void</span> VmaRecorder::PrintPointerList(uint64_t count, <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pItems)</div>
+<div class="line"><a name="l16027"></a><span class="lineno">16027</span>&#160;{</div>
+<div class="line"><a name="l16028"></a><span class="lineno">16028</span>&#160;    <span class="keywordflow">if</span>(count)</div>
+<div class="line"><a name="l16029"></a><span class="lineno">16029</span>&#160;    {</div>
+<div class="line"><a name="l16030"></a><span class="lineno">16030</span>&#160;        fprintf(m_File, <span class="stringliteral">&quot;%p&quot;</span>, pItems[0]);</div>
+<div class="line"><a name="l16031"></a><span class="lineno">16031</span>&#160;        <span class="keywordflow">for</span>(uint64_t i = 1; i &lt; count; ++i)</div>
+<div class="line"><a name="l16032"></a><span class="lineno">16032</span>&#160;        {</div>
+<div class="line"><a name="l16033"></a><span class="lineno">16033</span>&#160;            fprintf(m_File, <span class="stringliteral">&quot; %p&quot;</span>, pItems[i]);</div>
+<div class="line"><a name="l16034"></a><span class="lineno">16034</span>&#160;        }</div>
+<div class="line"><a name="l16035"></a><span class="lineno">16035</span>&#160;    }</div>
+<div class="line"><a name="l16036"></a><span class="lineno">16036</span>&#160;}</div>
+<div class="line"><a name="l16037"></a><span class="lineno">16037</span>&#160; </div>
+<div class="line"><a name="l16038"></a><span class="lineno">16038</span>&#160;<span class="keywordtype">void</span> VmaRecorder::Flush()</div>
+<div class="line"><a name="l16039"></a><span class="lineno">16039</span>&#160;{</div>
+<div class="line"><a name="l16040"></a><span class="lineno">16040</span>&#160;    <span class="keywordflow">if</span>((m_Flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7">VMA_RECORD_FLUSH_AFTER_CALL_BIT</a>) != 0)</div>
+<div class="line"><a name="l16041"></a><span class="lineno">16041</span>&#160;    {</div>
+<div class="line"><a name="l16042"></a><span class="lineno">16042</span>&#160;        fflush(m_File);</div>
+<div class="line"><a name="l16043"></a><span class="lineno">16043</span>&#160;    }</div>
+<div class="line"><a name="l16044"></a><span class="lineno">16044</span>&#160;}</div>
+<div class="line"><a name="l16045"></a><span class="lineno">16045</span>&#160; </div>
+<div class="line"><a name="l16046"></a><span class="lineno">16046</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l16047"></a><span class="lineno">16047</span>&#160; </div>
+<div class="line"><a name="l16049"></a><span class="lineno">16049</span>&#160;<span class="comment">// VmaAllocationObjectAllocator</span></div>
+<div class="line"><a name="l16050"></a><span class="lineno">16050</span>&#160; </div>
+<div class="line"><a name="l16051"></a><span class="lineno">16051</span>&#160;VmaAllocationObjectAllocator::VmaAllocationObjectAllocator(<span class="keyword">const</span> VkAllocationCallbacks* pAllocationCallbacks) :</div>
+<div class="line"><a name="l16052"></a><span class="lineno">16052</span>&#160;    m_Allocator(pAllocationCallbacks, 1024)</div>
+<div class="line"><a name="l16053"></a><span class="lineno">16053</span>&#160;{</div>
+<div class="line"><a name="l16054"></a><span class="lineno">16054</span>&#160;}</div>
+<div class="line"><a name="l16055"></a><span class="lineno">16055</span>&#160; </div>
+<div class="line"><a name="l16056"></a><span class="lineno">16056</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Types&gt; <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VmaAllocationObjectAllocator::Allocate(Types... args)</div>
+<div class="line"><a name="l16057"></a><span class="lineno">16057</span>&#160;{</div>
+<div class="line"><a name="l16058"></a><span class="lineno">16058</span>&#160;    VmaMutexLock mutexLock(m_Mutex);</div>
+<div class="line"><a name="l16059"></a><span class="lineno">16059</span>&#160;    <span class="keywordflow">return</span> m_Allocator.Alloc&lt;Types...&gt;(std::forward&lt;Types&gt;(args)...);</div>
+<div class="line"><a name="l16060"></a><span class="lineno">16060</span>&#160;}</div>
+<div class="line"><a name="l16061"></a><span class="lineno">16061</span>&#160; </div>
+<div class="line"><a name="l16062"></a><span class="lineno">16062</span>&#160;<span class="keywordtype">void</span> VmaAllocationObjectAllocator::Free(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAlloc)</div>
+<div class="line"><a name="l16063"></a><span class="lineno">16063</span>&#160;{</div>
+<div class="line"><a name="l16064"></a><span class="lineno">16064</span>&#160;    VmaMutexLock mutexLock(m_Mutex);</div>
+<div class="line"><a name="l16065"></a><span class="lineno">16065</span>&#160;    m_Allocator.Free(hAlloc);</div>
+<div class="line"><a name="l16066"></a><span class="lineno">16066</span>&#160;}</div>
+<div class="line"><a name="l16067"></a><span class="lineno">16067</span>&#160; </div>
+<div class="line"><a name="l16069"></a><span class="lineno">16069</span>&#160;<span class="comment">// VmaAllocator_T</span></div>
+<div class="line"><a name="l16070"></a><span class="lineno">16070</span>&#160; </div>
+<div class="line"><a name="l16071"></a><span class="lineno">16071</span>&#160;VmaAllocator_T::VmaAllocator_T(<span class="keyword">const</span> <a class="code" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a>* pCreateInfo) :</div>
+<div class="line"><a name="l16072"></a><span class="lineno">16072</span>&#160;    m_UseMutex((pCreateInfo-&gt;flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</a>) == 0),</div>
+<div class="line"><a name="l16073"></a><span class="lineno">16073</span>&#160;    m_VulkanApiVersion(pCreateInfo-&gt;vulkanApiVersion != 0 ? pCreateInfo-&gt;vulkanApiVersion : VK_API_VERSION_1_0),</div>
+<div class="line"><a name="l16074"></a><span class="lineno">16074</span>&#160;    m_UseKhrDedicatedAllocation((pCreateInfo-&gt;flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a>) != 0),</div>
+<div class="line"><a name="l16075"></a><span class="lineno">16075</span>&#160;    m_UseKhrBindMemory2((pCreateInfo-&gt;flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a>) != 0),</div>
+<div class="line"><a name="l16076"></a><span class="lineno">16076</span>&#160;    m_UseExtMemoryBudget((pCreateInfo-&gt;flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</a>) != 0),</div>
+<div class="line"><a name="l16077"></a><span class="lineno">16077</span>&#160;    m_UseAmdDeviceCoherentMemory((pCreateInfo-&gt;flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT</a>) != 0),</div>
+<div class="line"><a name="l16078"></a><span class="lineno">16078</span>&#160;    m_UseKhrBufferDeviceAddress((pCreateInfo-&gt;flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</a>) != 0),</div>
+<div class="line"><a name="l16079"></a><span class="lineno">16079</span>&#160;    m_UseExtMemoryPriority((pCreateInfo-&gt;flags &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</a>) != 0),</div>
+<div class="line"><a name="l16080"></a><span class="lineno">16080</span>&#160;    m_hDevice(pCreateInfo-&gt;device),</div>
+<div class="line"><a name="l16081"></a><span class="lineno">16081</span>&#160;    m_hInstance(pCreateInfo-&gt;instance),</div>
+<div class="line"><a name="l16082"></a><span class="lineno">16082</span>&#160;    m_AllocationCallbacksSpecified(pCreateInfo-&gt;pAllocationCallbacks != VMA_NULL),</div>
+<div class="line"><a name="l16083"></a><span class="lineno">16083</span>&#160;    m_AllocationCallbacks(pCreateInfo-&gt;pAllocationCallbacks ?</div>
+<div class="line"><a name="l16084"></a><span class="lineno">16084</span>&#160;        *pCreateInfo-&gt;pAllocationCallbacks : VmaEmptyAllocationCallbacks),</div>
+<div class="line"><a name="l16085"></a><span class="lineno">16085</span>&#160;    m_AllocationObjectAllocator(&amp;m_AllocationCallbacks),</div>
+<div class="line"><a name="l16086"></a><span class="lineno">16086</span>&#160;    m_HeapSizeLimitMask(0),</div>
+<div class="line"><a name="l16087"></a><span class="lineno">16087</span>&#160;    m_DeviceMemoryCount(0),</div>
+<div class="line"><a name="l16088"></a><span class="lineno">16088</span>&#160;    m_PreferredLargeHeapBlockSize(0),</div>
+<div class="line"><a name="l16089"></a><span class="lineno">16089</span>&#160;    m_PhysicalDevice(pCreateInfo-&gt;physicalDevice),</div>
+<div class="line"><a name="l16090"></a><span class="lineno">16090</span>&#160;    m_CurrentFrameIndex(0),</div>
+<div class="line"><a name="l16091"></a><span class="lineno">16091</span>&#160;    m_GpuDefragmentationMemoryTypeBits(UINT32_MAX),</div>
+<div class="line"><a name="l16092"></a><span class="lineno">16092</span>&#160;    m_NextPoolId(0),</div>
+<div class="line"><a name="l16093"></a><span class="lineno">16093</span>&#160;    m_GlobalMemoryTypeBits(UINT32_MAX)</div>
+<div class="line"><a name="l16094"></a><span class="lineno">16094</span>&#160;#if <a class="code" href="vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c">VMA_RECORDING_ENABLED</a></div>
+<div class="line"><a name="l16095"></a><span class="lineno">16095</span>&#160;    ,m_pRecorder(VMA_NULL)</div>
+<div class="line"><a name="l16096"></a><span class="lineno">16096</span>&#160;#endif</div>
+<div class="line"><a name="l16097"></a><span class="lineno">16097</span>&#160;{</div>
+<div class="line"><a name="l16098"></a><span class="lineno">16098</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
+<div class="line"><a name="l16099"></a><span class="lineno">16099</span>&#160;    {</div>
+<div class="line"><a name="l16100"></a><span class="lineno">16100</span>&#160;        m_UseKhrDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l16101"></a><span class="lineno">16101</span>&#160;        m_UseKhrBindMemory2 = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l16102"></a><span class="lineno">16102</span>&#160;    }</div>
+<div class="line"><a name="l16103"></a><span class="lineno">16103</span>&#160; </div>
+<div class="line"><a name="l16104"></a><span class="lineno">16104</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_DETECT_CORRUPTION)</div>
+<div class="line"><a name="l16105"></a><span class="lineno">16105</span>&#160;    {</div>
+<div class="line"><a name="l16106"></a><span class="lineno">16106</span>&#160;        <span class="comment">// Needs to be multiply of uint32_t size because we are going to write VMA_CORRUPTION_DETECTION_MAGIC_VALUE to it.</span></div>
+<div class="line"><a name="l16107"></a><span class="lineno">16107</span>&#160;        VMA_ASSERT(VMA_DEBUG_MARGIN % <span class="keyword">sizeof</span>(uint32_t) == 0);</div>
+<div class="line"><a name="l16108"></a><span class="lineno">16108</span>&#160;    }</div>
+<div class="line"><a name="l16109"></a><span class="lineno">16109</span>&#160; </div>
+<div class="line"><a name="l16110"></a><span class="lineno">16110</span>&#160;    VMA_ASSERT(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156">physicalDevice</a> &amp;&amp; pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500">device</a> &amp;&amp; pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a70dd42e29b1df1d1b9b61532ae0b370b">instance</a>);</div>
+<div class="line"><a name="l16111"></a><span class="lineno">16111</span>&#160; </div>
+<div class="line"><a name="l16112"></a><span class="lineno">16112</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &lt; VK_MAKE_VERSION(1, 1, 0))</div>
+<div class="line"><a name="l16113"></a><span class="lineno">16113</span>&#160;    {</div>
+<div class="line"><a name="l16114"></a><span class="lineno">16114</span>&#160;<span class="preprocessor">#if !(VMA_DEDICATED_ALLOCATION)</span></div>
+<div class="line"><a name="l16115"></a><span class="lineno">16115</span>&#160;        <span class="keywordflow">if</span>((pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a>) != 0)</div>
+<div class="line"><a name="l16116"></a><span class="lineno">16116</span>&#160;        {</div>
+<div class="line"><a name="l16117"></a><span class="lineno">16117</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT set but required extensions are disabled by preprocessor macros.&quot;</span>);</div>
+<div class="line"><a name="l16118"></a><span class="lineno">16118</span>&#160;        }</div>
+<div class="line"><a name="l16119"></a><span class="lineno">16119</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16120"></a><span class="lineno">16120</span>&#160;<span class="preprocessor">#if !(VMA_BIND_MEMORY2)</span></div>
+<div class="line"><a name="l16121"></a><span class="lineno">16121</span>&#160;        <span class="keywordflow">if</span>((pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a>) != 0)</div>
+<div class="line"><a name="l16122"></a><span class="lineno">16122</span>&#160;        {</div>
+<div class="line"><a name="l16123"></a><span class="lineno">16123</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT set but required extension is disabled by preprocessor macros.&quot;</span>);</div>
+<div class="line"><a name="l16124"></a><span class="lineno">16124</span>&#160;        }</div>
+<div class="line"><a name="l16125"></a><span class="lineno">16125</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16126"></a><span class="lineno">16126</span>&#160;    }</div>
+<div class="line"><a name="l16127"></a><span class="lineno">16127</span>&#160;<span class="preprocessor">#if !(VMA_MEMORY_BUDGET)</span></div>
+<div class="line"><a name="l16128"></a><span class="lineno">16128</span>&#160;    <span class="keywordflow">if</span>((pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</a>) != 0)</div>
+<div class="line"><a name="l16129"></a><span class="lineno">16129</span>&#160;    {</div>
+<div class="line"><a name="l16130"></a><span class="lineno">16130</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT set but required extension is disabled by preprocessor macros.&quot;</span>);</div>
+<div class="line"><a name="l16131"></a><span class="lineno">16131</span>&#160;    }</div>
+<div class="line"><a name="l16132"></a><span class="lineno">16132</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16133"></a><span class="lineno">16133</span>&#160;<span class="preprocessor">#if !(VMA_BUFFER_DEVICE_ADDRESS)</span></div>
+<div class="line"><a name="l16134"></a><span class="lineno">16134</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrBufferDeviceAddress)</div>
+<div class="line"><a name="l16135"></a><span class="lineno">16135</span>&#160;    {</div>
+<div class="line"><a name="l16136"></a><span class="lineno">16136</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT is set but required extension or Vulkan 1.2 is not available in your Vulkan header or its support in VMA has been disabled by a preprocessor macro.&quot;</span>);</div>
+<div class="line"><a name="l16137"></a><span class="lineno">16137</span>&#160;    }</div>
+<div class="line"><a name="l16138"></a><span class="lineno">16138</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16139"></a><span class="lineno">16139</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &lt; 1002000</span></div>
+<div class="line"><a name="l16140"></a><span class="lineno">16140</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 2, 0))</div>
+<div class="line"><a name="l16141"></a><span class="lineno">16141</span>&#160;    {</div>
+<div class="line"><a name="l16142"></a><span class="lineno">16142</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;vulkanApiVersion &gt;= VK_API_VERSION_1_2 but required Vulkan version is disabled by preprocessor macros.&quot;</span>);</div>
+<div class="line"><a name="l16143"></a><span class="lineno">16143</span>&#160;    }</div>
+<div class="line"><a name="l16144"></a><span class="lineno">16144</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16145"></a><span class="lineno">16145</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &lt; 1001000</span></div>
+<div class="line"><a name="l16146"></a><span class="lineno">16146</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
+<div class="line"><a name="l16147"></a><span class="lineno">16147</span>&#160;    {</div>
+<div class="line"><a name="l16148"></a><span class="lineno">16148</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;vulkanApiVersion &gt;= VK_API_VERSION_1_1 but required Vulkan version is disabled by preprocessor macros.&quot;</span>);</div>
+<div class="line"><a name="l16149"></a><span class="lineno">16149</span>&#160;    }</div>
+<div class="line"><a name="l16150"></a><span class="lineno">16150</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16151"></a><span class="lineno">16151</span>&#160;<span class="preprocessor">#if !(VMA_MEMORY_PRIORITY)</span></div>
+<div class="line"><a name="l16152"></a><span class="lineno">16152</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryPriority)</div>
+<div class="line"><a name="l16153"></a><span class="lineno">16153</span>&#160;    {</div>
+<div class="line"><a name="l16154"></a><span class="lineno">16154</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT is set but required extension is not available in your Vulkan header or its support in VMA has been disabled by a preprocessor macro.&quot;</span>);</div>
+<div class="line"><a name="l16155"></a><span class="lineno">16155</span>&#160;    }</div>
+<div class="line"><a name="l16156"></a><span class="lineno">16156</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16157"></a><span class="lineno">16157</span>&#160; </div>
+<div class="line"><a name="l16158"></a><span class="lineno">16158</span>&#160;    memset(&amp;m_DeviceMemoryCallbacks, 0 ,<span class="keyword">sizeof</span>(m_DeviceMemoryCallbacks));</div>
+<div class="line"><a name="l16159"></a><span class="lineno">16159</span>&#160;    memset(&amp;m_PhysicalDeviceProperties, 0, <span class="keyword">sizeof</span>(m_PhysicalDeviceProperties));</div>
+<div class="line"><a name="l16160"></a><span class="lineno">16160</span>&#160;    memset(&amp;m_MemProps, 0, <span class="keyword">sizeof</span>(m_MemProps));</div>
+<div class="line"><a name="l16161"></a><span class="lineno">16161</span>&#160; </div>
+<div class="line"><a name="l16162"></a><span class="lineno">16162</span>&#160;    memset(&amp;m_pBlockVectors, 0, <span class="keyword">sizeof</span>(m_pBlockVectors));</div>
+<div class="line"><a name="l16163"></a><span class="lineno">16163</span>&#160;    memset(&amp;m_VulkanFunctions, 0, <span class="keyword">sizeof</span>(m_VulkanFunctions));</div>
+<div class="line"><a name="l16164"></a><span class="lineno">16164</span>&#160; </div>
+<div class="line"><a name="l16165"></a><span class="lineno">16165</span>&#160;<span class="preprocessor">#if VMA_EXTERNAL_MEMORY</span></div>
+<div class="line"><a name="l16166"></a><span class="lineno">16166</span>&#160;    memset(&amp;m_TypeExternalMemoryHandleTypes, 0, <span class="keyword">sizeof</span>(m_TypeExternalMemoryHandleTypes));</div>
+<div class="line"><a name="l16167"></a><span class="lineno">16167</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_EXTERNAL_MEMORY</span></div>
+<div class="line"><a name="l16168"></a><span class="lineno">16168</span>&#160; </div>
+<div class="line"><a name="l16169"></a><span class="lineno">16169</span>&#160;    <span class="keywordflow">if</span>(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e">pDeviceMemoryCallbacks</a> != VMA_NULL)</div>
+<div class="line"><a name="l16170"></a><span class="lineno">16170</span>&#160;    {</div>
+<div class="line"><a name="l16171"></a><span class="lineno">16171</span>&#160;        m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6">pUserData</a> = pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e">pDeviceMemoryCallbacks</a>-&gt;<a class="code" href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6">pUserData</a>;</div>
+<div class="line"><a name="l16172"></a><span class="lineno">16172</span>&#160;        m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">pfnAllocate</a> = pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e">pDeviceMemoryCallbacks</a>-&gt;<a class="code" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">pfnAllocate</a>;</div>
+<div class="line"><a name="l16173"></a><span class="lineno">16173</span>&#160;        m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">pfnFree</a> = pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e">pDeviceMemoryCallbacks</a>-&gt;<a class="code" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">pfnFree</a>;</div>
+<div class="line"><a name="l16174"></a><span class="lineno">16174</span>&#160;    }</div>
+<div class="line"><a name="l16175"></a><span class="lineno">16175</span>&#160; </div>
+<div class="line"><a name="l16176"></a><span class="lineno">16176</span>&#160;    ImportVulkanFunctions(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd">pVulkanFunctions</a>);</div>
+<div class="line"><a name="l16177"></a><span class="lineno">16177</span>&#160; </div>
+<div class="line"><a name="l16178"></a><span class="lineno">16178</span>&#160;    (*m_VulkanFunctions.vkGetPhysicalDeviceProperties)(m_PhysicalDevice, &amp;m_PhysicalDeviceProperties);</div>
+<div class="line"><a name="l16179"></a><span class="lineno">16179</span>&#160;    (*m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties)(m_PhysicalDevice, &amp;m_MemProps);</div>
+<div class="line"><a name="l16180"></a><span class="lineno">16180</span>&#160; </div>
+<div class="line"><a name="l16181"></a><span class="lineno">16181</span>&#160;    VMA_ASSERT(VmaIsPow2(VMA_MIN_ALIGNMENT));</div>
+<div class="line"><a name="l16182"></a><span class="lineno">16182</span>&#160;    VMA_ASSERT(VmaIsPow2(VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY));</div>
+<div class="line"><a name="l16183"></a><span class="lineno">16183</span>&#160;    VMA_ASSERT(VmaIsPow2(m_PhysicalDeviceProperties.limits.bufferImageGranularity));</div>
+<div class="line"><a name="l16184"></a><span class="lineno">16184</span>&#160;    VMA_ASSERT(VmaIsPow2(m_PhysicalDeviceProperties.limits.nonCoherentAtomSize));</div>
+<div class="line"><a name="l16185"></a><span class="lineno">16185</span>&#160; </div>
+<div class="line"><a name="l16186"></a><span class="lineno">16186</span>&#160;    m_PreferredLargeHeapBlockSize = (pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a">preferredLargeHeapBlockSize</a> != 0) ?</div>
+<div class="line"><a name="l16187"></a><span class="lineno">16187</span>&#160;        pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a">preferredLargeHeapBlockSize</a> : <span class="keyword">static_cast&lt;</span>VkDeviceSize<span class="keyword">&gt;</span>(VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE);</div>
+<div class="line"><a name="l16188"></a><span class="lineno">16188</span>&#160; </div>
+<div class="line"><a name="l16189"></a><span class="lineno">16189</span>&#160;    m_GlobalMemoryTypeBits = CalculateGlobalMemoryTypeBits();</div>
+<div class="line"><a name="l16190"></a><span class="lineno">16190</span>&#160; </div>
+<div class="line"><a name="l16191"></a><span class="lineno">16191</span>&#160;<span class="preprocessor">#if VMA_EXTERNAL_MEMORY</span></div>
+<div class="line"><a name="l16192"></a><span class="lineno">16192</span>&#160;    <span class="keywordflow">if</span>(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ae8f0db05e5cb4c43d7713bf4a49a736b">pTypeExternalMemoryHandleTypes</a> != VMA_NULL)</div>
+<div class="line"><a name="l16193"></a><span class="lineno">16193</span>&#160;    {</div>
+<div class="line"><a name="l16194"></a><span class="lineno">16194</span>&#160;        memcpy(m_TypeExternalMemoryHandleTypes, pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ae8f0db05e5cb4c43d7713bf4a49a736b">pTypeExternalMemoryHandleTypes</a>,</div>
+<div class="line"><a name="l16195"></a><span class="lineno">16195</span>&#160;            <span class="keyword">sizeof</span>(VkExternalMemoryHandleTypeFlagsKHR) * GetMemoryTypeCount());</div>
+<div class="line"><a name="l16196"></a><span class="lineno">16196</span>&#160;    }</div>
+<div class="line"><a name="l16197"></a><span class="lineno">16197</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_EXTERNAL_MEMORY</span></div>
+<div class="line"><a name="l16198"></a><span class="lineno">16198</span>&#160; </div>
+<div class="line"><a name="l16199"></a><span class="lineno">16199</span>&#160;    <span class="keywordflow">if</span>(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b">pHeapSizeLimit</a> != VMA_NULL)</div>
+<div class="line"><a name="l16200"></a><span class="lineno">16200</span>&#160;    {</div>
+<div class="line"><a name="l16201"></a><span class="lineno">16201</span>&#160;        <span class="keywordflow">for</span>(uint32_t heapIndex = 0; heapIndex &lt; GetMemoryHeapCount(); ++heapIndex)</div>
+<div class="line"><a name="l16202"></a><span class="lineno">16202</span>&#160;        {</div>
+<div class="line"><a name="l16203"></a><span class="lineno">16203</span>&#160;            <span class="keyword">const</span> VkDeviceSize limit = pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b">pHeapSizeLimit</a>[heapIndex];</div>
+<div class="line"><a name="l16204"></a><span class="lineno">16204</span>&#160;            <span class="keywordflow">if</span>(limit != VK_WHOLE_SIZE)</div>
+<div class="line"><a name="l16205"></a><span class="lineno">16205</span>&#160;            {</div>
+<div class="line"><a name="l16206"></a><span class="lineno">16206</span>&#160;                m_HeapSizeLimitMask |= 1u &lt;&lt; heapIndex;</div>
+<div class="line"><a name="l16207"></a><span class="lineno">16207</span>&#160;                <span class="keywordflow">if</span>(limit &lt; m_MemProps.memoryHeaps[heapIndex].size)</div>
+<div class="line"><a name="l16208"></a><span class="lineno">16208</span>&#160;                {</div>
+<div class="line"><a name="l16209"></a><span class="lineno">16209</span>&#160;                    m_MemProps.memoryHeaps[heapIndex].size = limit;</div>
+<div class="line"><a name="l16210"></a><span class="lineno">16210</span>&#160;                }</div>
+<div class="line"><a name="l16211"></a><span class="lineno">16211</span>&#160;            }</div>
+<div class="line"><a name="l16212"></a><span class="lineno">16212</span>&#160;        }</div>
+<div class="line"><a name="l16213"></a><span class="lineno">16213</span>&#160;    }</div>
+<div class="line"><a name="l16214"></a><span class="lineno">16214</span>&#160; </div>
+<div class="line"><a name="l16215"></a><span class="lineno">16215</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
+<div class="line"><a name="l16216"></a><span class="lineno">16216</span>&#160;    {</div>
+<div class="line"><a name="l16217"></a><span class="lineno">16217</span>&#160;        <span class="keyword">const</span> VkDeviceSize preferredBlockSize = CalcPreferredBlockSize(memTypeIndex);</div>
+<div class="line"><a name="l16218"></a><span class="lineno">16218</span>&#160; </div>
+<div class="line"><a name="l16219"></a><span class="lineno">16219</span>&#160;        m_pBlockVectors[memTypeIndex] = vma_new(<span class="keyword">this</span>, VmaBlockVector)(</div>
+<div class="line"><a name="l16220"></a><span class="lineno">16220</span>&#160;            <span class="keyword">this</span>,</div>
+<div class="line"><a name="l16221"></a><span class="lineno">16221</span>&#160;            VK_NULL_HANDLE, <span class="comment">// hParentPool</span></div>
+<div class="line"><a name="l16222"></a><span class="lineno">16222</span>&#160;            memTypeIndex,</div>
+<div class="line"><a name="l16223"></a><span class="lineno">16223</span>&#160;            preferredBlockSize,</div>
+<div class="line"><a name="l16224"></a><span class="lineno">16224</span>&#160;            0,</div>
+<div class="line"><a name="l16225"></a><span class="lineno">16225</span>&#160;            SIZE_MAX,</div>
+<div class="line"><a name="l16226"></a><span class="lineno">16226</span>&#160;            GetBufferImageGranularity(),</div>
+<div class="line"><a name="l16227"></a><span class="lineno">16227</span>&#160;            pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a21ea188dd212b8171cb9ecbed4a2a3a7">frameInUseCount</a>,</div>
+<div class="line"><a name="l16228"></a><span class="lineno">16228</span>&#160;            <span class="keyword">false</span>, <span class="comment">// explicitBlockSize</span></div>
+<div class="line"><a name="l16229"></a><span class="lineno">16229</span>&#160;            <span class="keyword">false</span>, <span class="comment">// linearAlgorithm</span></div>
+<div class="line"><a name="l16230"></a><span class="lineno">16230</span>&#160;            0.5f, <span class="comment">// priority (0.5 is the default per Vulkan spec)</span></div>
+<div class="line"><a name="l16231"></a><span class="lineno">16231</span>&#160;            GetMemoryTypeMinAlignment(memTypeIndex), <span class="comment">// minAllocationAlignment</span></div>
+<div class="line"><a name="l16232"></a><span class="lineno">16232</span>&#160;            VMA_NULL); <span class="comment">// // pMemoryAllocateNext</span></div>
+<div class="line"><a name="l16233"></a><span class="lineno">16233</span>&#160;        <span class="comment">// No need to call m_pBlockVectors[memTypeIndex][blockVectorTypeIndex]-&gt;CreateMinBlocks here,</span></div>
+<div class="line"><a name="l16234"></a><span class="lineno">16234</span>&#160;        <span class="comment">// becase minBlockCount is 0.</span></div>
+<div class="line"><a name="l16235"></a><span class="lineno">16235</span>&#160;    }</div>
+<div class="line"><a name="l16236"></a><span class="lineno">16236</span>&#160;}</div>
+<div class="line"><a name="l16237"></a><span class="lineno">16237</span>&#160; </div>
+<div class="line"><a name="l16238"></a><span class="lineno">16238</span>&#160;VkResult VmaAllocator_T::Init(<span class="keyword">const</span> <a class="code" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a>* pCreateInfo)</div>
+<div class="line"><a name="l16239"></a><span class="lineno">16239</span>&#160;{</div>
+<div class="line"><a name="l16240"></a><span class="lineno">16240</span>&#160;    VkResult res = VK_SUCCESS;</div>
+<div class="line"><a name="l16241"></a><span class="lineno">16241</span>&#160; </div>
+<div class="line"><a name="l16242"></a><span class="lineno">16242</span>&#160;    <span class="keywordflow">if</span>(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee">pRecordSettings</a> != VMA_NULL &amp;&amp;</div>
+<div class="line"><a name="l16243"></a><span class="lineno">16243</span>&#160;        !VmaStrIsEmpty(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee">pRecordSettings</a>-&gt;<a class="code" href="struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d">pFilePath</a>))</div>
+<div class="line"><a name="l16244"></a><span class="lineno">16244</span>&#160;    {</div>
+<div class="line"><a name="l16245"></a><span class="lineno">16245</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l16246"></a><span class="lineno">16246</span>&#160;        m_pRecorder = vma_new(<span class="keyword">this</span>, VmaRecorder)();</div>
+<div class="line"><a name="l16247"></a><span class="lineno">16247</span>&#160;        res = m_pRecorder-&gt;Init(*pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee">pRecordSettings</a>, m_UseMutex);</div>
+<div class="line"><a name="l16248"></a><span class="lineno">16248</span>&#160;        <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l16249"></a><span class="lineno">16249</span>&#160;        {</div>
+<div class="line"><a name="l16250"></a><span class="lineno">16250</span>&#160;            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l16251"></a><span class="lineno">16251</span>&#160;        }</div>
+<div class="line"><a name="l16252"></a><span class="lineno">16252</span>&#160;        m_pRecorder-&gt;WriteConfiguration(</div>
+<div class="line"><a name="l16253"></a><span class="lineno">16253</span>&#160;            m_PhysicalDeviceProperties,</div>
+<div class="line"><a name="l16254"></a><span class="lineno">16254</span>&#160;            m_MemProps,</div>
+<div class="line"><a name="l16255"></a><span class="lineno">16255</span>&#160;            m_VulkanApiVersion,</div>
+<div class="line"><a name="l16256"></a><span class="lineno">16256</span>&#160;            m_UseKhrDedicatedAllocation,</div>
+<div class="line"><a name="l16257"></a><span class="lineno">16257</span>&#160;            m_UseKhrBindMemory2,</div>
+<div class="line"><a name="l16258"></a><span class="lineno">16258</span>&#160;            m_UseExtMemoryBudget,</div>
+<div class="line"><a name="l16259"></a><span class="lineno">16259</span>&#160;            m_UseAmdDeviceCoherentMemory);</div>
+<div class="line"><a name="l16260"></a><span class="lineno">16260</span>&#160;        m_pRecorder-&gt;RecordCreateAllocator(GetCurrentFrameIndex());</div>
+<div class="line"><a name="l16261"></a><span class="lineno">16261</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l16262"></a><span class="lineno">16262</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VmaAllocatorCreateInfo::pRecordSettings used, but not supported due to VMA_RECORDING_ENABLED not defined to 1.&quot;</span>);</div>
+<div class="line"><a name="l16263"></a><span class="lineno">16263</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</div>
+<div class="line"><a name="l16264"></a><span class="lineno">16264</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16265"></a><span class="lineno">16265</span>&#160;    }</div>
+<div class="line"><a name="l16266"></a><span class="lineno">16266</span>&#160; </div>
+<div class="line"><a name="l16267"></a><span class="lineno">16267</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l16268"></a><span class="lineno">16268</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget)</div>
+<div class="line"><a name="l16269"></a><span class="lineno">16269</span>&#160;    {</div>
+<div class="line"><a name="l16270"></a><span class="lineno">16270</span>&#160;        UpdateVulkanBudget();</div>
+<div class="line"><a name="l16271"></a><span class="lineno">16271</span>&#160;    }</div>
+<div class="line"><a name="l16272"></a><span class="lineno">16272</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l16273"></a><span class="lineno">16273</span>&#160; </div>
+<div class="line"><a name="l16274"></a><span class="lineno">16274</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l16275"></a><span class="lineno">16275</span>&#160;}</div>
+<div class="line"><a name="l16276"></a><span class="lineno">16276</span>&#160; </div>
+<div class="line"><a name="l16277"></a><span class="lineno">16277</span>&#160;VmaAllocator_T::~VmaAllocator_T()</div>
+<div class="line"><a name="l16278"></a><span class="lineno">16278</span>&#160;{</div>
+<div class="line"><a name="l16279"></a><span class="lineno">16279</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l16280"></a><span class="lineno">16280</span>&#160;    <span class="keywordflow">if</span>(m_pRecorder != VMA_NULL)</div>
+<div class="line"><a name="l16281"></a><span class="lineno">16281</span>&#160;    {</div>
+<div class="line"><a name="l16282"></a><span class="lineno">16282</span>&#160;        m_pRecorder-&gt;RecordDestroyAllocator(GetCurrentFrameIndex());</div>
+<div class="line"><a name="l16283"></a><span class="lineno">16283</span>&#160;        vma_delete(<span class="keyword">this</span>, m_pRecorder);</div>
+<div class="line"><a name="l16284"></a><span class="lineno">16284</span>&#160;    }</div>
+<div class="line"><a name="l16285"></a><span class="lineno">16285</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16286"></a><span class="lineno">16286</span>&#160; </div>
+<div class="line"><a name="l16287"></a><span class="lineno">16287</span>&#160;    VMA_ASSERT(m_Pools.IsEmpty());</div>
+<div class="line"><a name="l16288"></a><span class="lineno">16288</span>&#160; </div>
+<div class="line"><a name="l16289"></a><span class="lineno">16289</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> memTypeIndex = GetMemoryTypeCount(); memTypeIndex--; )</div>
+<div class="line"><a name="l16290"></a><span class="lineno">16290</span>&#160;    {</div>
+<div class="line"><a name="l16291"></a><span class="lineno">16291</span>&#160;        <span class="keywordflow">if</span>(!m_DedicatedAllocations[memTypeIndex].IsEmpty())</div>
+<div class="line"><a name="l16292"></a><span class="lineno">16292</span>&#160;        {</div>
+<div class="line"><a name="l16293"></a><span class="lineno">16293</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Unfreed dedicated allocations found.&quot;</span>);</div>
+<div class="line"><a name="l16294"></a><span class="lineno">16294</span>&#160;        }</div>
+<div class="line"><a name="l16295"></a><span class="lineno">16295</span>&#160; </div>
+<div class="line"><a name="l16296"></a><span class="lineno">16296</span>&#160;        vma_delete(<span class="keyword">this</span>, m_pBlockVectors[memTypeIndex]);</div>
+<div class="line"><a name="l16297"></a><span class="lineno">16297</span>&#160;    }</div>
+<div class="line"><a name="l16298"></a><span class="lineno">16298</span>&#160;}</div>
+<div class="line"><a name="l16299"></a><span class="lineno">16299</span>&#160; </div>
+<div class="line"><a name="l16300"></a><span class="lineno">16300</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::ImportVulkanFunctions(<span class="keyword">const</span> <a class="code" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a>* pVulkanFunctions)</div>
+<div class="line"><a name="l16301"></a><span class="lineno">16301</span>&#160;{</div>
+<div class="line"><a name="l16302"></a><span class="lineno">16302</span>&#160;<span class="preprocessor">#if VMA_STATIC_VULKAN_FUNCTIONS == 1</span></div>
+<div class="line"><a name="l16303"></a><span class="lineno">16303</span>&#160;    ImportVulkanFunctions_Static();</div>
+<div class="line"><a name="l16304"></a><span class="lineno">16304</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16305"></a><span class="lineno">16305</span>&#160; </div>
+<div class="line"><a name="l16306"></a><span class="lineno">16306</span>&#160;    <span class="keywordflow">if</span>(pVulkanFunctions != VMA_NULL)</div>
+<div class="line"><a name="l16307"></a><span class="lineno">16307</span>&#160;    {</div>
+<div class="line"><a name="l16308"></a><span class="lineno">16308</span>&#160;        ImportVulkanFunctions_Custom(pVulkanFunctions);</div>
+<div class="line"><a name="l16309"></a><span class="lineno">16309</span>&#160;    }</div>
+<div class="line"><a name="l16310"></a><span class="lineno">16310</span>&#160; </div>
+<div class="line"><a name="l16311"></a><span class="lineno">16311</span>&#160;<span class="preprocessor">#if VMA_DYNAMIC_VULKAN_FUNCTIONS == 1</span></div>
+<div class="line"><a name="l16312"></a><span class="lineno">16312</span>&#160;    ImportVulkanFunctions_Dynamic();</div>
+<div class="line"><a name="l16313"></a><span class="lineno">16313</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16314"></a><span class="lineno">16314</span>&#160; </div>
+<div class="line"><a name="l16315"></a><span class="lineno">16315</span>&#160;    ValidateVulkanFunctions();</div>
+<div class="line"><a name="l16316"></a><span class="lineno">16316</span>&#160;}</div>
+<div class="line"><a name="l16317"></a><span class="lineno">16317</span>&#160; </div>
+<div class="line"><a name="l16318"></a><span class="lineno">16318</span>&#160;<span class="preprocessor">#if VMA_STATIC_VULKAN_FUNCTIONS == 1</span></div>
+<div class="line"><a name="l16319"></a><span class="lineno">16319</span>&#160; </div>
+<div class="line"><a name="l16320"></a><span class="lineno">16320</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::ImportVulkanFunctions_Static()</div>
+<div class="line"><a name="l16321"></a><span class="lineno">16321</span>&#160;{</div>
+<div class="line"><a name="l16322"></a><span class="lineno">16322</span>&#160;    <span class="comment">// Vulkan 1.0</span></div>
+<div class="line"><a name="l16323"></a><span class="lineno">16323</span>&#160;    m_VulkanFunctions.vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)vkGetPhysicalDeviceProperties;</div>
+<div class="line"><a name="l16324"></a><span class="lineno">16324</span>&#160;    m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)vkGetPhysicalDeviceMemoryProperties;</div>
+<div class="line"><a name="l16325"></a><span class="lineno">16325</span>&#160;    m_VulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkAllocateMemory;</div>
+<div class="line"><a name="l16326"></a><span class="lineno">16326</span>&#160;    m_VulkanFunctions.vkFreeMemory = (PFN_vkFreeMemory)vkFreeMemory;</div>
+<div class="line"><a name="l16327"></a><span class="lineno">16327</span>&#160;    m_VulkanFunctions.vkMapMemory = (PFN_vkMapMemory)vkMapMemory;</div>
+<div class="line"><a name="l16328"></a><span class="lineno">16328</span>&#160;    m_VulkanFunctions.vkUnmapMemory = (PFN_vkUnmapMemory)vkUnmapMemory;</div>
+<div class="line"><a name="l16329"></a><span class="lineno">16329</span>&#160;    m_VulkanFunctions.vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)vkFlushMappedMemoryRanges;</div>
+<div class="line"><a name="l16330"></a><span class="lineno">16330</span>&#160;    m_VulkanFunctions.vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)vkInvalidateMappedMemoryRanges;</div>
+<div class="line"><a name="l16331"></a><span class="lineno">16331</span>&#160;    m_VulkanFunctions.vkBindBufferMemory = (PFN_vkBindBufferMemory)vkBindBufferMemory;</div>
+<div class="line"><a name="l16332"></a><span class="lineno">16332</span>&#160;    m_VulkanFunctions.vkBindImageMemory = (PFN_vkBindImageMemory)vkBindImageMemory;</div>
+<div class="line"><a name="l16333"></a><span class="lineno">16333</span>&#160;    m_VulkanFunctions.vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)vkGetBufferMemoryRequirements;</div>
+<div class="line"><a name="l16334"></a><span class="lineno">16334</span>&#160;    m_VulkanFunctions.vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)vkGetImageMemoryRequirements;</div>
+<div class="line"><a name="l16335"></a><span class="lineno">16335</span>&#160;    m_VulkanFunctions.vkCreateBuffer = (PFN_vkCreateBuffer)vkCreateBuffer;</div>
+<div class="line"><a name="l16336"></a><span class="lineno">16336</span>&#160;    m_VulkanFunctions.vkDestroyBuffer = (PFN_vkDestroyBuffer)vkDestroyBuffer;</div>
+<div class="line"><a name="l16337"></a><span class="lineno">16337</span>&#160;    m_VulkanFunctions.vkCreateImage = (PFN_vkCreateImage)vkCreateImage;</div>
+<div class="line"><a name="l16338"></a><span class="lineno">16338</span>&#160;    m_VulkanFunctions.vkDestroyImage = (PFN_vkDestroyImage)vkDestroyImage;</div>
+<div class="line"><a name="l16339"></a><span class="lineno">16339</span>&#160;    m_VulkanFunctions.vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer)vkCmdCopyBuffer;</div>
+<div class="line"><a name="l16340"></a><span class="lineno">16340</span>&#160; </div>
+<div class="line"><a name="l16341"></a><span class="lineno">16341</span>&#160;    <span class="comment">// Vulkan 1.1</span></div>
+<div class="line"><a name="l16342"></a><span class="lineno">16342</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l16343"></a><span class="lineno">16343</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
+<div class="line"><a name="l16344"></a><span class="lineno">16344</span>&#160;    {</div>
+<div class="line"><a name="l16345"></a><span class="lineno">16345</span>&#160;        m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2)vkGetBufferMemoryRequirements2;</div>
+<div class="line"><a name="l16346"></a><span class="lineno">16346</span>&#160;        m_VulkanFunctions.vkGetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2)vkGetImageMemoryRequirements2;</div>
+<div class="line"><a name="l16347"></a><span class="lineno">16347</span>&#160;        m_VulkanFunctions.vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2)vkBindBufferMemory2;</div>
+<div class="line"><a name="l16348"></a><span class="lineno">16348</span>&#160;        m_VulkanFunctions.vkBindImageMemory2KHR = (PFN_vkBindImageMemory2)vkBindImageMemory2;</div>
+<div class="line"><a name="l16349"></a><span class="lineno">16349</span>&#160;        m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2)vkGetPhysicalDeviceMemoryProperties2;</div>
+<div class="line"><a name="l16350"></a><span class="lineno">16350</span>&#160;    }</div>
+<div class="line"><a name="l16351"></a><span class="lineno">16351</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16352"></a><span class="lineno">16352</span>&#160;}</div>
+<div class="line"><a name="l16353"></a><span class="lineno">16353</span>&#160; </div>
+<div class="line"><a name="l16354"></a><span class="lineno">16354</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATIC_VULKAN_FUNCTIONS == 1</span></div>
+<div class="line"><a name="l16355"></a><span class="lineno">16355</span>&#160; </div>
+<div class="line"><a name="l16356"></a><span class="lineno">16356</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::ImportVulkanFunctions_Custom(<span class="keyword">const</span> <a class="code" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a>* pVulkanFunctions)</div>
+<div class="line"><a name="l16357"></a><span class="lineno">16357</span>&#160;{</div>
+<div class="line"><a name="l16358"></a><span class="lineno">16358</span>&#160;    VMA_ASSERT(pVulkanFunctions != VMA_NULL);</div>
+<div class="line"><a name="l16359"></a><span class="lineno">16359</span>&#160; </div>
+<div class="line"><a name="l16360"></a><span class="lineno">16360</span>&#160;<span class="preprocessor">#define VMA_COPY_IF_NOT_NULL(funcName) \</span></div>
+<div class="line"><a name="l16361"></a><span class="lineno">16361</span>&#160;<span class="preprocessor">    if(pVulkanFunctions-&gt;funcName != VMA_NULL) m_VulkanFunctions.funcName = pVulkanFunctions-&gt;funcName;</span></div>
+<div class="line"><a name="l16362"></a><span class="lineno">16362</span>&#160; </div>
+<div class="line"><a name="l16363"></a><span class="lineno">16363</span>&#160;    VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceProperties);</div>
+<div class="line"><a name="l16364"></a><span class="lineno">16364</span>&#160;    VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceMemoryProperties);</div>
+<div class="line"><a name="l16365"></a><span class="lineno">16365</span>&#160;    VMA_COPY_IF_NOT_NULL(vkAllocateMemory);</div>
+<div class="line"><a name="l16366"></a><span class="lineno">16366</span>&#160;    VMA_COPY_IF_NOT_NULL(vkFreeMemory);</div>
+<div class="line"><a name="l16367"></a><span class="lineno">16367</span>&#160;    VMA_COPY_IF_NOT_NULL(vkMapMemory);</div>
+<div class="line"><a name="l16368"></a><span class="lineno">16368</span>&#160;    VMA_COPY_IF_NOT_NULL(vkUnmapMemory);</div>
+<div class="line"><a name="l16369"></a><span class="lineno">16369</span>&#160;    VMA_COPY_IF_NOT_NULL(vkFlushMappedMemoryRanges);</div>
+<div class="line"><a name="l16370"></a><span class="lineno">16370</span>&#160;    VMA_COPY_IF_NOT_NULL(vkInvalidateMappedMemoryRanges);</div>
+<div class="line"><a name="l16371"></a><span class="lineno">16371</span>&#160;    VMA_COPY_IF_NOT_NULL(vkBindBufferMemory);</div>
+<div class="line"><a name="l16372"></a><span class="lineno">16372</span>&#160;    VMA_COPY_IF_NOT_NULL(vkBindImageMemory);</div>
+<div class="line"><a name="l16373"></a><span class="lineno">16373</span>&#160;    VMA_COPY_IF_NOT_NULL(vkGetBufferMemoryRequirements);</div>
+<div class="line"><a name="l16374"></a><span class="lineno">16374</span>&#160;    VMA_COPY_IF_NOT_NULL(vkGetImageMemoryRequirements);</div>
+<div class="line"><a name="l16375"></a><span class="lineno">16375</span>&#160;    VMA_COPY_IF_NOT_NULL(vkCreateBuffer);</div>
+<div class="line"><a name="l16376"></a><span class="lineno">16376</span>&#160;    VMA_COPY_IF_NOT_NULL(vkDestroyBuffer);</div>
+<div class="line"><a name="l16377"></a><span class="lineno">16377</span>&#160;    VMA_COPY_IF_NOT_NULL(vkCreateImage);</div>
+<div class="line"><a name="l16378"></a><span class="lineno">16378</span>&#160;    VMA_COPY_IF_NOT_NULL(vkDestroyImage);</div>
+<div class="line"><a name="l16379"></a><span class="lineno">16379</span>&#160;    VMA_COPY_IF_NOT_NULL(vkCmdCopyBuffer);</div>
+<div class="line"><a name="l16380"></a><span class="lineno">16380</span>&#160; </div>
+<div class="line"><a name="l16381"></a><span class="lineno">16381</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l16382"></a><span class="lineno">16382</span>&#160;    VMA_COPY_IF_NOT_NULL(vkGetBufferMemoryRequirements2KHR);</div>
+<div class="line"><a name="l16383"></a><span class="lineno">16383</span>&#160;    VMA_COPY_IF_NOT_NULL(vkGetImageMemoryRequirements2KHR);</div>
+<div class="line"><a name="l16384"></a><span class="lineno">16384</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16385"></a><span class="lineno">16385</span>&#160; </div>
+<div class="line"><a name="l16386"></a><span class="lineno">16386</span>&#160;<span class="preprocessor">#if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l16387"></a><span class="lineno">16387</span>&#160;    VMA_COPY_IF_NOT_NULL(vkBindBufferMemory2KHR);</div>
+<div class="line"><a name="l16388"></a><span class="lineno">16388</span>&#160;    VMA_COPY_IF_NOT_NULL(vkBindImageMemory2KHR);</div>
+<div class="line"><a name="l16389"></a><span class="lineno">16389</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16390"></a><span class="lineno">16390</span>&#160; </div>
+<div class="line"><a name="l16391"></a><span class="lineno">16391</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l16392"></a><span class="lineno">16392</span>&#160;    VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceMemoryProperties2KHR);</div>
+<div class="line"><a name="l16393"></a><span class="lineno">16393</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16394"></a><span class="lineno">16394</span>&#160; </div>
+<div class="line"><a name="l16395"></a><span class="lineno">16395</span>&#160;<span class="preprocessor">#undef VMA_COPY_IF_NOT_NULL</span></div>
+<div class="line"><a name="l16396"></a><span class="lineno">16396</span>&#160;}</div>
+<div class="line"><a name="l16397"></a><span class="lineno">16397</span>&#160; </div>
+<div class="line"><a name="l16398"></a><span class="lineno">16398</span>&#160;<span class="preprocessor">#if VMA_DYNAMIC_VULKAN_FUNCTIONS == 1</span></div>
+<div class="line"><a name="l16399"></a><span class="lineno">16399</span>&#160; </div>
+<div class="line"><a name="l16400"></a><span class="lineno">16400</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::ImportVulkanFunctions_Dynamic()</div>
+<div class="line"><a name="l16401"></a><span class="lineno">16401</span>&#160;{</div>
+<div class="line"><a name="l16402"></a><span class="lineno">16402</span>&#160;<span class="preprocessor">#define VMA_FETCH_INSTANCE_FUNC(memberName, functionPointerType, functionNameString) \</span></div>
+<div class="line"><a name="l16403"></a><span class="lineno">16403</span>&#160;<span class="preprocessor">    if(m_VulkanFunctions.memberName == VMA_NULL) \</span></div>
+<div class="line"><a name="l16404"></a><span class="lineno">16404</span>&#160;<span class="preprocessor">        m_VulkanFunctions.memberName = \</span></div>
+<div class="line"><a name="l16405"></a><span class="lineno">16405</span>&#160;<span class="preprocessor">            (functionPointerType)vkGetInstanceProcAddr(m_hInstance, functionNameString);</span></div>
+<div class="line"><a name="l16406"></a><span class="lineno">16406</span>&#160;<span class="preprocessor">#define VMA_FETCH_DEVICE_FUNC(memberName, functionPointerType, functionNameString) \</span></div>
+<div class="line"><a name="l16407"></a><span class="lineno">16407</span>&#160;<span class="preprocessor">    if(m_VulkanFunctions.memberName == VMA_NULL) \</span></div>
+<div class="line"><a name="l16408"></a><span class="lineno">16408</span>&#160;<span class="preprocessor">        m_VulkanFunctions.memberName = \</span></div>
+<div class="line"><a name="l16409"></a><span class="lineno">16409</span>&#160;<span class="preprocessor">            (functionPointerType)vkGetDeviceProcAddr(m_hDevice, functionNameString);</span></div>
+<div class="line"><a name="l16410"></a><span class="lineno">16410</span>&#160; </div>
+<div class="line"><a name="l16411"></a><span class="lineno">16411</span>&#160;    VMA_FETCH_INSTANCE_FUNC(vkGetPhysicalDeviceProperties, PFN_vkGetPhysicalDeviceProperties, <span class="stringliteral">&quot;vkGetPhysicalDeviceProperties&quot;</span>);</div>
+<div class="line"><a name="l16412"></a><span class="lineno">16412</span>&#160;    VMA_FETCH_INSTANCE_FUNC(vkGetPhysicalDeviceMemoryProperties, PFN_vkGetPhysicalDeviceMemoryProperties, <span class="stringliteral">&quot;vkGetPhysicalDeviceMemoryProperties&quot;</span>);</div>
+<div class="line"><a name="l16413"></a><span class="lineno">16413</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkAllocateMemory, PFN_vkAllocateMemory, <span class="stringliteral">&quot;vkAllocateMemory&quot;</span>);</div>
+<div class="line"><a name="l16414"></a><span class="lineno">16414</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkFreeMemory, PFN_vkFreeMemory, <span class="stringliteral">&quot;vkFreeMemory&quot;</span>);</div>
+<div class="line"><a name="l16415"></a><span class="lineno">16415</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkMapMemory, PFN_vkMapMemory, <span class="stringliteral">&quot;vkMapMemory&quot;</span>);</div>
+<div class="line"><a name="l16416"></a><span class="lineno">16416</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkUnmapMemory, PFN_vkUnmapMemory, <span class="stringliteral">&quot;vkUnmapMemory&quot;</span>);</div>
+<div class="line"><a name="l16417"></a><span class="lineno">16417</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkFlushMappedMemoryRanges, PFN_vkFlushMappedMemoryRanges, <span class="stringliteral">&quot;vkFlushMappedMemoryRanges&quot;</span>);</div>
+<div class="line"><a name="l16418"></a><span class="lineno">16418</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkInvalidateMappedMemoryRanges, PFN_vkInvalidateMappedMemoryRanges, <span class="stringliteral">&quot;vkInvalidateMappedMemoryRanges&quot;</span>);</div>
+<div class="line"><a name="l16419"></a><span class="lineno">16419</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkBindBufferMemory, PFN_vkBindBufferMemory, <span class="stringliteral">&quot;vkBindBufferMemory&quot;</span>);</div>
+<div class="line"><a name="l16420"></a><span class="lineno">16420</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkBindImageMemory, PFN_vkBindImageMemory, <span class="stringliteral">&quot;vkBindImageMemory&quot;</span>);</div>
+<div class="line"><a name="l16421"></a><span class="lineno">16421</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkGetBufferMemoryRequirements, PFN_vkGetBufferMemoryRequirements, <span class="stringliteral">&quot;vkGetBufferMemoryRequirements&quot;</span>);</div>
+<div class="line"><a name="l16422"></a><span class="lineno">16422</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkGetImageMemoryRequirements, PFN_vkGetImageMemoryRequirements, <span class="stringliteral">&quot;vkGetImageMemoryRequirements&quot;</span>);</div>
+<div class="line"><a name="l16423"></a><span class="lineno">16423</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkCreateBuffer, PFN_vkCreateBuffer, <span class="stringliteral">&quot;vkCreateBuffer&quot;</span>);</div>
+<div class="line"><a name="l16424"></a><span class="lineno">16424</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkDestroyBuffer, PFN_vkDestroyBuffer, <span class="stringliteral">&quot;vkDestroyBuffer&quot;</span>);</div>
+<div class="line"><a name="l16425"></a><span class="lineno">16425</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkCreateImage, PFN_vkCreateImage, <span class="stringliteral">&quot;vkCreateImage&quot;</span>);</div>
+<div class="line"><a name="l16426"></a><span class="lineno">16426</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkDestroyImage, PFN_vkDestroyImage, <span class="stringliteral">&quot;vkDestroyImage&quot;</span>);</div>
+<div class="line"><a name="l16427"></a><span class="lineno">16427</span>&#160;    VMA_FETCH_DEVICE_FUNC(vkCmdCopyBuffer, PFN_vkCmdCopyBuffer, <span class="stringliteral">&quot;vkCmdCopyBuffer&quot;</span>);</div>
+<div class="line"><a name="l16428"></a><span class="lineno">16428</span>&#160; </div>
+<div class="line"><a name="l16429"></a><span class="lineno">16429</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l16430"></a><span class="lineno">16430</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
+<div class="line"><a name="l16431"></a><span class="lineno">16431</span>&#160;    {</div>
+<div class="line"><a name="l16432"></a><span class="lineno">16432</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkGetBufferMemoryRequirements2KHR, PFN_vkGetBufferMemoryRequirements2, <span class="stringliteral">&quot;vkGetBufferMemoryRequirements2&quot;</span>);</div>
+<div class="line"><a name="l16433"></a><span class="lineno">16433</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkGetImageMemoryRequirements2KHR, PFN_vkGetImageMemoryRequirements2, <span class="stringliteral">&quot;vkGetImageMemoryRequirements2&quot;</span>);</div>
+<div class="line"><a name="l16434"></a><span class="lineno">16434</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkBindBufferMemory2KHR, PFN_vkBindBufferMemory2, <span class="stringliteral">&quot;vkBindBufferMemory2&quot;</span>);</div>
+<div class="line"><a name="l16435"></a><span class="lineno">16435</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkBindImageMemory2KHR, PFN_vkBindImageMemory2, <span class="stringliteral">&quot;vkBindImageMemory2&quot;</span>);</div>
+<div class="line"><a name="l16436"></a><span class="lineno">16436</span>&#160;        VMA_FETCH_INSTANCE_FUNC(vkGetPhysicalDeviceMemoryProperties2KHR, PFN_vkGetPhysicalDeviceMemoryProperties2, <span class="stringliteral">&quot;vkGetPhysicalDeviceMemoryProperties2&quot;</span>);</div>
+<div class="line"><a name="l16437"></a><span class="lineno">16437</span>&#160;    }</div>
+<div class="line"><a name="l16438"></a><span class="lineno">16438</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16439"></a><span class="lineno">16439</span>&#160; </div>
+<div class="line"><a name="l16440"></a><span class="lineno">16440</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION</span></div>
+<div class="line"><a name="l16441"></a><span class="lineno">16441</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation)</div>
+<div class="line"><a name="l16442"></a><span class="lineno">16442</span>&#160;    {</div>
+<div class="line"><a name="l16443"></a><span class="lineno">16443</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkGetBufferMemoryRequirements2KHR, PFN_vkGetBufferMemoryRequirements2KHR, <span class="stringliteral">&quot;vkGetBufferMemoryRequirements2KHR&quot;</span>);</div>
+<div class="line"><a name="l16444"></a><span class="lineno">16444</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkGetImageMemoryRequirements2KHR, PFN_vkGetImageMemoryRequirements2KHR, <span class="stringliteral">&quot;vkGetImageMemoryRequirements2KHR&quot;</span>);</div>
+<div class="line"><a name="l16445"></a><span class="lineno">16445</span>&#160;    }</div>
+<div class="line"><a name="l16446"></a><span class="lineno">16446</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16447"></a><span class="lineno">16447</span>&#160; </div>
+<div class="line"><a name="l16448"></a><span class="lineno">16448</span>&#160;<span class="preprocessor">#if VMA_BIND_MEMORY2</span></div>
+<div class="line"><a name="l16449"></a><span class="lineno">16449</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrBindMemory2)</div>
+<div class="line"><a name="l16450"></a><span class="lineno">16450</span>&#160;    {</div>
+<div class="line"><a name="l16451"></a><span class="lineno">16451</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkBindBufferMemory2KHR, PFN_vkBindBufferMemory2KHR, <span class="stringliteral">&quot;vkBindBufferMemory2KHR&quot;</span>);</div>
+<div class="line"><a name="l16452"></a><span class="lineno">16452</span>&#160;        VMA_FETCH_DEVICE_FUNC(vkBindImageMemory2KHR, PFN_vkBindImageMemory2KHR, <span class="stringliteral">&quot;vkBindImageMemory2KHR&quot;</span>);</div>
+<div class="line"><a name="l16453"></a><span class="lineno">16453</span>&#160;    }</div>
+<div class="line"><a name="l16454"></a><span class="lineno">16454</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_BIND_MEMORY2</span></div>
+<div class="line"><a name="l16455"></a><span class="lineno">16455</span>&#160; </div>
+<div class="line"><a name="l16456"></a><span class="lineno">16456</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l16457"></a><span class="lineno">16457</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget)</div>
+<div class="line"><a name="l16458"></a><span class="lineno">16458</span>&#160;    {</div>
+<div class="line"><a name="l16459"></a><span class="lineno">16459</span>&#160;        VMA_FETCH_INSTANCE_FUNC(vkGetPhysicalDeviceMemoryProperties2KHR, PFN_vkGetPhysicalDeviceMemoryProperties2KHR, <span class="stringliteral">&quot;vkGetPhysicalDeviceMemoryProperties2KHR&quot;</span>);</div>
+<div class="line"><a name="l16460"></a><span class="lineno">16460</span>&#160;    }</div>
+<div class="line"><a name="l16461"></a><span class="lineno">16461</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l16462"></a><span class="lineno">16462</span>&#160; </div>
+<div class="line"><a name="l16463"></a><span class="lineno">16463</span>&#160;<span class="preprocessor">#undef VMA_FETCH_DEVICE_FUNC</span></div>
+<div class="line"><a name="l16464"></a><span class="lineno">16464</span>&#160;<span class="preprocessor">#undef VMA_FETCH_INSTANCE_FUNC</span></div>
+<div class="line"><a name="l16465"></a><span class="lineno">16465</span>&#160;}</div>
+<div class="line"><a name="l16466"></a><span class="lineno">16466</span>&#160; </div>
+<div class="line"><a name="l16467"></a><span class="lineno">16467</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_DYNAMIC_VULKAN_FUNCTIONS == 1</span></div>
+<div class="line"><a name="l16468"></a><span class="lineno">16468</span>&#160; </div>
+<div class="line"><a name="l16469"></a><span class="lineno">16469</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::ValidateVulkanFunctions()</div>
+<div class="line"><a name="l16470"></a><span class="lineno">16470</span>&#160;{</div>
+<div class="line"><a name="l16471"></a><span class="lineno">16471</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceProperties != VMA_NULL);</div>
+<div class="line"><a name="l16472"></a><span class="lineno">16472</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties != VMA_NULL);</div>
+<div class="line"><a name="l16473"></a><span class="lineno">16473</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkAllocateMemory != VMA_NULL);</div>
+<div class="line"><a name="l16474"></a><span class="lineno">16474</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkFreeMemory != VMA_NULL);</div>
+<div class="line"><a name="l16475"></a><span class="lineno">16475</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkMapMemory != VMA_NULL);</div>
+<div class="line"><a name="l16476"></a><span class="lineno">16476</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkUnmapMemory != VMA_NULL);</div>
+<div class="line"><a name="l16477"></a><span class="lineno">16477</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkFlushMappedMemoryRanges != VMA_NULL);</div>
+<div class="line"><a name="l16478"></a><span class="lineno">16478</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkInvalidateMappedMemoryRanges != VMA_NULL);</div>
+<div class="line"><a name="l16479"></a><span class="lineno">16479</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkBindBufferMemory != VMA_NULL);</div>
+<div class="line"><a name="l16480"></a><span class="lineno">16480</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkBindImageMemory != VMA_NULL);</div>
+<div class="line"><a name="l16481"></a><span class="lineno">16481</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetBufferMemoryRequirements != VMA_NULL);</div>
+<div class="line"><a name="l16482"></a><span class="lineno">16482</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetImageMemoryRequirements != VMA_NULL);</div>
+<div class="line"><a name="l16483"></a><span class="lineno">16483</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkCreateBuffer != VMA_NULL);</div>
+<div class="line"><a name="l16484"></a><span class="lineno">16484</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkDestroyBuffer != VMA_NULL);</div>
+<div class="line"><a name="l16485"></a><span class="lineno">16485</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkCreateImage != VMA_NULL);</div>
+<div class="line"><a name="l16486"></a><span class="lineno">16486</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkDestroyImage != VMA_NULL);</div>
+<div class="line"><a name="l16487"></a><span class="lineno">16487</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkCmdCopyBuffer != VMA_NULL);</div>
+<div class="line"><a name="l16488"></a><span class="lineno">16488</span>&#160; </div>
+<div class="line"><a name="l16489"></a><span class="lineno">16489</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l16490"></a><span class="lineno">16490</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0) || m_UseKhrDedicatedAllocation)</div>
+<div class="line"><a name="l16491"></a><span class="lineno">16491</span>&#160;    {</div>
+<div class="line"><a name="l16492"></a><span class="lineno">16492</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR != VMA_NULL);</div>
+<div class="line"><a name="l16493"></a><span class="lineno">16493</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkGetImageMemoryRequirements2KHR != VMA_NULL);</div>
+<div class="line"><a name="l16494"></a><span class="lineno">16494</span>&#160;    }</div>
+<div class="line"><a name="l16495"></a><span class="lineno">16495</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16496"></a><span class="lineno">16496</span>&#160; </div>
+<div class="line"><a name="l16497"></a><span class="lineno">16497</span>&#160;<span class="preprocessor">#if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l16498"></a><span class="lineno">16498</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0) || m_UseKhrBindMemory2)</div>
+<div class="line"><a name="l16499"></a><span class="lineno">16499</span>&#160;    {</div>
+<div class="line"><a name="l16500"></a><span class="lineno">16500</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkBindBufferMemory2KHR != VMA_NULL);</div>
+<div class="line"><a name="l16501"></a><span class="lineno">16501</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkBindImageMemory2KHR != VMA_NULL);</div>
+<div class="line"><a name="l16502"></a><span class="lineno">16502</span>&#160;    }</div>
+<div class="line"><a name="l16503"></a><span class="lineno">16503</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16504"></a><span class="lineno">16504</span>&#160; </div>
+<div class="line"><a name="l16505"></a><span class="lineno">16505</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l16506"></a><span class="lineno">16506</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
+<div class="line"><a name="l16507"></a><span class="lineno">16507</span>&#160;    {</div>
+<div class="line"><a name="l16508"></a><span class="lineno">16508</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR != VMA_NULL);</div>
+<div class="line"><a name="l16509"></a><span class="lineno">16509</span>&#160;    }</div>
+<div class="line"><a name="l16510"></a><span class="lineno">16510</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16511"></a><span class="lineno">16511</span>&#160;}</div>
+<div class="line"><a name="l16512"></a><span class="lineno">16512</span>&#160; </div>
+<div class="line"><a name="l16513"></a><span class="lineno">16513</span>&#160;VkDeviceSize VmaAllocator_T::CalcPreferredBlockSize(uint32_t memTypeIndex)</div>
+<div class="line"><a name="l16514"></a><span class="lineno">16514</span>&#160;{</div>
+<div class="line"><a name="l16515"></a><span class="lineno">16515</span>&#160;    <span class="keyword">const</span> uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
+<div class="line"><a name="l16516"></a><span class="lineno">16516</span>&#160;    <span class="keyword">const</span> VkDeviceSize heapSize = m_MemProps.memoryHeaps[heapIndex].size;</div>
+<div class="line"><a name="l16517"></a><span class="lineno">16517</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> isSmallHeap = heapSize &lt;= VMA_SMALL_HEAP_MAX_SIZE;</div>
+<div class="line"><a name="l16518"></a><span class="lineno">16518</span>&#160;    <span class="keywordflow">return</span> VmaAlignUp(isSmallHeap ? (heapSize / 8) : m_PreferredLargeHeapBlockSize, (VkDeviceSize)32);</div>
+<div class="line"><a name="l16519"></a><span class="lineno">16519</span>&#160;}</div>
+<div class="line"><a name="l16520"></a><span class="lineno">16520</span>&#160; </div>
+<div class="line"><a name="l16521"></a><span class="lineno">16521</span>&#160;VkResult VmaAllocator_T::AllocateMemoryOfType(</div>
+<div class="line"><a name="l16522"></a><span class="lineno">16522</span>&#160;    VkDeviceSize size,</div>
+<div class="line"><a name="l16523"></a><span class="lineno">16523</span>&#160;    VkDeviceSize alignment,</div>
+<div class="line"><a name="l16524"></a><span class="lineno">16524</span>&#160;    <span class="keywordtype">bool</span> dedicatedAllocation,</div>
+<div class="line"><a name="l16525"></a><span class="lineno">16525</span>&#160;    VkBuffer dedicatedBuffer,</div>
+<div class="line"><a name="l16526"></a><span class="lineno">16526</span>&#160;    VkBufferUsageFlags dedicatedBufferUsage,</div>
+<div class="line"><a name="l16527"></a><span class="lineno">16527</span>&#160;    VkImage dedicatedImage,</div>
+<div class="line"><a name="l16528"></a><span class="lineno">16528</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
+<div class="line"><a name="l16529"></a><span class="lineno">16529</span>&#160;    uint32_t memTypeIndex,</div>
+<div class="line"><a name="l16530"></a><span class="lineno">16530</span>&#160;    VmaSuballocationType suballocType,</div>
+<div class="line"><a name="l16531"></a><span class="lineno">16531</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l16532"></a><span class="lineno">16532</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
+<div class="line"><a name="l16533"></a><span class="lineno">16533</span>&#160;{</div>
+<div class="line"><a name="l16534"></a><span class="lineno">16534</span>&#160;    VMA_ASSERT(pAllocations != VMA_NULL);</div>
+<div class="line"><a name="l16535"></a><span class="lineno">16535</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;  AllocateMemory: MemoryTypeIndex=%u, AllocationCount=%zu, Size=%llu&quot;</span>, memTypeIndex, allocationCount, size);</div>
+<div class="line"><a name="l16536"></a><span class="lineno">16536</span>&#160; </div>
+<div class="line"><a name="l16537"></a><span class="lineno">16537</span>&#160;    <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> finalCreateInfo = createInfo;</div>
+<div class="line"><a name="l16538"></a><span class="lineno">16538</span>&#160; </div>
+<div class="line"><a name="l16539"></a><span class="lineno">16539</span>&#160;    <span class="comment">// If memory type is not HOST_VISIBLE, disable MAPPED.</span></div>
+<div class="line"><a name="l16540"></a><span class="lineno">16540</span>&#160;    <span class="keywordflow">if</span>((finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0 &amp;&amp;</div>
+<div class="line"><a name="l16541"></a><span class="lineno">16541</span>&#160;        (m_MemProps.memoryTypes[memTypeIndex].propertyFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)</div>
+<div class="line"><a name="l16542"></a><span class="lineno">16542</span>&#160;    {</div>
+<div class="line"><a name="l16543"></a><span class="lineno">16543</span>&#160;        finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp;= ~<a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>;</div>
+<div class="line"><a name="l16544"></a><span class="lineno">16544</span>&#160;    }</div>
+<div class="line"><a name="l16545"></a><span class="lineno">16545</span>&#160;    <span class="comment">// If memory is lazily allocated, it should be always dedicated.</span></div>
+<div class="line"><a name="l16546"></a><span class="lineno">16546</span>&#160;    <span class="keywordflow">if</span>(finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> == <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED</a>)</div>
+<div class="line"><a name="l16547"></a><span class="lineno">16547</span>&#160;    {</div>
+<div class="line"><a name="l16548"></a><span class="lineno">16548</span>&#160;        finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> |= <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>;</div>
+<div class="line"><a name="l16549"></a><span class="lineno">16549</span>&#160;    }</div>
+<div class="line"><a name="l16550"></a><span class="lineno">16550</span>&#160; </div>
+<div class="line"><a name="l16551"></a><span class="lineno">16551</span>&#160;    VmaBlockVector* <span class="keyword">const</span> blockVector = m_pBlockVectors[memTypeIndex];</div>
+<div class="line"><a name="l16552"></a><span class="lineno">16552</span>&#160;    VMA_ASSERT(blockVector);</div>
+<div class="line"><a name="l16553"></a><span class="lineno">16553</span>&#160; </div>
+<div class="line"><a name="l16554"></a><span class="lineno">16554</span>&#160;    <span class="keyword">const</span> VkDeviceSize preferredBlockSize = blockVector-&gt;GetPreferredBlockSize();</div>
+<div class="line"><a name="l16555"></a><span class="lineno">16555</span>&#160;    <span class="keywordtype">bool</span> preferDedicatedMemory =</div>
+<div class="line"><a name="l16556"></a><span class="lineno">16556</span>&#160;        VMA_DEBUG_ALWAYS_DEDICATED_MEMORY ||</div>
+<div class="line"><a name="l16557"></a><span class="lineno">16557</span>&#160;        dedicatedAllocation ||</div>
+<div class="line"><a name="l16558"></a><span class="lineno">16558</span>&#160;        <span class="comment">// Heuristics: Allocate dedicated memory if requested size if greater than half of preferred block size.</span></div>
+<div class="line"><a name="l16559"></a><span class="lineno">16559</span>&#160;        size &gt; preferredBlockSize / 2;</div>
+<div class="line"><a name="l16560"></a><span class="lineno">16560</span>&#160; </div>
+<div class="line"><a name="l16561"></a><span class="lineno">16561</span>&#160;    <span class="keywordflow">if</span>(preferDedicatedMemory &amp;&amp;</div>
+<div class="line"><a name="l16562"></a><span class="lineno">16562</span>&#160;        (finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a>) == 0 &amp;&amp;</div>
+<div class="line"><a name="l16563"></a><span class="lineno">16563</span>&#160;        finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a> == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l16564"></a><span class="lineno">16564</span>&#160;    {</div>
+<div class="line"><a name="l16565"></a><span class="lineno">16565</span>&#160;        finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> |= <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>;</div>
+<div class="line"><a name="l16566"></a><span class="lineno">16566</span>&#160;    }</div>
+<div class="line"><a name="l16567"></a><span class="lineno">16567</span>&#160; </div>
+<div class="line"><a name="l16568"></a><span class="lineno">16568</span>&#160;    <span class="keywordflow">if</span>((finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>) != 0)</div>
+<div class="line"><a name="l16569"></a><span class="lineno">16569</span>&#160;    {</div>
+<div class="line"><a name="l16570"></a><span class="lineno">16570</span>&#160;        <span class="keywordflow">if</span>((finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a>) != 0)</div>
+<div class="line"><a name="l16571"></a><span class="lineno">16571</span>&#160;        {</div>
+<div class="line"><a name="l16572"></a><span class="lineno">16572</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l16573"></a><span class="lineno">16573</span>&#160;        }</div>
+<div class="line"><a name="l16574"></a><span class="lineno">16574</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l16575"></a><span class="lineno">16575</span>&#160;        {</div>
+<div class="line"><a name="l16576"></a><span class="lineno">16576</span>&#160;            <span class="keywordflow">return</span> AllocateDedicatedMemory(</div>
+<div class="line"><a name="l16577"></a><span class="lineno">16577</span>&#160;                size,</div>
+<div class="line"><a name="l16578"></a><span class="lineno">16578</span>&#160;                suballocType,</div>
+<div class="line"><a name="l16579"></a><span class="lineno">16579</span>&#160;                memTypeIndex,</div>
+<div class="line"><a name="l16580"></a><span class="lineno">16580</span>&#160;                (finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a>) != 0,</div>
+<div class="line"><a name="l16581"></a><span class="lineno">16581</span>&#160;                (finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0,</div>
+<div class="line"><a name="l16582"></a><span class="lineno">16582</span>&#160;                (finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a>) != 0,</div>
+<div class="line"><a name="l16583"></a><span class="lineno">16583</span>&#160;                finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
+<div class="line"><a name="l16584"></a><span class="lineno">16584</span>&#160;                finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7">priority</a>,</div>
+<div class="line"><a name="l16585"></a><span class="lineno">16585</span>&#160;                dedicatedBuffer,</div>
+<div class="line"><a name="l16586"></a><span class="lineno">16586</span>&#160;                dedicatedBufferUsage,</div>
+<div class="line"><a name="l16587"></a><span class="lineno">16587</span>&#160;                dedicatedImage,</div>
+<div class="line"><a name="l16588"></a><span class="lineno">16588</span>&#160;                allocationCount,</div>
+<div class="line"><a name="l16589"></a><span class="lineno">16589</span>&#160;                pAllocations);</div>
+<div class="line"><a name="l16590"></a><span class="lineno">16590</span>&#160;        }</div>
+<div class="line"><a name="l16591"></a><span class="lineno">16591</span>&#160;    }</div>
+<div class="line"><a name="l16592"></a><span class="lineno">16592</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l16593"></a><span class="lineno">16593</span>&#160;    {</div>
+<div class="line"><a name="l16594"></a><span class="lineno">16594</span>&#160;        VkResult res = blockVector-&gt;Allocate(</div>
+<div class="line"><a name="l16595"></a><span class="lineno">16595</span>&#160;            m_CurrentFrameIndex.load(),</div>
+<div class="line"><a name="l16596"></a><span class="lineno">16596</span>&#160;            size,</div>
+<div class="line"><a name="l16597"></a><span class="lineno">16597</span>&#160;            alignment,</div>
+<div class="line"><a name="l16598"></a><span class="lineno">16598</span>&#160;            finalCreateInfo,</div>
+<div class="line"><a name="l16599"></a><span class="lineno">16599</span>&#160;            suballocType,</div>
+<div class="line"><a name="l16600"></a><span class="lineno">16600</span>&#160;            allocationCount,</div>
+<div class="line"><a name="l16601"></a><span class="lineno">16601</span>&#160;            pAllocations);</div>
+<div class="line"><a name="l16602"></a><span class="lineno">16602</span>&#160;        <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l16603"></a><span class="lineno">16603</span>&#160;        {</div>
+<div class="line"><a name="l16604"></a><span class="lineno">16604</span>&#160;            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l16605"></a><span class="lineno">16605</span>&#160;        }</div>
+<div class="line"><a name="l16606"></a><span class="lineno">16606</span>&#160; </div>
+<div class="line"><a name="l16607"></a><span class="lineno">16607</span>&#160;        <span class="comment">// 5. Try dedicated memory.</span></div>
+<div class="line"><a name="l16608"></a><span class="lineno">16608</span>&#160;        <span class="keywordflow">if</span>((finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a>) != 0)</div>
+<div class="line"><a name="l16609"></a><span class="lineno">16609</span>&#160;        {</div>
+<div class="line"><a name="l16610"></a><span class="lineno">16610</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l16611"></a><span class="lineno">16611</span>&#160;        }</div>
+<div class="line"><a name="l16612"></a><span class="lineno">16612</span>&#160; </div>
+<div class="line"><a name="l16613"></a><span class="lineno">16613</span>&#160;        <span class="comment">// Protection against creating each allocation as dedicated when we reach or exceed heap size/budget,</span></div>
+<div class="line"><a name="l16614"></a><span class="lineno">16614</span>&#160;        <span class="comment">// which can quickly deplete maxMemoryAllocationCount: Don&#39;t try dedicated allocations when above</span></div>
+<div class="line"><a name="l16615"></a><span class="lineno">16615</span>&#160;        <span class="comment">// 3/4 of the maximum allocation count.</span></div>
+<div class="line"><a name="l16616"></a><span class="lineno">16616</span>&#160;        <span class="keywordflow">if</span>(m_DeviceMemoryCount.load() &gt; m_PhysicalDeviceProperties.limits.maxMemoryAllocationCount * 3 / 4)</div>
+<div class="line"><a name="l16617"></a><span class="lineno">16617</span>&#160;        {</div>
+<div class="line"><a name="l16618"></a><span class="lineno">16618</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l16619"></a><span class="lineno">16619</span>&#160;        }</div>
+<div class="line"><a name="l16620"></a><span class="lineno">16620</span>&#160; </div>
+<div class="line"><a name="l16621"></a><span class="lineno">16621</span>&#160;        res = AllocateDedicatedMemory(</div>
+<div class="line"><a name="l16622"></a><span class="lineno">16622</span>&#160;            size,</div>
+<div class="line"><a name="l16623"></a><span class="lineno">16623</span>&#160;            suballocType,</div>
+<div class="line"><a name="l16624"></a><span class="lineno">16624</span>&#160;            memTypeIndex,</div>
+<div class="line"><a name="l16625"></a><span class="lineno">16625</span>&#160;            (finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a>) != 0,</div>
+<div class="line"><a name="l16626"></a><span class="lineno">16626</span>&#160;            (finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0,</div>
+<div class="line"><a name="l16627"></a><span class="lineno">16627</span>&#160;            (finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a>) != 0,</div>
+<div class="line"><a name="l16628"></a><span class="lineno">16628</span>&#160;            finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
+<div class="line"><a name="l16629"></a><span class="lineno">16629</span>&#160;            finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7">priority</a>,</div>
+<div class="line"><a name="l16630"></a><span class="lineno">16630</span>&#160;            dedicatedBuffer,</div>
+<div class="line"><a name="l16631"></a><span class="lineno">16631</span>&#160;            dedicatedBufferUsage,</div>
+<div class="line"><a name="l16632"></a><span class="lineno">16632</span>&#160;            dedicatedImage,</div>
+<div class="line"><a name="l16633"></a><span class="lineno">16633</span>&#160;            allocationCount,</div>
+<div class="line"><a name="l16634"></a><span class="lineno">16634</span>&#160;            pAllocations);</div>
+<div class="line"><a name="l16635"></a><span class="lineno">16635</span>&#160;        <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l16636"></a><span class="lineno">16636</span>&#160;        {</div>
+<div class="line"><a name="l16637"></a><span class="lineno">16637</span>&#160;            <span class="comment">// Succeeded: AllocateDedicatedMemory function already filld pMemory, nothing more to do here.</span></div>
+<div class="line"><a name="l16638"></a><span class="lineno">16638</span>&#160;            VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Allocated as DedicatedMemory&quot;</span>);</div>
+<div class="line"><a name="l16639"></a><span class="lineno">16639</span>&#160;            <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l16640"></a><span class="lineno">16640</span>&#160;        }</div>
+<div class="line"><a name="l16641"></a><span class="lineno">16641</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l16642"></a><span class="lineno">16642</span>&#160;        {</div>
+<div class="line"><a name="l16643"></a><span class="lineno">16643</span>&#160;            <span class="comment">// Everything failed: Return error code.</span></div>
+<div class="line"><a name="l16644"></a><span class="lineno">16644</span>&#160;            VMA_DEBUG_LOG(<span class="stringliteral">&quot;    vkAllocateMemory FAILED&quot;</span>);</div>
+<div class="line"><a name="l16645"></a><span class="lineno">16645</span>&#160;            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l16646"></a><span class="lineno">16646</span>&#160;        }</div>
+<div class="line"><a name="l16647"></a><span class="lineno">16647</span>&#160;    }</div>
+<div class="line"><a name="l16648"></a><span class="lineno">16648</span>&#160;}</div>
+<div class="line"><a name="l16649"></a><span class="lineno">16649</span>&#160; </div>
+<div class="line"><a name="l16650"></a><span class="lineno">16650</span>&#160;VkResult VmaAllocator_T::AllocateDedicatedMemory(</div>
+<div class="line"><a name="l16651"></a><span class="lineno">16651</span>&#160;    VkDeviceSize size,</div>
+<div class="line"><a name="l16652"></a><span class="lineno">16652</span>&#160;    VmaSuballocationType suballocType,</div>
+<div class="line"><a name="l16653"></a><span class="lineno">16653</span>&#160;    uint32_t memTypeIndex,</div>
+<div class="line"><a name="l16654"></a><span class="lineno">16654</span>&#160;    <span class="keywordtype">bool</span> withinBudget,</div>
+<div class="line"><a name="l16655"></a><span class="lineno">16655</span>&#160;    <span class="keywordtype">bool</span> map,</div>
+<div class="line"><a name="l16656"></a><span class="lineno">16656</span>&#160;    <span class="keywordtype">bool</span> isUserDataString,</div>
+<div class="line"><a name="l16657"></a><span class="lineno">16657</span>&#160;    <span class="keywordtype">void</span>* pUserData,</div>
+<div class="line"><a name="l16658"></a><span class="lineno">16658</span>&#160;    <span class="keywordtype">float</span> priority,</div>
+<div class="line"><a name="l16659"></a><span class="lineno">16659</span>&#160;    VkBuffer dedicatedBuffer,</div>
+<div class="line"><a name="l16660"></a><span class="lineno">16660</span>&#160;    VkBufferUsageFlags dedicatedBufferUsage,</div>
+<div class="line"><a name="l16661"></a><span class="lineno">16661</span>&#160;    VkImage dedicatedImage,</div>
+<div class="line"><a name="l16662"></a><span class="lineno">16662</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l16663"></a><span class="lineno">16663</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
+<div class="line"><a name="l16664"></a><span class="lineno">16664</span>&#160;{</div>
+<div class="line"><a name="l16665"></a><span class="lineno">16665</span>&#160;    VMA_ASSERT(allocationCount &gt; 0 &amp;&amp; pAllocations);</div>
+<div class="line"><a name="l16666"></a><span class="lineno">16666</span>&#160; </div>
+<div class="line"><a name="l16667"></a><span class="lineno">16667</span>&#160;    <span class="keywordflow">if</span>(withinBudget)</div>
+<div class="line"><a name="l16668"></a><span class="lineno">16668</span>&#160;    {</div>
+<div class="line"><a name="l16669"></a><span class="lineno">16669</span>&#160;        <span class="keyword">const</span> uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
+<div class="line"><a name="l16670"></a><span class="lineno">16670</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> heapBudget = {};</div>
+<div class="line"><a name="l16671"></a><span class="lineno">16671</span>&#160;        GetBudget(&amp;heapBudget, heapIndex, 1);</div>
+<div class="line"><a name="l16672"></a><span class="lineno">16672</span>&#160;        <span class="keywordflow">if</span>(heapBudget.<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a> + size * allocationCount &gt; heapBudget.<a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a>)</div>
+<div class="line"><a name="l16673"></a><span class="lineno">16673</span>&#160;        {</div>
+<div class="line"><a name="l16674"></a><span class="lineno">16674</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l16675"></a><span class="lineno">16675</span>&#160;        }</div>
+<div class="line"><a name="l16676"></a><span class="lineno">16676</span>&#160;    }</div>
+<div class="line"><a name="l16677"></a><span class="lineno">16677</span>&#160; </div>
+<div class="line"><a name="l16678"></a><span class="lineno">16678</span>&#160;    VkMemoryAllocateInfo allocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO };</div>
+<div class="line"><a name="l16679"></a><span class="lineno">16679</span>&#160;    allocInfo.memoryTypeIndex = memTypeIndex;</div>
+<div class="line"><a name="l16680"></a><span class="lineno">16680</span>&#160;    allocInfo.allocationSize = size;</div>
+<div class="line"><a name="l16681"></a><span class="lineno">16681</span>&#160; </div>
+<div class="line"><a name="l16682"></a><span class="lineno">16682</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l16683"></a><span class="lineno">16683</span>&#160;    VkMemoryDedicatedAllocateInfoKHR dedicatedAllocInfo = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR };</div>
+<div class="line"><a name="l16684"></a><span class="lineno">16684</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
+<div class="line"><a name="l16685"></a><span class="lineno">16685</span>&#160;    {</div>
+<div class="line"><a name="l16686"></a><span class="lineno">16686</span>&#160;        <span class="keywordflow">if</span>(dedicatedBuffer != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l16687"></a><span class="lineno">16687</span>&#160;        {</div>
+<div class="line"><a name="l16688"></a><span class="lineno">16688</span>&#160;            VMA_ASSERT(dedicatedImage == VK_NULL_HANDLE);</div>
+<div class="line"><a name="l16689"></a><span class="lineno">16689</span>&#160;            dedicatedAllocInfo.buffer = dedicatedBuffer;</div>
+<div class="line"><a name="l16690"></a><span class="lineno">16690</span>&#160;            VmaPnextChainPushFront(&amp;allocInfo, &amp;dedicatedAllocInfo);</div>
+<div class="line"><a name="l16691"></a><span class="lineno">16691</span>&#160;        }</div>
+<div class="line"><a name="l16692"></a><span class="lineno">16692</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(dedicatedImage != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l16693"></a><span class="lineno">16693</span>&#160;        {</div>
+<div class="line"><a name="l16694"></a><span class="lineno">16694</span>&#160;            dedicatedAllocInfo.image = dedicatedImage;</div>
+<div class="line"><a name="l16695"></a><span class="lineno">16695</span>&#160;            VmaPnextChainPushFront(&amp;allocInfo, &amp;dedicatedAllocInfo);</div>
+<div class="line"><a name="l16696"></a><span class="lineno">16696</span>&#160;        }</div>
+<div class="line"><a name="l16697"></a><span class="lineno">16697</span>&#160;    }</div>
+<div class="line"><a name="l16698"></a><span class="lineno">16698</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l16699"></a><span class="lineno">16699</span>&#160; </div>
+<div class="line"><a name="l16700"></a><span class="lineno">16700</span>&#160;<span class="preprocessor">#if VMA_BUFFER_DEVICE_ADDRESS</span></div>
+<div class="line"><a name="l16701"></a><span class="lineno">16701</span>&#160;    VkMemoryAllocateFlagsInfoKHR allocFlagsInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR };</div>
+<div class="line"><a name="l16702"></a><span class="lineno">16702</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrBufferDeviceAddress)</div>
+<div class="line"><a name="l16703"></a><span class="lineno">16703</span>&#160;    {</div>
+<div class="line"><a name="l16704"></a><span class="lineno">16704</span>&#160;        <span class="keywordtype">bool</span> canContainBufferWithDeviceAddress = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l16705"></a><span class="lineno">16705</span>&#160;        <span class="keywordflow">if</span>(dedicatedBuffer != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l16706"></a><span class="lineno">16706</span>&#160;        {</div>
+<div class="line"><a name="l16707"></a><span class="lineno">16707</span>&#160;            canContainBufferWithDeviceAddress = dedicatedBufferUsage == UINT32_MAX || <span class="comment">// Usage flags unknown</span></div>
+<div class="line"><a name="l16708"></a><span class="lineno">16708</span>&#160;                (dedicatedBufferUsage &amp; VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT) != 0;</div>
+<div class="line"><a name="l16709"></a><span class="lineno">16709</span>&#160;        }</div>
+<div class="line"><a name="l16710"></a><span class="lineno">16710</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(dedicatedImage != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l16711"></a><span class="lineno">16711</span>&#160;        {</div>
+<div class="line"><a name="l16712"></a><span class="lineno">16712</span>&#160;            canContainBufferWithDeviceAddress = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l16713"></a><span class="lineno">16713</span>&#160;        }</div>
+<div class="line"><a name="l16714"></a><span class="lineno">16714</span>&#160;        <span class="keywordflow">if</span>(canContainBufferWithDeviceAddress)</div>
+<div class="line"><a name="l16715"></a><span class="lineno">16715</span>&#160;        {</div>
+<div class="line"><a name="l16716"></a><span class="lineno">16716</span>&#160;            allocFlagsInfo.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR;</div>
+<div class="line"><a name="l16717"></a><span class="lineno">16717</span>&#160;            VmaPnextChainPushFront(&amp;allocInfo, &amp;allocFlagsInfo);</div>
+<div class="line"><a name="l16718"></a><span class="lineno">16718</span>&#160;        }</div>
+<div class="line"><a name="l16719"></a><span class="lineno">16719</span>&#160;    }</div>
+<div class="line"><a name="l16720"></a><span class="lineno">16720</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_BUFFER_DEVICE_ADDRESS</span></div>
+<div class="line"><a name="l16721"></a><span class="lineno">16721</span>&#160; </div>
+<div class="line"><a name="l16722"></a><span class="lineno">16722</span>&#160;<span class="preprocessor">#if VMA_MEMORY_PRIORITY</span></div>
+<div class="line"><a name="l16723"></a><span class="lineno">16723</span>&#160;    VkMemoryPriorityAllocateInfoEXT priorityInfo = { VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT };</div>
+<div class="line"><a name="l16724"></a><span class="lineno">16724</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryPriority)</div>
+<div class="line"><a name="l16725"></a><span class="lineno">16725</span>&#160;    {</div>
+<div class="line"><a name="l16726"></a><span class="lineno">16726</span>&#160;        priorityInfo.priority = priority;</div>
+<div class="line"><a name="l16727"></a><span class="lineno">16727</span>&#160;        VmaPnextChainPushFront(&amp;allocInfo, &amp;priorityInfo);</div>
+<div class="line"><a name="l16728"></a><span class="lineno">16728</span>&#160;    }</div>
+<div class="line"><a name="l16729"></a><span class="lineno">16729</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_MEMORY_PRIORITY</span></div>
+<div class="line"><a name="l16730"></a><span class="lineno">16730</span>&#160; </div>
+<div class="line"><a name="l16731"></a><span class="lineno">16731</span>&#160;<span class="preprocessor">#if VMA_EXTERNAL_MEMORY</span></div>
+<div class="line"><a name="l16732"></a><span class="lineno">16732</span>&#160;    <span class="comment">// Attach VkExportMemoryAllocateInfoKHR if necessary.</span></div>
+<div class="line"><a name="l16733"></a><span class="lineno">16733</span>&#160;    VkExportMemoryAllocateInfoKHR exportMemoryAllocInfo = { VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR };</div>
+<div class="line"><a name="l16734"></a><span class="lineno">16734</span>&#160;    exportMemoryAllocInfo.handleTypes = GetExternalMemoryHandleTypeFlags(memTypeIndex);</div>
+<div class="line"><a name="l16735"></a><span class="lineno">16735</span>&#160;    <span class="keywordflow">if</span>(exportMemoryAllocInfo.handleTypes != 0)</div>
+<div class="line"><a name="l16736"></a><span class="lineno">16736</span>&#160;    {</div>
+<div class="line"><a name="l16737"></a><span class="lineno">16737</span>&#160;        VmaPnextChainPushFront(&amp;allocInfo, &amp;exportMemoryAllocInfo);</div>
+<div class="line"><a name="l16738"></a><span class="lineno">16738</span>&#160;    }</div>
+<div class="line"><a name="l16739"></a><span class="lineno">16739</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_EXTERNAL_MEMORY</span></div>
+<div class="line"><a name="l16740"></a><span class="lineno">16740</span>&#160; </div>
+<div class="line"><a name="l16741"></a><span class="lineno">16741</span>&#160;    <span class="keywordtype">size_t</span> allocIndex;</div>
+<div class="line"><a name="l16742"></a><span class="lineno">16742</span>&#160;    VkResult res = VK_SUCCESS;</div>
+<div class="line"><a name="l16743"></a><span class="lineno">16743</span>&#160;    <span class="keywordflow">for</span>(allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</div>
+<div class="line"><a name="l16744"></a><span class="lineno">16744</span>&#160;    {</div>
+<div class="line"><a name="l16745"></a><span class="lineno">16745</span>&#160;        res = AllocateDedicatedMemoryPage(</div>
+<div class="line"><a name="l16746"></a><span class="lineno">16746</span>&#160;            size,</div>
+<div class="line"><a name="l16747"></a><span class="lineno">16747</span>&#160;            suballocType,</div>
+<div class="line"><a name="l16748"></a><span class="lineno">16748</span>&#160;            memTypeIndex,</div>
+<div class="line"><a name="l16749"></a><span class="lineno">16749</span>&#160;            allocInfo,</div>
+<div class="line"><a name="l16750"></a><span class="lineno">16750</span>&#160;            map,</div>
+<div class="line"><a name="l16751"></a><span class="lineno">16751</span>&#160;            isUserDataString,</div>
+<div class="line"><a name="l16752"></a><span class="lineno">16752</span>&#160;            pUserData,</div>
+<div class="line"><a name="l16753"></a><span class="lineno">16753</span>&#160;            pAllocations + allocIndex);</div>
+<div class="line"><a name="l16754"></a><span class="lineno">16754</span>&#160;        <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l16755"></a><span class="lineno">16755</span>&#160;        {</div>
+<div class="line"><a name="l16756"></a><span class="lineno">16756</span>&#160;            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l16757"></a><span class="lineno">16757</span>&#160;        }</div>
+<div class="line"><a name="l16758"></a><span class="lineno">16758</span>&#160;    }</div>
+<div class="line"><a name="l16759"></a><span class="lineno">16759</span>&#160; </div>
+<div class="line"><a name="l16760"></a><span class="lineno">16760</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l16761"></a><span class="lineno">16761</span>&#160;    {</div>
+<div class="line"><a name="l16762"></a><span class="lineno">16762</span>&#160;        <span class="comment">// Register them in m_DedicatedAllocations.</span></div>
+<div class="line"><a name="l16763"></a><span class="lineno">16763</span>&#160;        {</div>
+<div class="line"><a name="l16764"></a><span class="lineno">16764</span>&#160;            VmaMutexLockWrite lock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
+<div class="line"><a name="l16765"></a><span class="lineno">16765</span>&#160;            DedicatedAllocationLinkedList&amp; dedicatedAllocations = m_DedicatedAllocations[memTypeIndex];</div>
+<div class="line"><a name="l16766"></a><span class="lineno">16766</span>&#160;            <span class="keywordflow">for</span>(allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</div>
+<div class="line"><a name="l16767"></a><span class="lineno">16767</span>&#160;            {</div>
+<div class="line"><a name="l16768"></a><span class="lineno">16768</span>&#160;                dedicatedAllocations.PushBack(pAllocations[allocIndex]);</div>
+<div class="line"><a name="l16769"></a><span class="lineno">16769</span>&#160;            }</div>
+<div class="line"><a name="l16770"></a><span class="lineno">16770</span>&#160;        }</div>
+<div class="line"><a name="l16771"></a><span class="lineno">16771</span>&#160; </div>
+<div class="line"><a name="l16772"></a><span class="lineno">16772</span>&#160;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Allocated DedicatedMemory Count=%zu, MemoryTypeIndex=#%u&quot;</span>, allocationCount, memTypeIndex);</div>
+<div class="line"><a name="l16773"></a><span class="lineno">16773</span>&#160;    }</div>
+<div class="line"><a name="l16774"></a><span class="lineno">16774</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l16775"></a><span class="lineno">16775</span>&#160;    {</div>
+<div class="line"><a name="l16776"></a><span class="lineno">16776</span>&#160;        <span class="comment">// Free all already created allocations.</span></div>
+<div class="line"><a name="l16777"></a><span class="lineno">16777</span>&#160;        <span class="keywordflow">while</span>(allocIndex--)</div>
+<div class="line"><a name="l16778"></a><span class="lineno">16778</span>&#160;        {</div>
+<div class="line"><a name="l16779"></a><span class="lineno">16779</span>&#160;            <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> currAlloc = pAllocations[allocIndex];</div>
+<div class="line"><a name="l16780"></a><span class="lineno">16780</span>&#160;            VkDeviceMemory hMemory = currAlloc-&gt;GetMemory();</div>
+<div class="line"><a name="l16781"></a><span class="lineno">16781</span>&#160; </div>
+<div class="line"><a name="l16782"></a><span class="lineno">16782</span>&#160;            <span class="comment">/*</span></div>
+<div class="line"><a name="l16783"></a><span class="lineno">16783</span>&#160;<span class="comment">            There is no need to call this, because Vulkan spec allows to skip vkUnmapMemory</span></div>
+<div class="line"><a name="l16784"></a><span class="lineno">16784</span>&#160;<span class="comment">            before vkFreeMemory.</span></div>
+<div class="line"><a name="l16785"></a><span class="lineno">16785</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l16786"></a><span class="lineno">16786</span>&#160;<span class="comment">            if(currAlloc-&gt;GetMappedData() != VMA_NULL)</span></div>
+<div class="line"><a name="l16787"></a><span class="lineno">16787</span>&#160;<span class="comment">            {</span></div>
+<div class="line"><a name="l16788"></a><span class="lineno">16788</span>&#160;<span class="comment">                (*m_VulkanFunctions.vkUnmapMemory)(m_hDevice, hMemory);</span></div>
+<div class="line"><a name="l16789"></a><span class="lineno">16789</span>&#160;<span class="comment">            }</span></div>
+<div class="line"><a name="l16790"></a><span class="lineno">16790</span>&#160;<span class="comment">            */</span></div>
+<div class="line"><a name="l16791"></a><span class="lineno">16791</span>&#160; </div>
+<div class="line"><a name="l16792"></a><span class="lineno">16792</span>&#160;            FreeVulkanMemory(memTypeIndex, currAlloc-&gt;GetSize(), hMemory);</div>
+<div class="line"><a name="l16793"></a><span class="lineno">16793</span>&#160;            m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), currAlloc-&gt;GetSize());</div>
+<div class="line"><a name="l16794"></a><span class="lineno">16794</span>&#160;            currAlloc-&gt;SetUserData(<span class="keyword">this</span>, VMA_NULL);</div>
+<div class="line"><a name="l16795"></a><span class="lineno">16795</span>&#160;            m_AllocationObjectAllocator.Free(currAlloc);</div>
+<div class="line"><a name="l16796"></a><span class="lineno">16796</span>&#160;        }</div>
+<div class="line"><a name="l16797"></a><span class="lineno">16797</span>&#160; </div>
+<div class="line"><a name="l16798"></a><span class="lineno">16798</span>&#160;        memset(pAllocations, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a>) * allocationCount);</div>
+<div class="line"><a name="l16799"></a><span class="lineno">16799</span>&#160;    }</div>
+<div class="line"><a name="l16800"></a><span class="lineno">16800</span>&#160; </div>
+<div class="line"><a name="l16801"></a><span class="lineno">16801</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l16802"></a><span class="lineno">16802</span>&#160;}</div>
+<div class="line"><a name="l16803"></a><span class="lineno">16803</span>&#160; </div>
+<div class="line"><a name="l16804"></a><span class="lineno">16804</span>&#160;VkResult VmaAllocator_T::AllocateDedicatedMemoryPage(</div>
+<div class="line"><a name="l16805"></a><span class="lineno">16805</span>&#160;    VkDeviceSize size,</div>
+<div class="line"><a name="l16806"></a><span class="lineno">16806</span>&#160;    VmaSuballocationType suballocType,</div>
+<div class="line"><a name="l16807"></a><span class="lineno">16807</span>&#160;    uint32_t memTypeIndex,</div>
+<div class="line"><a name="l16808"></a><span class="lineno">16808</span>&#160;    <span class="keyword">const</span> VkMemoryAllocateInfo&amp; allocInfo,</div>
+<div class="line"><a name="l16809"></a><span class="lineno">16809</span>&#160;    <span class="keywordtype">bool</span> map,</div>
+<div class="line"><a name="l16810"></a><span class="lineno">16810</span>&#160;    <span class="keywordtype">bool</span> isUserDataString,</div>
+<div class="line"><a name="l16811"></a><span class="lineno">16811</span>&#160;    <span class="keywordtype">void</span>* pUserData,</div>
+<div class="line"><a name="l16812"></a><span class="lineno">16812</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
+<div class="line"><a name="l16813"></a><span class="lineno">16813</span>&#160;{</div>
+<div class="line"><a name="l16814"></a><span class="lineno">16814</span>&#160;    VkDeviceMemory hMemory = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l16815"></a><span class="lineno">16815</span>&#160;    VkResult res = AllocateVulkanMemory(&amp;allocInfo, &amp;hMemory);</div>
+<div class="line"><a name="l16816"></a><span class="lineno">16816</span>&#160;    <span class="keywordflow">if</span>(res &lt; 0)</div>
+<div class="line"><a name="l16817"></a><span class="lineno">16817</span>&#160;    {</div>
+<div class="line"><a name="l16818"></a><span class="lineno">16818</span>&#160;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    vkAllocateMemory FAILED&quot;</span>);</div>
+<div class="line"><a name="l16819"></a><span class="lineno">16819</span>&#160;        <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l16820"></a><span class="lineno">16820</span>&#160;    }</div>
+<div class="line"><a name="l16821"></a><span class="lineno">16821</span>&#160; </div>
+<div class="line"><a name="l16822"></a><span class="lineno">16822</span>&#160;    <span class="keywordtype">void</span>* pMappedData = VMA_NULL;</div>
+<div class="line"><a name="l16823"></a><span class="lineno">16823</span>&#160;    <span class="keywordflow">if</span>(map)</div>
+<div class="line"><a name="l16824"></a><span class="lineno">16824</span>&#160;    {</div>
+<div class="line"><a name="l16825"></a><span class="lineno">16825</span>&#160;        res = (*m_VulkanFunctions.vkMapMemory)(</div>
+<div class="line"><a name="l16826"></a><span class="lineno">16826</span>&#160;            m_hDevice,</div>
+<div class="line"><a name="l16827"></a><span class="lineno">16827</span>&#160;            hMemory,</div>
+<div class="line"><a name="l16828"></a><span class="lineno">16828</span>&#160;            0,</div>
+<div class="line"><a name="l16829"></a><span class="lineno">16829</span>&#160;            VK_WHOLE_SIZE,</div>
+<div class="line"><a name="l16830"></a><span class="lineno">16830</span>&#160;            0,</div>
+<div class="line"><a name="l16831"></a><span class="lineno">16831</span>&#160;            &amp;pMappedData);</div>
+<div class="line"><a name="l16832"></a><span class="lineno">16832</span>&#160;        <span class="keywordflow">if</span>(res &lt; 0)</div>
+<div class="line"><a name="l16833"></a><span class="lineno">16833</span>&#160;        {</div>
+<div class="line"><a name="l16834"></a><span class="lineno">16834</span>&#160;            VMA_DEBUG_LOG(<span class="stringliteral">&quot;    vkMapMemory FAILED&quot;</span>);</div>
+<div class="line"><a name="l16835"></a><span class="lineno">16835</span>&#160;            FreeVulkanMemory(memTypeIndex, size, hMemory);</div>
+<div class="line"><a name="l16836"></a><span class="lineno">16836</span>&#160;            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l16837"></a><span class="lineno">16837</span>&#160;        }</div>
+<div class="line"><a name="l16838"></a><span class="lineno">16838</span>&#160;    }</div>
+<div class="line"><a name="l16839"></a><span class="lineno">16839</span>&#160; </div>
+<div class="line"><a name="l16840"></a><span class="lineno">16840</span>&#160;    *pAllocation = m_AllocationObjectAllocator.Allocate(m_CurrentFrameIndex.load(), isUserDataString);</div>
+<div class="line"><a name="l16841"></a><span class="lineno">16841</span>&#160;    (*pAllocation)-&gt;InitDedicatedAllocation(memTypeIndex, hMemory, suballocType, pMappedData, size);</div>
+<div class="line"><a name="l16842"></a><span class="lineno">16842</span>&#160;    (*pAllocation)-&gt;SetUserData(<span class="keyword">this</span>, pUserData);</div>
+<div class="line"><a name="l16843"></a><span class="lineno">16843</span>&#160;    m_Budget.AddAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), size);</div>
+<div class="line"><a name="l16844"></a><span class="lineno">16844</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</div>
+<div class="line"><a name="l16845"></a><span class="lineno">16845</span>&#160;    {</div>
+<div class="line"><a name="l16846"></a><span class="lineno">16846</span>&#160;        FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);</div>
+<div class="line"><a name="l16847"></a><span class="lineno">16847</span>&#160;    }</div>
+<div class="line"><a name="l16848"></a><span class="lineno">16848</span>&#160; </div>
+<div class="line"><a name="l16849"></a><span class="lineno">16849</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l16850"></a><span class="lineno">16850</span>&#160;}</div>
+<div class="line"><a name="l16851"></a><span class="lineno">16851</span>&#160; </div>
+<div class="line"><a name="l16852"></a><span class="lineno">16852</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::GetBufferMemoryRequirements(</div>
+<div class="line"><a name="l16853"></a><span class="lineno">16853</span>&#160;    VkBuffer hBuffer,</div>
+<div class="line"><a name="l16854"></a><span class="lineno">16854</span>&#160;    VkMemoryRequirements&amp; memReq,</div>
+<div class="line"><a name="l16855"></a><span class="lineno">16855</span>&#160;    <span class="keywordtype">bool</span>&amp; requiresDedicatedAllocation,</div>
+<div class="line"><a name="l16856"></a><span class="lineno">16856</span>&#160;    <span class="keywordtype">bool</span>&amp; prefersDedicatedAllocation)<span class="keyword"> const</span></div>
+<div class="line"><a name="l16857"></a><span class="lineno">16857</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l16858"></a><span class="lineno">16858</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l16859"></a><span class="lineno">16859</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
+<div class="line"><a name="l16860"></a><span class="lineno">16860</span>&#160;    {</div>
+<div class="line"><a name="l16861"></a><span class="lineno">16861</span>&#160;        VkBufferMemoryRequirementsInfo2KHR memReqInfo = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR };</div>
+<div class="line"><a name="l16862"></a><span class="lineno">16862</span>&#160;        memReqInfo.buffer = hBuffer;</div>
+<div class="line"><a name="l16863"></a><span class="lineno">16863</span>&#160; </div>
+<div class="line"><a name="l16864"></a><span class="lineno">16864</span>&#160;        VkMemoryDedicatedRequirementsKHR memDedicatedReq = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR };</div>
+<div class="line"><a name="l16865"></a><span class="lineno">16865</span>&#160; </div>
+<div class="line"><a name="l16866"></a><span class="lineno">16866</span>&#160;        VkMemoryRequirements2KHR memReq2 = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR };</div>
+<div class="line"><a name="l16867"></a><span class="lineno">16867</span>&#160;        VmaPnextChainPushFront(&amp;memReq2, &amp;memDedicatedReq);</div>
+<div class="line"><a name="l16868"></a><span class="lineno">16868</span>&#160; </div>
+<div class="line"><a name="l16869"></a><span class="lineno">16869</span>&#160;        (*m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR)(m_hDevice, &amp;memReqInfo, &amp;memReq2);</div>
+<div class="line"><a name="l16870"></a><span class="lineno">16870</span>&#160; </div>
+<div class="line"><a name="l16871"></a><span class="lineno">16871</span>&#160;        memReq = memReq2.memoryRequirements;</div>
+<div class="line"><a name="l16872"></a><span class="lineno">16872</span>&#160;        requiresDedicatedAllocation = (memDedicatedReq.requiresDedicatedAllocation != VK_FALSE);</div>
+<div class="line"><a name="l16873"></a><span class="lineno">16873</span>&#160;        prefersDedicatedAllocation  = (memDedicatedReq.prefersDedicatedAllocation  != VK_FALSE);</div>
+<div class="line"><a name="l16874"></a><span class="lineno">16874</span>&#160;    }</div>
+<div class="line"><a name="l16875"></a><span class="lineno">16875</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l16876"></a><span class="lineno">16876</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l16877"></a><span class="lineno">16877</span>&#160;    {</div>
+<div class="line"><a name="l16878"></a><span class="lineno">16878</span>&#160;        (*m_VulkanFunctions.vkGetBufferMemoryRequirements)(m_hDevice, hBuffer, &amp;memReq);</div>
+<div class="line"><a name="l16879"></a><span class="lineno">16879</span>&#160;        requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l16880"></a><span class="lineno">16880</span>&#160;        prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l16881"></a><span class="lineno">16881</span>&#160;    }</div>
+<div class="line"><a name="l16882"></a><span class="lineno">16882</span>&#160;}</div>
+<div class="line"><a name="l16883"></a><span class="lineno">16883</span>&#160; </div>
+<div class="line"><a name="l16884"></a><span class="lineno">16884</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::GetImageMemoryRequirements(</div>
+<div class="line"><a name="l16885"></a><span class="lineno">16885</span>&#160;    VkImage hImage,</div>
+<div class="line"><a name="l16886"></a><span class="lineno">16886</span>&#160;    VkMemoryRequirements&amp; memReq,</div>
+<div class="line"><a name="l16887"></a><span class="lineno">16887</span>&#160;    <span class="keywordtype">bool</span>&amp; requiresDedicatedAllocation,</div>
+<div class="line"><a name="l16888"></a><span class="lineno">16888</span>&#160;    <span class="keywordtype">bool</span>&amp; prefersDedicatedAllocation)<span class="keyword"> const</span></div>
+<div class="line"><a name="l16889"></a><span class="lineno">16889</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l16890"></a><span class="lineno">16890</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l16891"></a><span class="lineno">16891</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
+<div class="line"><a name="l16892"></a><span class="lineno">16892</span>&#160;    {</div>
+<div class="line"><a name="l16893"></a><span class="lineno">16893</span>&#160;        VkImageMemoryRequirementsInfo2KHR memReqInfo = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR };</div>
+<div class="line"><a name="l16894"></a><span class="lineno">16894</span>&#160;        memReqInfo.image = hImage;</div>
+<div class="line"><a name="l16895"></a><span class="lineno">16895</span>&#160; </div>
+<div class="line"><a name="l16896"></a><span class="lineno">16896</span>&#160;        VkMemoryDedicatedRequirementsKHR memDedicatedReq = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR };</div>
+<div class="line"><a name="l16897"></a><span class="lineno">16897</span>&#160; </div>
+<div class="line"><a name="l16898"></a><span class="lineno">16898</span>&#160;        VkMemoryRequirements2KHR memReq2 = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR };</div>
+<div class="line"><a name="l16899"></a><span class="lineno">16899</span>&#160;        VmaPnextChainPushFront(&amp;memReq2, &amp;memDedicatedReq);</div>
+<div class="line"><a name="l16900"></a><span class="lineno">16900</span>&#160; </div>
+<div class="line"><a name="l16901"></a><span class="lineno">16901</span>&#160;        (*m_VulkanFunctions.vkGetImageMemoryRequirements2KHR)(m_hDevice, &amp;memReqInfo, &amp;memReq2);</div>
+<div class="line"><a name="l16902"></a><span class="lineno">16902</span>&#160; </div>
+<div class="line"><a name="l16903"></a><span class="lineno">16903</span>&#160;        memReq = memReq2.memoryRequirements;</div>
+<div class="line"><a name="l16904"></a><span class="lineno">16904</span>&#160;        requiresDedicatedAllocation = (memDedicatedReq.requiresDedicatedAllocation != VK_FALSE);</div>
+<div class="line"><a name="l16905"></a><span class="lineno">16905</span>&#160;        prefersDedicatedAllocation  = (memDedicatedReq.prefersDedicatedAllocation  != VK_FALSE);</div>
+<div class="line"><a name="l16906"></a><span class="lineno">16906</span>&#160;    }</div>
+<div class="line"><a name="l16907"></a><span class="lineno">16907</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l16908"></a><span class="lineno">16908</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l16909"></a><span class="lineno">16909</span>&#160;    {</div>
+<div class="line"><a name="l16910"></a><span class="lineno">16910</span>&#160;        (*m_VulkanFunctions.vkGetImageMemoryRequirements)(m_hDevice, hImage, &amp;memReq);</div>
+<div class="line"><a name="l16911"></a><span class="lineno">16911</span>&#160;        requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l16912"></a><span class="lineno">16912</span>&#160;        prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l16913"></a><span class="lineno">16913</span>&#160;    }</div>
+<div class="line"><a name="l16914"></a><span class="lineno">16914</span>&#160;}</div>
+<div class="line"><a name="l16915"></a><span class="lineno">16915</span>&#160; </div>
+<div class="line"><a name="l16916"></a><span class="lineno">16916</span>&#160;VkResult VmaAllocator_T::AllocateMemory(</div>
+<div class="line"><a name="l16917"></a><span class="lineno">16917</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
+<div class="line"><a name="l16918"></a><span class="lineno">16918</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation,</div>
+<div class="line"><a name="l16919"></a><span class="lineno">16919</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation,</div>
+<div class="line"><a name="l16920"></a><span class="lineno">16920</span>&#160;    VkBuffer dedicatedBuffer,</div>
+<div class="line"><a name="l16921"></a><span class="lineno">16921</span>&#160;    VkBufferUsageFlags dedicatedBufferUsage,</div>
+<div class="line"><a name="l16922"></a><span class="lineno">16922</span>&#160;    VkImage dedicatedImage,</div>
+<div class="line"><a name="l16923"></a><span class="lineno">16923</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>&amp; createInfo,</div>
+<div class="line"><a name="l16924"></a><span class="lineno">16924</span>&#160;    VmaSuballocationType suballocType,</div>
+<div class="line"><a name="l16925"></a><span class="lineno">16925</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l16926"></a><span class="lineno">16926</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
+<div class="line"><a name="l16927"></a><span class="lineno">16927</span>&#160;{</div>
+<div class="line"><a name="l16928"></a><span class="lineno">16928</span>&#160;    memset(pAllocations, 0, <span class="keyword">sizeof</span>(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a>) * allocationCount);</div>
+<div class="line"><a name="l16929"></a><span class="lineno">16929</span>&#160; </div>
+<div class="line"><a name="l16930"></a><span class="lineno">16930</span>&#160;    VMA_ASSERT(VmaIsPow2(vkMemReq.alignment));</div>
+<div class="line"><a name="l16931"></a><span class="lineno">16931</span>&#160; </div>
+<div class="line"><a name="l16932"></a><span class="lineno">16932</span>&#160;    <span class="keywordflow">if</span>(vkMemReq.size == 0)</div>
+<div class="line"><a name="l16933"></a><span class="lineno">16933</span>&#160;    {</div>
+<div class="line"><a name="l16934"></a><span class="lineno">16934</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
+<div class="line"><a name="l16935"></a><span class="lineno">16935</span>&#160;    }</div>
+<div class="line"><a name="l16936"></a><span class="lineno">16936</span>&#160;    <span class="keywordflow">if</span>((createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>) != 0 &amp;&amp;</div>
+<div class="line"><a name="l16937"></a><span class="lineno">16937</span>&#160;        (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a>) != 0)</div>
+<div class="line"><a name="l16938"></a><span class="lineno">16938</span>&#160;    {</div>
+<div class="line"><a name="l16939"></a><span class="lineno">16939</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT together with VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT makes no sense.&quot;</span>);</div>
+<div class="line"><a name="l16940"></a><span class="lineno">16940</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l16941"></a><span class="lineno">16941</span>&#160;    }</div>
+<div class="line"><a name="l16942"></a><span class="lineno">16942</span>&#160;    <span class="keywordflow">if</span>((createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0 &amp;&amp;</div>
+<div class="line"><a name="l16943"></a><span class="lineno">16943</span>&#160;        (createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2">VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</a>) != 0)</div>
+<div class="line"><a name="l16944"></a><span class="lineno">16944</span>&#160;    {</div>
+<div class="line"><a name="l16945"></a><span class="lineno">16945</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Specifying VMA_ALLOCATION_CREATE_MAPPED_BIT together with VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT is invalid.&quot;</span>);</div>
+<div class="line"><a name="l16946"></a><span class="lineno">16946</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l16947"></a><span class="lineno">16947</span>&#160;    }</div>
+<div class="line"><a name="l16948"></a><span class="lineno">16948</span>&#160;    <span class="keywordflow">if</span>(requiresDedicatedAllocation)</div>
+<div class="line"><a name="l16949"></a><span class="lineno">16949</span>&#160;    {</div>
+<div class="line"><a name="l16950"></a><span class="lineno">16950</span>&#160;        <span class="keywordflow">if</span>((createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a>) != 0)</div>
+<div class="line"><a name="l16951"></a><span class="lineno">16951</span>&#160;        {</div>
+<div class="line"><a name="l16952"></a><span class="lineno">16952</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT specified while dedicated allocation is required.&quot;</span>);</div>
+<div class="line"><a name="l16953"></a><span class="lineno">16953</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l16954"></a><span class="lineno">16954</span>&#160;        }</div>
+<div class="line"><a name="l16955"></a><span class="lineno">16955</span>&#160;        <span class="keywordflow">if</span>(createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a> != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l16956"></a><span class="lineno">16956</span>&#160;        {</div>
+<div class="line"><a name="l16957"></a><span class="lineno">16957</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Pool specified while dedicated allocation is required.&quot;</span>);</div>
+<div class="line"><a name="l16958"></a><span class="lineno">16958</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l16959"></a><span class="lineno">16959</span>&#160;        }</div>
+<div class="line"><a name="l16960"></a><span class="lineno">16960</span>&#160;    }</div>
+<div class="line"><a name="l16961"></a><span class="lineno">16961</span>&#160;    <span class="keywordflow">if</span>((createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a> != VK_NULL_HANDLE) &amp;&amp;</div>
+<div class="line"><a name="l16962"></a><span class="lineno">16962</span>&#160;        ((createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; (<a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>)) != 0))</div>
+<div class="line"><a name="l16963"></a><span class="lineno">16963</span>&#160;    {</div>
+<div class="line"><a name="l16964"></a><span class="lineno">16964</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT when pool != null is invalid.&quot;</span>);</div>
+<div class="line"><a name="l16965"></a><span class="lineno">16965</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l16966"></a><span class="lineno">16966</span>&#160;    }</div>
+<div class="line"><a name="l16967"></a><span class="lineno">16967</span>&#160; </div>
+<div class="line"><a name="l16968"></a><span class="lineno">16968</span>&#160;    <span class="keywordflow">if</span>(createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a> != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l16969"></a><span class="lineno">16969</span>&#160;    {</div>
+<div class="line"><a name="l16970"></a><span class="lineno">16970</span>&#160;        <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> createInfoForPool = createInfo;</div>
+<div class="line"><a name="l16971"></a><span class="lineno">16971</span>&#160;        <span class="comment">// If memory type is not HOST_VISIBLE, disable MAPPED.</span></div>
+<div class="line"><a name="l16972"></a><span class="lineno">16972</span>&#160;        <span class="keywordflow">if</span>((createInfoForPool.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0 &amp;&amp;</div>
+<div class="line"><a name="l16973"></a><span class="lineno">16973</span>&#160;            (m_MemProps.memoryTypes[createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>-&gt;m_BlockVector.GetMemoryTypeIndex()].propertyFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)</div>
+<div class="line"><a name="l16974"></a><span class="lineno">16974</span>&#160;        {</div>
+<div class="line"><a name="l16975"></a><span class="lineno">16975</span>&#160;            createInfoForPool.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp;= ~<a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>;</div>
+<div class="line"><a name="l16976"></a><span class="lineno">16976</span>&#160;        }</div>
+<div class="line"><a name="l16977"></a><span class="lineno">16977</span>&#160; </div>
+<div class="line"><a name="l16978"></a><span class="lineno">16978</span>&#160;        <span class="keywordflow">return</span> createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>-&gt;m_BlockVector.Allocate(</div>
+<div class="line"><a name="l16979"></a><span class="lineno">16979</span>&#160;            m_CurrentFrameIndex.load(),</div>
+<div class="line"><a name="l16980"></a><span class="lineno">16980</span>&#160;            vkMemReq.size,</div>
+<div class="line"><a name="l16981"></a><span class="lineno">16981</span>&#160;            vkMemReq.alignment,</div>
+<div class="line"><a name="l16982"></a><span class="lineno">16982</span>&#160;            createInfoForPool,</div>
+<div class="line"><a name="l16983"></a><span class="lineno">16983</span>&#160;            suballocType,</div>
+<div class="line"><a name="l16984"></a><span class="lineno">16984</span>&#160;            allocationCount,</div>
+<div class="line"><a name="l16985"></a><span class="lineno">16985</span>&#160;            pAllocations);</div>
+<div class="line"><a name="l16986"></a><span class="lineno">16986</span>&#160;    }</div>
+<div class="line"><a name="l16987"></a><span class="lineno">16987</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l16988"></a><span class="lineno">16988</span>&#160;    {</div>
+<div class="line"><a name="l16989"></a><span class="lineno">16989</span>&#160;        <span class="comment">// Bit mask of memory Vulkan types acceptable for this allocation.</span></div>
+<div class="line"><a name="l16990"></a><span class="lineno">16990</span>&#160;        uint32_t memoryTypeBits = vkMemReq.memoryTypeBits;</div>
+<div class="line"><a name="l16991"></a><span class="lineno">16991</span>&#160;        uint32_t memTypeIndex = UINT32_MAX;</div>
+<div class="line"><a name="l16992"></a><span class="lineno">16992</span>&#160;        VkResult res = <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(<span class="keyword">this</span>, memoryTypeBits, &amp;createInfo, &amp;memTypeIndex);</div>
+<div class="line"><a name="l16993"></a><span class="lineno">16993</span>&#160;        <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l16994"></a><span class="lineno">16994</span>&#160;        {</div>
+<div class="line"><a name="l16995"></a><span class="lineno">16995</span>&#160;            res = AllocateMemoryOfType(</div>
+<div class="line"><a name="l16996"></a><span class="lineno">16996</span>&#160;                vkMemReq.size,</div>
+<div class="line"><a name="l16997"></a><span class="lineno">16997</span>&#160;                vkMemReq.alignment,</div>
+<div class="line"><a name="l16998"></a><span class="lineno">16998</span>&#160;                requiresDedicatedAllocation || prefersDedicatedAllocation,</div>
+<div class="line"><a name="l16999"></a><span class="lineno">16999</span>&#160;                dedicatedBuffer,</div>
+<div class="line"><a name="l17000"></a><span class="lineno">17000</span>&#160;                dedicatedBufferUsage,</div>
+<div class="line"><a name="l17001"></a><span class="lineno">17001</span>&#160;                dedicatedImage,</div>
+<div class="line"><a name="l17002"></a><span class="lineno">17002</span>&#160;                createInfo,</div>
+<div class="line"><a name="l17003"></a><span class="lineno">17003</span>&#160;                memTypeIndex,</div>
+<div class="line"><a name="l17004"></a><span class="lineno">17004</span>&#160;                suballocType,</div>
+<div class="line"><a name="l17005"></a><span class="lineno">17005</span>&#160;                allocationCount,</div>
+<div class="line"><a name="l17006"></a><span class="lineno">17006</span>&#160;                pAllocations);</div>
+<div class="line"><a name="l17007"></a><span class="lineno">17007</span>&#160;            <span class="comment">// Succeeded on first try.</span></div>
+<div class="line"><a name="l17008"></a><span class="lineno">17008</span>&#160;            <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l17009"></a><span class="lineno">17009</span>&#160;            {</div>
+<div class="line"><a name="l17010"></a><span class="lineno">17010</span>&#160;                <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l17011"></a><span class="lineno">17011</span>&#160;            }</div>
+<div class="line"><a name="l17012"></a><span class="lineno">17012</span>&#160;            <span class="comment">// Allocation from this memory type failed. Try other compatible memory types.</span></div>
+<div class="line"><a name="l17013"></a><span class="lineno">17013</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17014"></a><span class="lineno">17014</span>&#160;            {</div>
+<div class="line"><a name="l17015"></a><span class="lineno">17015</span>&#160;                <span class="keywordflow">for</span>(;;)</div>
+<div class="line"><a name="l17016"></a><span class="lineno">17016</span>&#160;                {</div>
+<div class="line"><a name="l17017"></a><span class="lineno">17017</span>&#160;                    <span class="comment">// Remove old memTypeIndex from list of possibilities.</span></div>
+<div class="line"><a name="l17018"></a><span class="lineno">17018</span>&#160;                    memoryTypeBits &amp;= ~(1u &lt;&lt; memTypeIndex);</div>
+<div class="line"><a name="l17019"></a><span class="lineno">17019</span>&#160;                    <span class="comment">// Find alternative memTypeIndex.</span></div>
+<div class="line"><a name="l17020"></a><span class="lineno">17020</span>&#160;                    res = <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(<span class="keyword">this</span>, memoryTypeBits, &amp;createInfo, &amp;memTypeIndex);</div>
+<div class="line"><a name="l17021"></a><span class="lineno">17021</span>&#160;                    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l17022"></a><span class="lineno">17022</span>&#160;                    {</div>
+<div class="line"><a name="l17023"></a><span class="lineno">17023</span>&#160;                        res = AllocateMemoryOfType(</div>
+<div class="line"><a name="l17024"></a><span class="lineno">17024</span>&#160;                            vkMemReq.size,</div>
+<div class="line"><a name="l17025"></a><span class="lineno">17025</span>&#160;                            vkMemReq.alignment,</div>
+<div class="line"><a name="l17026"></a><span class="lineno">17026</span>&#160;                            requiresDedicatedAllocation || prefersDedicatedAllocation,</div>
+<div class="line"><a name="l17027"></a><span class="lineno">17027</span>&#160;                            dedicatedBuffer,</div>
+<div class="line"><a name="l17028"></a><span class="lineno">17028</span>&#160;                            dedicatedBufferUsage,</div>
+<div class="line"><a name="l17029"></a><span class="lineno">17029</span>&#160;                            dedicatedImage,</div>
+<div class="line"><a name="l17030"></a><span class="lineno">17030</span>&#160;                            createInfo,</div>
+<div class="line"><a name="l17031"></a><span class="lineno">17031</span>&#160;                            memTypeIndex,</div>
+<div class="line"><a name="l17032"></a><span class="lineno">17032</span>&#160;                            suballocType,</div>
+<div class="line"><a name="l17033"></a><span class="lineno">17033</span>&#160;                            allocationCount,</div>
+<div class="line"><a name="l17034"></a><span class="lineno">17034</span>&#160;                            pAllocations);</div>
+<div class="line"><a name="l17035"></a><span class="lineno">17035</span>&#160;                        <span class="comment">// Allocation from this alternative memory type succeeded.</span></div>
+<div class="line"><a name="l17036"></a><span class="lineno">17036</span>&#160;                        <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l17037"></a><span class="lineno">17037</span>&#160;                        {</div>
+<div class="line"><a name="l17038"></a><span class="lineno">17038</span>&#160;                            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l17039"></a><span class="lineno">17039</span>&#160;                        }</div>
+<div class="line"><a name="l17040"></a><span class="lineno">17040</span>&#160;                        <span class="comment">// else: Allocation from this memory type failed. Try next one - next loop iteration.</span></div>
+<div class="line"><a name="l17041"></a><span class="lineno">17041</span>&#160;                    }</div>
+<div class="line"><a name="l17042"></a><span class="lineno">17042</span>&#160;                    <span class="comment">// No other matching memory type index could be found.</span></div>
+<div class="line"><a name="l17043"></a><span class="lineno">17043</span>&#160;                    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17044"></a><span class="lineno">17044</span>&#160;                    {</div>
+<div class="line"><a name="l17045"></a><span class="lineno">17045</span>&#160;                        <span class="comment">// Not returning res, which is VK_ERROR_FEATURE_NOT_PRESENT, because we already failed to allocate once.</span></div>
+<div class="line"><a name="l17046"></a><span class="lineno">17046</span>&#160;                        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l17047"></a><span class="lineno">17047</span>&#160;                    }</div>
+<div class="line"><a name="l17048"></a><span class="lineno">17048</span>&#160;                }</div>
+<div class="line"><a name="l17049"></a><span class="lineno">17049</span>&#160;            }</div>
+<div class="line"><a name="l17050"></a><span class="lineno">17050</span>&#160;        }</div>
+<div class="line"><a name="l17051"></a><span class="lineno">17051</span>&#160;        <span class="comment">// Can&#39;t find any single memory type maching requirements. res is VK_ERROR_FEATURE_NOT_PRESENT.</span></div>
+<div class="line"><a name="l17052"></a><span class="lineno">17052</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17053"></a><span class="lineno">17053</span>&#160;            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l17054"></a><span class="lineno">17054</span>&#160;    }</div>
+<div class="line"><a name="l17055"></a><span class="lineno">17055</span>&#160;}</div>
+<div class="line"><a name="l17056"></a><span class="lineno">17056</span>&#160; </div>
+<div class="line"><a name="l17057"></a><span class="lineno">17057</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::FreeMemory(</div>
+<div class="line"><a name="l17058"></a><span class="lineno">17058</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l17059"></a><span class="lineno">17059</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
+<div class="line"><a name="l17060"></a><span class="lineno">17060</span>&#160;{</div>
+<div class="line"><a name="l17061"></a><span class="lineno">17061</span>&#160;    VMA_ASSERT(pAllocations);</div>
+<div class="line"><a name="l17062"></a><span class="lineno">17062</span>&#160; </div>
+<div class="line"><a name="l17063"></a><span class="lineno">17063</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> allocIndex = allocationCount; allocIndex--; )</div>
+<div class="line"><a name="l17064"></a><span class="lineno">17064</span>&#160;    {</div>
+<div class="line"><a name="l17065"></a><span class="lineno">17065</span>&#160;        <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation = pAllocations[allocIndex];</div>
+<div class="line"><a name="l17066"></a><span class="lineno">17066</span>&#160; </div>
+<div class="line"><a name="l17067"></a><span class="lineno">17067</span>&#160;        <span class="keywordflow">if</span>(allocation != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l17068"></a><span class="lineno">17068</span>&#160;        {</div>
+<div class="line"><a name="l17069"></a><span class="lineno">17069</span>&#160;            <span class="keywordflow">if</span>(TouchAllocation(allocation))</div>
+<div class="line"><a name="l17070"></a><span class="lineno">17070</span>&#160;            {</div>
+<div class="line"><a name="l17071"></a><span class="lineno">17071</span>&#160;                <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</div>
+<div class="line"><a name="l17072"></a><span class="lineno">17072</span>&#160;                {</div>
+<div class="line"><a name="l17073"></a><span class="lineno">17073</span>&#160;                    FillAllocation(allocation, VMA_ALLOCATION_FILL_PATTERN_DESTROYED);</div>
+<div class="line"><a name="l17074"></a><span class="lineno">17074</span>&#160;                }</div>
+<div class="line"><a name="l17075"></a><span class="lineno">17075</span>&#160; </div>
+<div class="line"><a name="l17076"></a><span class="lineno">17076</span>&#160;                <span class="keywordflow">switch</span>(allocation-&gt;GetType())</div>
+<div class="line"><a name="l17077"></a><span class="lineno">17077</span>&#160;                {</div>
+<div class="line"><a name="l17078"></a><span class="lineno">17078</span>&#160;                <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
+<div class="line"><a name="l17079"></a><span class="lineno">17079</span>&#160;                    {</div>
+<div class="line"><a name="l17080"></a><span class="lineno">17080</span>&#160;                        VmaBlockVector* pBlockVector = VMA_NULL;</div>
+<div class="line"><a name="l17081"></a><span class="lineno">17081</span>&#160;                        <a class="code" href="struct_vma_pool.html">VmaPool</a> hPool = allocation-&gt;GetBlock()-&gt;GetParentPool();</div>
+<div class="line"><a name="l17082"></a><span class="lineno">17082</span>&#160;                        <span class="keywordflow">if</span>(hPool != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l17083"></a><span class="lineno">17083</span>&#160;                        {</div>
+<div class="line"><a name="l17084"></a><span class="lineno">17084</span>&#160;                            pBlockVector = &amp;hPool-&gt;m_BlockVector;</div>
+<div class="line"><a name="l17085"></a><span class="lineno">17085</span>&#160;                        }</div>
+<div class="line"><a name="l17086"></a><span class="lineno">17086</span>&#160;                        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17087"></a><span class="lineno">17087</span>&#160;                        {</div>
+<div class="line"><a name="l17088"></a><span class="lineno">17088</span>&#160;                            <span class="keyword">const</span> uint32_t memTypeIndex = allocation-&gt;GetMemoryTypeIndex();</div>
+<div class="line"><a name="l17089"></a><span class="lineno">17089</span>&#160;                            pBlockVector = m_pBlockVectors[memTypeIndex];</div>
+<div class="line"><a name="l17090"></a><span class="lineno">17090</span>&#160;                        }</div>
+<div class="line"><a name="l17091"></a><span class="lineno">17091</span>&#160;                        pBlockVector-&gt;Free(allocation);</div>
+<div class="line"><a name="l17092"></a><span class="lineno">17092</span>&#160;                    }</div>
+<div class="line"><a name="l17093"></a><span class="lineno">17093</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17094"></a><span class="lineno">17094</span>&#160;                <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
+<div class="line"><a name="l17095"></a><span class="lineno">17095</span>&#160;                    FreeDedicatedMemory(allocation);</div>
+<div class="line"><a name="l17096"></a><span class="lineno">17096</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17097"></a><span class="lineno">17097</span>&#160;                <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l17098"></a><span class="lineno">17098</span>&#160;                    VMA_ASSERT(0);</div>
+<div class="line"><a name="l17099"></a><span class="lineno">17099</span>&#160;                }</div>
+<div class="line"><a name="l17100"></a><span class="lineno">17100</span>&#160;            }</div>
+<div class="line"><a name="l17101"></a><span class="lineno">17101</span>&#160; </div>
+<div class="line"><a name="l17102"></a><span class="lineno">17102</span>&#160;            <span class="comment">// Do this regardless of whether the allocation is lost. Lost allocations still account to Budget.AllocationBytes.</span></div>
+<div class="line"><a name="l17103"></a><span class="lineno">17103</span>&#160;            m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(allocation-&gt;GetMemoryTypeIndex()), allocation-&gt;GetSize());</div>
+<div class="line"><a name="l17104"></a><span class="lineno">17104</span>&#160;            allocation-&gt;SetUserData(<span class="keyword">this</span>, VMA_NULL);</div>
+<div class="line"><a name="l17105"></a><span class="lineno">17105</span>&#160;            m_AllocationObjectAllocator.Free(allocation);</div>
+<div class="line"><a name="l17106"></a><span class="lineno">17106</span>&#160;        }</div>
+<div class="line"><a name="l17107"></a><span class="lineno">17107</span>&#160;    }</div>
+<div class="line"><a name="l17108"></a><span class="lineno">17108</span>&#160;}</div>
+<div class="line"><a name="l17109"></a><span class="lineno">17109</span>&#160; </div>
+<div class="line"><a name="l17110"></a><span class="lineno">17110</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::CalculateStats(<a class="code" href="struct_vma_stats.html">VmaStats</a>* pStats)</div>
+<div class="line"><a name="l17111"></a><span class="lineno">17111</span>&#160;{</div>
+<div class="line"><a name="l17112"></a><span class="lineno">17112</span>&#160;    <span class="comment">// Initialize.</span></div>
+<div class="line"><a name="l17113"></a><span class="lineno">17113</span>&#160;    InitStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>);</div>
+<div class="line"><a name="l17114"></a><span class="lineno">17114</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; VK_MAX_MEMORY_TYPES; ++i)</div>
+<div class="line"><a name="l17115"></a><span class="lineno">17115</span>&#160;        InitStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[i]);</div>
+<div class="line"><a name="l17116"></a><span class="lineno">17116</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; VK_MAX_MEMORY_HEAPS; ++i)</div>
+<div class="line"><a name="l17117"></a><span class="lineno">17117</span>&#160;        InitStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[i]);</div>
+<div class="line"><a name="l17118"></a><span class="lineno">17118</span>&#160; </div>
+<div class="line"><a name="l17119"></a><span class="lineno">17119</span>&#160;    <span class="comment">// Process default pools.</span></div>
+<div class="line"><a name="l17120"></a><span class="lineno">17120</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
+<div class="line"><a name="l17121"></a><span class="lineno">17121</span>&#160;    {</div>
+<div class="line"><a name="l17122"></a><span class="lineno">17122</span>&#160;        VmaBlockVector* <span class="keyword">const</span> pBlockVector = m_pBlockVectors[memTypeIndex];</div>
+<div class="line"><a name="l17123"></a><span class="lineno">17123</span>&#160;        VMA_ASSERT(pBlockVector);</div>
+<div class="line"><a name="l17124"></a><span class="lineno">17124</span>&#160;        pBlockVector-&gt;AddStats(pStats);</div>
+<div class="line"><a name="l17125"></a><span class="lineno">17125</span>&#160;    }</div>
+<div class="line"><a name="l17126"></a><span class="lineno">17126</span>&#160; </div>
+<div class="line"><a name="l17127"></a><span class="lineno">17127</span>&#160;    <span class="comment">// Process custom pools.</span></div>
+<div class="line"><a name="l17128"></a><span class="lineno">17128</span>&#160;    {</div>
+<div class="line"><a name="l17129"></a><span class="lineno">17129</span>&#160;        VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);</div>
+<div class="line"><a name="l17130"></a><span class="lineno">17130</span>&#160;        <span class="keywordflow">for</span>(<a class="code" href="struct_vma_pool.html">VmaPool</a> pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool))</div>
+<div class="line"><a name="l17131"></a><span class="lineno">17131</span>&#160;        {</div>
+<div class="line"><a name="l17132"></a><span class="lineno">17132</span>&#160;            pool-&gt;m_BlockVector.AddStats(pStats);</div>
+<div class="line"><a name="l17133"></a><span class="lineno">17133</span>&#160;        }</div>
+<div class="line"><a name="l17134"></a><span class="lineno">17134</span>&#160;    }</div>
+<div class="line"><a name="l17135"></a><span class="lineno">17135</span>&#160; </div>
+<div class="line"><a name="l17136"></a><span class="lineno">17136</span>&#160;    <span class="comment">// Process dedicated allocations.</span></div>
+<div class="line"><a name="l17137"></a><span class="lineno">17137</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
+<div class="line"><a name="l17138"></a><span class="lineno">17138</span>&#160;    {</div>
+<div class="line"><a name="l17139"></a><span class="lineno">17139</span>&#160;        <span class="keyword">const</span> uint32_t memHeapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
+<div class="line"><a name="l17140"></a><span class="lineno">17140</span>&#160;        VmaMutexLockRead dedicatedAllocationsLock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
+<div class="line"><a name="l17141"></a><span class="lineno">17141</span>&#160;        DedicatedAllocationLinkedList&amp; dedicatedAllocList = m_DedicatedAllocations[memTypeIndex];</div>
+<div class="line"><a name="l17142"></a><span class="lineno">17142</span>&#160;        <span class="keywordflow">for</span>(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> alloc = dedicatedAllocList.Front();</div>
+<div class="line"><a name="l17143"></a><span class="lineno">17143</span>&#160;            alloc != VMA_NULL; alloc = dedicatedAllocList.GetNext(alloc))</div>
+<div class="line"><a name="l17144"></a><span class="lineno">17144</span>&#160;        {</div>
+<div class="line"><a name="l17145"></a><span class="lineno">17145</span>&#160;            <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> allocationStatInfo;</div>
+<div class="line"><a name="l17146"></a><span class="lineno">17146</span>&#160;            alloc-&gt;DedicatedAllocCalcStatsInfo(allocationStatInfo);</div>
+<div class="line"><a name="l17147"></a><span class="lineno">17147</span>&#160;            VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>, allocationStatInfo);</div>
+<div class="line"><a name="l17148"></a><span class="lineno">17148</span>&#160;            VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[memTypeIndex], allocationStatInfo);</div>
+<div class="line"><a name="l17149"></a><span class="lineno">17149</span>&#160;            VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[memHeapIndex], allocationStatInfo);</div>
+<div class="line"><a name="l17150"></a><span class="lineno">17150</span>&#160;        }</div>
+<div class="line"><a name="l17151"></a><span class="lineno">17151</span>&#160;    }</div>
+<div class="line"><a name="l17152"></a><span class="lineno">17152</span>&#160; </div>
+<div class="line"><a name="l17153"></a><span class="lineno">17153</span>&#160;    <span class="comment">// Postprocess.</span></div>
+<div class="line"><a name="l17154"></a><span class="lineno">17154</span>&#160;    VmaPostprocessCalcStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>);</div>
+<div class="line"><a name="l17155"></a><span class="lineno">17155</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; GetMemoryTypeCount(); ++i)</div>
+<div class="line"><a name="l17156"></a><span class="lineno">17156</span>&#160;        VmaPostprocessCalcStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[i]);</div>
+<div class="line"><a name="l17157"></a><span class="lineno">17157</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; GetMemoryHeapCount(); ++i)</div>
+<div class="line"><a name="l17158"></a><span class="lineno">17158</span>&#160;        VmaPostprocessCalcStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[i]);</div>
+<div class="line"><a name="l17159"></a><span class="lineno">17159</span>&#160;}</div>
+<div class="line"><a name="l17160"></a><span class="lineno">17160</span>&#160; </div>
+<div class="line"><a name="l17161"></a><span class="lineno">17161</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::GetBudget(<a class="code" href="struct_vma_budget.html">VmaBudget</a>* outBudget, uint32_t firstHeap, uint32_t heapCount)</div>
+<div class="line"><a name="l17162"></a><span class="lineno">17162</span>&#160;{</div>
+<div class="line"><a name="l17163"></a><span class="lineno">17163</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l17164"></a><span class="lineno">17164</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget)</div>
+<div class="line"><a name="l17165"></a><span class="lineno">17165</span>&#160;    {</div>
+<div class="line"><a name="l17166"></a><span class="lineno">17166</span>&#160;        <span class="keywordflow">if</span>(m_Budget.m_OperationsSinceBudgetFetch &lt; 30)</div>
+<div class="line"><a name="l17167"></a><span class="lineno">17167</span>&#160;        {</div>
+<div class="line"><a name="l17168"></a><span class="lineno">17168</span>&#160;            VmaMutexLockRead lockRead(m_Budget.m_BudgetMutex, m_UseMutex);</div>
+<div class="line"><a name="l17169"></a><span class="lineno">17169</span>&#160;            <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; heapCount; ++i, ++outBudget)</div>
+<div class="line"><a name="l17170"></a><span class="lineno">17170</span>&#160;            {</div>
+<div class="line"><a name="l17171"></a><span class="lineno">17171</span>&#160;                <span class="keyword">const</span> uint32_t heapIndex = firstHeap + i;</div>
+<div class="line"><a name="l17172"></a><span class="lineno">17172</span>&#160; </div>
+<div class="line"><a name="l17173"></a><span class="lineno">17173</span>&#160;                outBudget-&gt;<a class="code" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">blockBytes</a> = m_Budget.m_BlockBytes[heapIndex];</div>
+<div class="line"><a name="l17174"></a><span class="lineno">17174</span>&#160;                outBudget-&gt;<a class="code" href="struct_vma_budget.html#a7e2a6583ebd63e194951c542563804d8">allocationBytes</a> = m_Budget.m_AllocationBytes[heapIndex];</div>
+<div class="line"><a name="l17175"></a><span class="lineno">17175</span>&#160; </div>
+<div class="line"><a name="l17176"></a><span class="lineno">17176</span>&#160;                <span class="keywordflow">if</span>(m_Budget.m_VulkanUsage[heapIndex] + outBudget-&gt;<a class="code" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">blockBytes</a> &gt; m_Budget.m_BlockBytesAtBudgetFetch[heapIndex])</div>
+<div class="line"><a name="l17177"></a><span class="lineno">17177</span>&#160;                {</div>
+<div class="line"><a name="l17178"></a><span class="lineno">17178</span>&#160;                    outBudget-&gt;<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a> = m_Budget.m_VulkanUsage[heapIndex] +</div>
+<div class="line"><a name="l17179"></a><span class="lineno">17179</span>&#160;                        outBudget-&gt;<a class="code" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">blockBytes</a> - m_Budget.m_BlockBytesAtBudgetFetch[heapIndex];</div>
+<div class="line"><a name="l17180"></a><span class="lineno">17180</span>&#160;                }</div>
+<div class="line"><a name="l17181"></a><span class="lineno">17181</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17182"></a><span class="lineno">17182</span>&#160;                {</div>
+<div class="line"><a name="l17183"></a><span class="lineno">17183</span>&#160;                    outBudget-&gt;<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a> = 0;</div>
+<div class="line"><a name="l17184"></a><span class="lineno">17184</span>&#160;                }</div>
+<div class="line"><a name="l17185"></a><span class="lineno">17185</span>&#160; </div>
+<div class="line"><a name="l17186"></a><span class="lineno">17186</span>&#160;                <span class="comment">// Have to take MIN with heap size because explicit HeapSizeLimit is included in it.</span></div>
+<div class="line"><a name="l17187"></a><span class="lineno">17187</span>&#160;                outBudget-&gt;<a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a> = VMA_MIN(</div>
+<div class="line"><a name="l17188"></a><span class="lineno">17188</span>&#160;                    m_Budget.m_VulkanBudget[heapIndex], m_MemProps.memoryHeaps[heapIndex].size);</div>
+<div class="line"><a name="l17189"></a><span class="lineno">17189</span>&#160;            }</div>
+<div class="line"><a name="l17190"></a><span class="lineno">17190</span>&#160;        }</div>
+<div class="line"><a name="l17191"></a><span class="lineno">17191</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17192"></a><span class="lineno">17192</span>&#160;        {</div>
+<div class="line"><a name="l17193"></a><span class="lineno">17193</span>&#160;            UpdateVulkanBudget(); <span class="comment">// Outside of mutex lock</span></div>
+<div class="line"><a name="l17194"></a><span class="lineno">17194</span>&#160;            GetBudget(outBudget, firstHeap, heapCount); <span class="comment">// Recursion</span></div>
+<div class="line"><a name="l17195"></a><span class="lineno">17195</span>&#160;        }</div>
+<div class="line"><a name="l17196"></a><span class="lineno">17196</span>&#160;    }</div>
+<div class="line"><a name="l17197"></a><span class="lineno">17197</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17198"></a><span class="lineno">17198</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l17199"></a><span class="lineno">17199</span>&#160;    {</div>
+<div class="line"><a name="l17200"></a><span class="lineno">17200</span>&#160;        <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; heapCount; ++i, ++outBudget)</div>
+<div class="line"><a name="l17201"></a><span class="lineno">17201</span>&#160;        {</div>
+<div class="line"><a name="l17202"></a><span class="lineno">17202</span>&#160;            <span class="keyword">const</span> uint32_t heapIndex = firstHeap + i;</div>
+<div class="line"><a name="l17203"></a><span class="lineno">17203</span>&#160; </div>
+<div class="line"><a name="l17204"></a><span class="lineno">17204</span>&#160;            outBudget-&gt;<a class="code" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">blockBytes</a> = m_Budget.m_BlockBytes[heapIndex];</div>
+<div class="line"><a name="l17205"></a><span class="lineno">17205</span>&#160;            outBudget-&gt;<a class="code" href="struct_vma_budget.html#a7e2a6583ebd63e194951c542563804d8">allocationBytes</a> = m_Budget.m_AllocationBytes[heapIndex];</div>
+<div class="line"><a name="l17206"></a><span class="lineno">17206</span>&#160; </div>
+<div class="line"><a name="l17207"></a><span class="lineno">17207</span>&#160;            outBudget-&gt;<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a> = outBudget-&gt;<a class="code" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">blockBytes</a>;</div>
+<div class="line"><a name="l17208"></a><span class="lineno">17208</span>&#160;            outBudget-&gt;<a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a> = m_MemProps.memoryHeaps[heapIndex].size * 8 / 10; <span class="comment">// 80% heuristics.</span></div>
+<div class="line"><a name="l17209"></a><span class="lineno">17209</span>&#160;        }</div>
+<div class="line"><a name="l17210"></a><span class="lineno">17210</span>&#160;    }</div>
+<div class="line"><a name="l17211"></a><span class="lineno">17211</span>&#160;}</div>
+<div class="line"><a name="l17212"></a><span class="lineno">17212</span>&#160; </div>
+<div class="line"><a name="l17213"></a><span class="lineno">17213</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> uint32_t VMA_VENDOR_ID_AMD = 4098;</div>
+<div class="line"><a name="l17214"></a><span class="lineno">17214</span>&#160; </div>
+<div class="line"><a name="l17215"></a><span class="lineno">17215</span>&#160;VkResult VmaAllocator_T::DefragmentationBegin(</div>
+<div class="line"><a name="l17216"></a><span class="lineno">17216</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a>&amp; info,</div>
+<div class="line"><a name="l17217"></a><span class="lineno">17217</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats,</div>
+<div class="line"><a name="l17218"></a><span class="lineno">17218</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a>* pContext)</div>
+<div class="line"><a name="l17219"></a><span class="lineno">17219</span>&#160;{</div>
+<div class="line"><a name="l17220"></a><span class="lineno">17220</span>&#160;    <span class="keywordflow">if</span>(info.<a class="code" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">pAllocationsChanged</a> != VMA_NULL)</div>
+<div class="line"><a name="l17221"></a><span class="lineno">17221</span>&#160;    {</div>
+<div class="line"><a name="l17222"></a><span class="lineno">17222</span>&#160;        memset(info.<a class="code" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">pAllocationsChanged</a>, 0, info.<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a> * <span class="keyword">sizeof</span>(VkBool32));</div>
+<div class="line"><a name="l17223"></a><span class="lineno">17223</span>&#160;    }</div>
+<div class="line"><a name="l17224"></a><span class="lineno">17224</span>&#160; </div>
+<div class="line"><a name="l17225"></a><span class="lineno">17225</span>&#160;    *pContext = vma_new(<span class="keyword">this</span>, VmaDefragmentationContext_T)(</div>
+<div class="line"><a name="l17226"></a><span class="lineno">17226</span>&#160;        <span class="keyword">this</span>, m_CurrentFrameIndex.load(), info.<a class="code" href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">flags</a>, pStats);</div>
+<div class="line"><a name="l17227"></a><span class="lineno">17227</span>&#160; </div>
+<div class="line"><a name="l17228"></a><span class="lineno">17228</span>&#160;    (*pContext)-&gt;AddPools(info.<a class="code" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">poolCount</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b">pPools</a>);</div>
+<div class="line"><a name="l17229"></a><span class="lineno">17229</span>&#160;    (*pContext)-&gt;AddAllocations(</div>
+<div class="line"><a name="l17230"></a><span class="lineno">17230</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">pAllocations</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">pAllocationsChanged</a>);</div>
+<div class="line"><a name="l17231"></a><span class="lineno">17231</span>&#160; </div>
+<div class="line"><a name="l17232"></a><span class="lineno">17232</span>&#160;    VkResult res = (*pContext)-&gt;Defragment(</div>
+<div class="line"><a name="l17233"></a><span class="lineno">17233</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">maxCpuBytesToMove</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a>,</div>
+<div class="line"><a name="l17234"></a><span class="lineno">17234</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08">maxGpuBytesToMove</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6">maxGpuAllocationsToMove</a>,</div>
+<div class="line"><a name="l17235"></a><span class="lineno">17235</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">commandBuffer</a>, pStats, info.<a class="code" href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">flags</a>);</div>
+<div class="line"><a name="l17236"></a><span class="lineno">17236</span>&#160; </div>
+<div class="line"><a name="l17237"></a><span class="lineno">17237</span>&#160;    <span class="keywordflow">if</span>(res != VK_NOT_READY)</div>
+<div class="line"><a name="l17238"></a><span class="lineno">17238</span>&#160;    {</div>
+<div class="line"><a name="l17239"></a><span class="lineno">17239</span>&#160;        vma_delete(<span class="keyword">this</span>, *pContext);</div>
+<div class="line"><a name="l17240"></a><span class="lineno">17240</span>&#160;        *pContext = VMA_NULL;</div>
+<div class="line"><a name="l17241"></a><span class="lineno">17241</span>&#160;    }</div>
+<div class="line"><a name="l17242"></a><span class="lineno">17242</span>&#160; </div>
+<div class="line"><a name="l17243"></a><span class="lineno">17243</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l17244"></a><span class="lineno">17244</span>&#160;}</div>
+<div class="line"><a name="l17245"></a><span class="lineno">17245</span>&#160; </div>
+<div class="line"><a name="l17246"></a><span class="lineno">17246</span>&#160;VkResult VmaAllocator_T::DefragmentationEnd(</div>
+<div class="line"><a name="l17247"></a><span class="lineno">17247</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</div>
+<div class="line"><a name="l17248"></a><span class="lineno">17248</span>&#160;{</div>
+<div class="line"><a name="l17249"></a><span class="lineno">17249</span>&#160;    vma_delete(<span class="keyword">this</span>, context);</div>
+<div class="line"><a name="l17250"></a><span class="lineno">17250</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l17251"></a><span class="lineno">17251</span>&#160;}</div>
+<div class="line"><a name="l17252"></a><span class="lineno">17252</span>&#160; </div>
+<div class="line"><a name="l17253"></a><span class="lineno">17253</span>&#160;VkResult VmaAllocator_T::DefragmentationPassBegin(</div>
+<div class="line"><a name="l17254"></a><span class="lineno">17254</span>&#160;    <a class="code" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a>* pInfo,</div>
+<div class="line"><a name="l17255"></a><span class="lineno">17255</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</div>
+<div class="line"><a name="l17256"></a><span class="lineno">17256</span>&#160;{</div>
+<div class="line"><a name="l17257"></a><span class="lineno">17257</span>&#160;    <span class="keywordflow">return</span> context-&gt;DefragmentPassBegin(pInfo);</div>
+<div class="line"><a name="l17258"></a><span class="lineno">17258</span>&#160;}</div>
+<div class="line"><a name="l17259"></a><span class="lineno">17259</span>&#160;VkResult VmaAllocator_T::DefragmentationPassEnd(</div>
+<div class="line"><a name="l17260"></a><span class="lineno">17260</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</div>
+<div class="line"><a name="l17261"></a><span class="lineno">17261</span>&#160;{</div>
+<div class="line"><a name="l17262"></a><span class="lineno">17262</span>&#160;    <span class="keywordflow">return</span> context-&gt;DefragmentPassEnd();</div>
+<div class="line"><a name="l17263"></a><span class="lineno">17263</span>&#160; </div>
+<div class="line"><a name="l17264"></a><span class="lineno">17264</span>&#160;}</div>
+<div class="line"><a name="l17265"></a><span class="lineno">17265</span>&#160; </div>
+<div class="line"><a name="l17266"></a><span class="lineno">17266</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::GetAllocationInfo(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation, <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
+<div class="line"><a name="l17267"></a><span class="lineno">17267</span>&#160;{</div>
+<div class="line"><a name="l17268"></a><span class="lineno">17268</span>&#160;    <span class="keywordflow">if</span>(hAllocation-&gt;CanBecomeLost())</div>
+<div class="line"><a name="l17269"></a><span class="lineno">17269</span>&#160;    {</div>
+<div class="line"><a name="l17270"></a><span class="lineno">17270</span>&#160;        <span class="comment">/*</span></div>
+<div class="line"><a name="l17271"></a><span class="lineno">17271</span>&#160;<span class="comment">        Warning: This is a carefully designed algorithm.</span></div>
+<div class="line"><a name="l17272"></a><span class="lineno">17272</span>&#160;<span class="comment">        Do not modify unless you really know what you&#39;re doing :)</span></div>
+<div class="line"><a name="l17273"></a><span class="lineno">17273</span>&#160;<span class="comment">        */</span></div>
+<div class="line"><a name="l17274"></a><span class="lineno">17274</span>&#160;        <span class="keyword">const</span> uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
+<div class="line"><a name="l17275"></a><span class="lineno">17275</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
+<div class="line"><a name="l17276"></a><span class="lineno">17276</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
+<div class="line"><a name="l17277"></a><span class="lineno">17277</span>&#160;        {</div>
+<div class="line"><a name="l17278"></a><span class="lineno">17278</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == VMA_FRAME_INDEX_LOST)</div>
+<div class="line"><a name="l17279"></a><span class="lineno">17279</span>&#160;            {</div>
+<div class="line"><a name="l17280"></a><span class="lineno">17280</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">memoryType</a> = UINT32_MAX;</div>
+<div class="line"><a name="l17281"></a><span class="lineno">17281</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67">deviceMemory</a> = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l17282"></a><span class="lineno">17282</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">offset</a> = 0;</div>
+<div class="line"><a name="l17283"></a><span class="lineno">17283</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f">size</a> = hAllocation-&gt;GetSize();</div>
+<div class="line"><a name="l17284"></a><span class="lineno">17284</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a> = VMA_NULL;</div>
+<div class="line"><a name="l17285"></a><span class="lineno">17285</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">pUserData</a> = hAllocation-&gt;GetUserData();</div>
+<div class="line"><a name="l17286"></a><span class="lineno">17286</span>&#160;                <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l17287"></a><span class="lineno">17287</span>&#160;            }</div>
+<div class="line"><a name="l17288"></a><span class="lineno">17288</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</div>
+<div class="line"><a name="l17289"></a><span class="lineno">17289</span>&#160;            {</div>
+<div class="line"><a name="l17290"></a><span class="lineno">17290</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">memoryType</a> = hAllocation-&gt;GetMemoryTypeIndex();</div>
+<div class="line"><a name="l17291"></a><span class="lineno">17291</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67">deviceMemory</a> = hAllocation-&gt;GetMemory();</div>
+<div class="line"><a name="l17292"></a><span class="lineno">17292</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">offset</a> = hAllocation-&gt;GetOffset();</div>
+<div class="line"><a name="l17293"></a><span class="lineno">17293</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f">size</a> = hAllocation-&gt;GetSize();</div>
+<div class="line"><a name="l17294"></a><span class="lineno">17294</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a> = VMA_NULL;</div>
+<div class="line"><a name="l17295"></a><span class="lineno">17295</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">pUserData</a> = hAllocation-&gt;GetUserData();</div>
+<div class="line"><a name="l17296"></a><span class="lineno">17296</span>&#160;                <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l17297"></a><span class="lineno">17297</span>&#160;            }</div>
+<div class="line"><a name="l17298"></a><span class="lineno">17298</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></div>
+<div class="line"><a name="l17299"></a><span class="lineno">17299</span>&#160;            {</div>
+<div class="line"><a name="l17300"></a><span class="lineno">17300</span>&#160;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</div>
+<div class="line"><a name="l17301"></a><span class="lineno">17301</span>&#160;                {</div>
+<div class="line"><a name="l17302"></a><span class="lineno">17302</span>&#160;                    localLastUseFrameIndex = localCurrFrameIndex;</div>
+<div class="line"><a name="l17303"></a><span class="lineno">17303</span>&#160;                }</div>
+<div class="line"><a name="l17304"></a><span class="lineno">17304</span>&#160;            }</div>
+<div class="line"><a name="l17305"></a><span class="lineno">17305</span>&#160;        }</div>
+<div class="line"><a name="l17306"></a><span class="lineno">17306</span>&#160;    }</div>
+<div class="line"><a name="l17307"></a><span class="lineno">17307</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17308"></a><span class="lineno">17308</span>&#160;    {</div>
+<div class="line"><a name="l17309"></a><span class="lineno">17309</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l17310"></a><span class="lineno">17310</span>&#160;        uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
+<div class="line"><a name="l17311"></a><span class="lineno">17311</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
+<div class="line"><a name="l17312"></a><span class="lineno">17312</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
+<div class="line"><a name="l17313"></a><span class="lineno">17313</span>&#160;        {</div>
+<div class="line"><a name="l17314"></a><span class="lineno">17314</span>&#160;            VMA_ASSERT(localLastUseFrameIndex != VMA_FRAME_INDEX_LOST);</div>
+<div class="line"><a name="l17315"></a><span class="lineno">17315</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</div>
+<div class="line"><a name="l17316"></a><span class="lineno">17316</span>&#160;            {</div>
+<div class="line"><a name="l17317"></a><span class="lineno">17317</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17318"></a><span class="lineno">17318</span>&#160;            }</div>
+<div class="line"><a name="l17319"></a><span class="lineno">17319</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></div>
+<div class="line"><a name="l17320"></a><span class="lineno">17320</span>&#160;            {</div>
+<div class="line"><a name="l17321"></a><span class="lineno">17321</span>&#160;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</div>
+<div class="line"><a name="l17322"></a><span class="lineno">17322</span>&#160;                {</div>
+<div class="line"><a name="l17323"></a><span class="lineno">17323</span>&#160;                    localLastUseFrameIndex = localCurrFrameIndex;</div>
+<div class="line"><a name="l17324"></a><span class="lineno">17324</span>&#160;                }</div>
+<div class="line"><a name="l17325"></a><span class="lineno">17325</span>&#160;            }</div>
+<div class="line"><a name="l17326"></a><span class="lineno">17326</span>&#160;        }</div>
+<div class="line"><a name="l17327"></a><span class="lineno">17327</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l17328"></a><span class="lineno">17328</span>&#160; </div>
+<div class="line"><a name="l17329"></a><span class="lineno">17329</span>&#160;        pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">memoryType</a> = hAllocation-&gt;GetMemoryTypeIndex();</div>
+<div class="line"><a name="l17330"></a><span class="lineno">17330</span>&#160;        pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67">deviceMemory</a> = hAllocation-&gt;GetMemory();</div>
+<div class="line"><a name="l17331"></a><span class="lineno">17331</span>&#160;        pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">offset</a> = hAllocation-&gt;GetOffset();</div>
+<div class="line"><a name="l17332"></a><span class="lineno">17332</span>&#160;        pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f">size</a> = hAllocation-&gt;GetSize();</div>
+<div class="line"><a name="l17333"></a><span class="lineno">17333</span>&#160;        pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a> = hAllocation-&gt;GetMappedData();</div>
+<div class="line"><a name="l17334"></a><span class="lineno">17334</span>&#160;        pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">pUserData</a> = hAllocation-&gt;GetUserData();</div>
+<div class="line"><a name="l17335"></a><span class="lineno">17335</span>&#160;    }</div>
+<div class="line"><a name="l17336"></a><span class="lineno">17336</span>&#160;}</div>
+<div class="line"><a name="l17337"></a><span class="lineno">17337</span>&#160; </div>
+<div class="line"><a name="l17338"></a><span class="lineno">17338</span>&#160;<span class="keywordtype">bool</span> VmaAllocator_T::TouchAllocation(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</div>
+<div class="line"><a name="l17339"></a><span class="lineno">17339</span>&#160;{</div>
+<div class="line"><a name="l17340"></a><span class="lineno">17340</span>&#160;    <span class="comment">// This is a stripped-down version of VmaAllocator_T::GetAllocationInfo.</span></div>
+<div class="line"><a name="l17341"></a><span class="lineno">17341</span>&#160;    <span class="keywordflow">if</span>(hAllocation-&gt;CanBecomeLost())</div>
+<div class="line"><a name="l17342"></a><span class="lineno">17342</span>&#160;    {</div>
+<div class="line"><a name="l17343"></a><span class="lineno">17343</span>&#160;        uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
+<div class="line"><a name="l17344"></a><span class="lineno">17344</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
+<div class="line"><a name="l17345"></a><span class="lineno">17345</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
+<div class="line"><a name="l17346"></a><span class="lineno">17346</span>&#160;        {</div>
+<div class="line"><a name="l17347"></a><span class="lineno">17347</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == VMA_FRAME_INDEX_LOST)</div>
+<div class="line"><a name="l17348"></a><span class="lineno">17348</span>&#160;            {</div>
+<div class="line"><a name="l17349"></a><span class="lineno">17349</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l17350"></a><span class="lineno">17350</span>&#160;            }</div>
+<div class="line"><a name="l17351"></a><span class="lineno">17351</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</div>
+<div class="line"><a name="l17352"></a><span class="lineno">17352</span>&#160;            {</div>
+<div class="line"><a name="l17353"></a><span class="lineno">17353</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l17354"></a><span class="lineno">17354</span>&#160;            }</div>
+<div class="line"><a name="l17355"></a><span class="lineno">17355</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></div>
+<div class="line"><a name="l17356"></a><span class="lineno">17356</span>&#160;            {</div>
+<div class="line"><a name="l17357"></a><span class="lineno">17357</span>&#160;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</div>
+<div class="line"><a name="l17358"></a><span class="lineno">17358</span>&#160;                {</div>
+<div class="line"><a name="l17359"></a><span class="lineno">17359</span>&#160;                    localLastUseFrameIndex = localCurrFrameIndex;</div>
+<div class="line"><a name="l17360"></a><span class="lineno">17360</span>&#160;                }</div>
+<div class="line"><a name="l17361"></a><span class="lineno">17361</span>&#160;            }</div>
+<div class="line"><a name="l17362"></a><span class="lineno">17362</span>&#160;        }</div>
+<div class="line"><a name="l17363"></a><span class="lineno">17363</span>&#160;    }</div>
+<div class="line"><a name="l17364"></a><span class="lineno">17364</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17365"></a><span class="lineno">17365</span>&#160;    {</div>
+<div class="line"><a name="l17366"></a><span class="lineno">17366</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l17367"></a><span class="lineno">17367</span>&#160;        uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
+<div class="line"><a name="l17368"></a><span class="lineno">17368</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
+<div class="line"><a name="l17369"></a><span class="lineno">17369</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
+<div class="line"><a name="l17370"></a><span class="lineno">17370</span>&#160;        {</div>
+<div class="line"><a name="l17371"></a><span class="lineno">17371</span>&#160;            VMA_ASSERT(localLastUseFrameIndex != VMA_FRAME_INDEX_LOST);</div>
+<div class="line"><a name="l17372"></a><span class="lineno">17372</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</div>
+<div class="line"><a name="l17373"></a><span class="lineno">17373</span>&#160;            {</div>
+<div class="line"><a name="l17374"></a><span class="lineno">17374</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17375"></a><span class="lineno">17375</span>&#160;            }</div>
+<div class="line"><a name="l17376"></a><span class="lineno">17376</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></div>
+<div class="line"><a name="l17377"></a><span class="lineno">17377</span>&#160;            {</div>
+<div class="line"><a name="l17378"></a><span class="lineno">17378</span>&#160;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</div>
+<div class="line"><a name="l17379"></a><span class="lineno">17379</span>&#160;                {</div>
+<div class="line"><a name="l17380"></a><span class="lineno">17380</span>&#160;                    localLastUseFrameIndex = localCurrFrameIndex;</div>
+<div class="line"><a name="l17381"></a><span class="lineno">17381</span>&#160;                }</div>
+<div class="line"><a name="l17382"></a><span class="lineno">17382</span>&#160;            }</div>
+<div class="line"><a name="l17383"></a><span class="lineno">17383</span>&#160;        }</div>
+<div class="line"><a name="l17384"></a><span class="lineno">17384</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l17385"></a><span class="lineno">17385</span>&#160; </div>
+<div class="line"><a name="l17386"></a><span class="lineno">17386</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l17387"></a><span class="lineno">17387</span>&#160;    }</div>
+<div class="line"><a name="l17388"></a><span class="lineno">17388</span>&#160;}</div>
+<div class="line"><a name="l17389"></a><span class="lineno">17389</span>&#160; </div>
+<div class="line"><a name="l17390"></a><span class="lineno">17390</span>&#160;VkResult VmaAllocator_T::CreatePool(<span class="keyword">const</span> <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a>* pCreateInfo, <a class="code" href="struct_vma_pool.html">VmaPool</a>* pPool)</div>
+<div class="line"><a name="l17391"></a><span class="lineno">17391</span>&#160;{</div>
+<div class="line"><a name="l17392"></a><span class="lineno">17392</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;  CreatePool: MemoryTypeIndex=%u, flags=%u&quot;</span>, pCreateInfo-&gt;<a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a>, pCreateInfo-&gt;<a class="code" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">flags</a>);</div>
+<div class="line"><a name="l17393"></a><span class="lineno">17393</span>&#160; </div>
+<div class="line"><a name="l17394"></a><span class="lineno">17394</span>&#160;    <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> newCreateInfo = *pCreateInfo;</div>
+<div class="line"><a name="l17395"></a><span class="lineno">17395</span>&#160; </div>
+<div class="line"><a name="l17396"></a><span class="lineno">17396</span>&#160;    <span class="comment">// Protection against uninitialized new structure member. If garbage data are left there, this pointer dereference would crash.</span></div>
+<div class="line"><a name="l17397"></a><span class="lineno">17397</span>&#160;    <span class="keywordflow">if</span>(pCreateInfo-&gt;<a class="code" href="struct_vma_pool_create_info.html#af0f8c58f51a2a7a0a389dc79565044d7">pMemoryAllocateNext</a>)</div>
+<div class="line"><a name="l17398"></a><span class="lineno">17398</span>&#160;    {</div>
+<div class="line"><a name="l17399"></a><span class="lineno">17399</span>&#160;        VMA_ASSERT(((<span class="keyword">const</span> VkBaseInStructure*)pCreateInfo-&gt;<a class="code" href="struct_vma_pool_create_info.html#af0f8c58f51a2a7a0a389dc79565044d7">pMemoryAllocateNext</a>)-&gt;sType != 0);</div>
+<div class="line"><a name="l17400"></a><span class="lineno">17400</span>&#160;    }</div>
+<div class="line"><a name="l17401"></a><span class="lineno">17401</span>&#160; </div>
+<div class="line"><a name="l17402"></a><span class="lineno">17402</span>&#160;    <span class="keywordflow">if</span>(newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a> == 0)</div>
+<div class="line"><a name="l17403"></a><span class="lineno">17403</span>&#160;    {</div>
+<div class="line"><a name="l17404"></a><span class="lineno">17404</span>&#160;        newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a> = SIZE_MAX;</div>
+<div class="line"><a name="l17405"></a><span class="lineno">17405</span>&#160;    }</div>
+<div class="line"><a name="l17406"></a><span class="lineno">17406</span>&#160;    <span class="keywordflow">if</span>(newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae">minBlockCount</a> &gt; newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a>)</div>
+<div class="line"><a name="l17407"></a><span class="lineno">17407</span>&#160;    {</div>
+<div class="line"><a name="l17408"></a><span class="lineno">17408</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_INITIALIZATION_FAILED;</div>
+<div class="line"><a name="l17409"></a><span class="lineno">17409</span>&#160;    }</div>
+<div class="line"><a name="l17410"></a><span class="lineno">17410</span>&#160;    <span class="comment">// Memory type index out of range or forbidden.</span></div>
+<div class="line"><a name="l17411"></a><span class="lineno">17411</span>&#160;    <span class="keywordflow">if</span>(pCreateInfo-&gt;<a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a> &gt;= GetMemoryTypeCount() ||</div>
+<div class="line"><a name="l17412"></a><span class="lineno">17412</span>&#160;        ((1u &lt;&lt; pCreateInfo-&gt;<a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a>) &amp; m_GlobalMemoryTypeBits) == 0)</div>
+<div class="line"><a name="l17413"></a><span class="lineno">17413</span>&#160;    {</div>
+<div class="line"><a name="l17414"></a><span class="lineno">17414</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</div>
+<div class="line"><a name="l17415"></a><span class="lineno">17415</span>&#160;    }</div>
+<div class="line"><a name="l17416"></a><span class="lineno">17416</span>&#160;    <span class="keywordflow">if</span>(newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#ade3eca546f0c6ab4e8fbf20eb6d854cb">minAllocationAlignment</a> &gt; 0)</div>
+<div class="line"><a name="l17417"></a><span class="lineno">17417</span>&#160;    {</div>
+<div class="line"><a name="l17418"></a><span class="lineno">17418</span>&#160;        VMA_ASSERT(VmaIsPow2(newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#ade3eca546f0c6ab4e8fbf20eb6d854cb">minAllocationAlignment</a>));</div>
+<div class="line"><a name="l17419"></a><span class="lineno">17419</span>&#160;    }</div>
+<div class="line"><a name="l17420"></a><span class="lineno">17420</span>&#160; </div>
+<div class="line"><a name="l17421"></a><span class="lineno">17421</span>&#160;    <span class="keyword">const</span> VkDeviceSize preferredBlockSize = CalcPreferredBlockSize(newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a>);</div>
+<div class="line"><a name="l17422"></a><span class="lineno">17422</span>&#160; </div>
+<div class="line"><a name="l17423"></a><span class="lineno">17423</span>&#160;    *pPool = vma_new(<span class="keyword">this</span>, VmaPool_T)(<span class="keyword">this</span>, newCreateInfo, preferredBlockSize);</div>
+<div class="line"><a name="l17424"></a><span class="lineno">17424</span>&#160; </div>
+<div class="line"><a name="l17425"></a><span class="lineno">17425</span>&#160;    VkResult res = (*pPool)-&gt;m_BlockVector.CreateMinBlocks();</div>
+<div class="line"><a name="l17426"></a><span class="lineno">17426</span>&#160;    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l17427"></a><span class="lineno">17427</span>&#160;    {</div>
+<div class="line"><a name="l17428"></a><span class="lineno">17428</span>&#160;        vma_delete(<span class="keyword">this</span>, *pPool);</div>
+<div class="line"><a name="l17429"></a><span class="lineno">17429</span>&#160;        *pPool = VMA_NULL;</div>
+<div class="line"><a name="l17430"></a><span class="lineno">17430</span>&#160;        <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l17431"></a><span class="lineno">17431</span>&#160;    }</div>
+<div class="line"><a name="l17432"></a><span class="lineno">17432</span>&#160; </div>
+<div class="line"><a name="l17433"></a><span class="lineno">17433</span>&#160;    <span class="comment">// Add to m_Pools.</span></div>
+<div class="line"><a name="l17434"></a><span class="lineno">17434</span>&#160;    {</div>
+<div class="line"><a name="l17435"></a><span class="lineno">17435</span>&#160;        VmaMutexLockWrite lock(m_PoolsMutex, m_UseMutex);</div>
+<div class="line"><a name="l17436"></a><span class="lineno">17436</span>&#160;        (*pPool)-&gt;SetId(m_NextPoolId++);</div>
+<div class="line"><a name="l17437"></a><span class="lineno">17437</span>&#160;        m_Pools.PushBack(*pPool);</div>
+<div class="line"><a name="l17438"></a><span class="lineno">17438</span>&#160;    }</div>
+<div class="line"><a name="l17439"></a><span class="lineno">17439</span>&#160; </div>
+<div class="line"><a name="l17440"></a><span class="lineno">17440</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l17441"></a><span class="lineno">17441</span>&#160;}</div>
+<div class="line"><a name="l17442"></a><span class="lineno">17442</span>&#160; </div>
+<div class="line"><a name="l17443"></a><span class="lineno">17443</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::DestroyPool(<a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</div>
+<div class="line"><a name="l17444"></a><span class="lineno">17444</span>&#160;{</div>
+<div class="line"><a name="l17445"></a><span class="lineno">17445</span>&#160;    <span class="comment">// Remove from m_Pools.</span></div>
+<div class="line"><a name="l17446"></a><span class="lineno">17446</span>&#160;    {</div>
+<div class="line"><a name="l17447"></a><span class="lineno">17447</span>&#160;        VmaMutexLockWrite lock(m_PoolsMutex, m_UseMutex);</div>
+<div class="line"><a name="l17448"></a><span class="lineno">17448</span>&#160;        m_Pools.Remove(pool);</div>
+<div class="line"><a name="l17449"></a><span class="lineno">17449</span>&#160;    }</div>
+<div class="line"><a name="l17450"></a><span class="lineno">17450</span>&#160; </div>
+<div class="line"><a name="l17451"></a><span class="lineno">17451</span>&#160;    vma_delete(<span class="keyword">this</span>, pool);</div>
+<div class="line"><a name="l17452"></a><span class="lineno">17452</span>&#160;}</div>
+<div class="line"><a name="l17453"></a><span class="lineno">17453</span>&#160; </div>
+<div class="line"><a name="l17454"></a><span class="lineno">17454</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::GetPoolStats(<a class="code" href="struct_vma_pool.html">VmaPool</a> pool, <a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>* pPoolStats)</div>
+<div class="line"><a name="l17455"></a><span class="lineno">17455</span>&#160;{</div>
+<div class="line"><a name="l17456"></a><span class="lineno">17456</span>&#160;    pool-&gt;m_BlockVector.GetPoolStats(pPoolStats);</div>
+<div class="line"><a name="l17457"></a><span class="lineno">17457</span>&#160;}</div>
+<div class="line"><a name="l17458"></a><span class="lineno">17458</span>&#160; </div>
+<div class="line"><a name="l17459"></a><span class="lineno">17459</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::SetCurrentFrameIndex(uint32_t frameIndex)</div>
+<div class="line"><a name="l17460"></a><span class="lineno">17460</span>&#160;{</div>
+<div class="line"><a name="l17461"></a><span class="lineno">17461</span>&#160;    m_CurrentFrameIndex.store(frameIndex);</div>
+<div class="line"><a name="l17462"></a><span class="lineno">17462</span>&#160; </div>
+<div class="line"><a name="l17463"></a><span class="lineno">17463</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l17464"></a><span class="lineno">17464</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget)</div>
+<div class="line"><a name="l17465"></a><span class="lineno">17465</span>&#160;    {</div>
+<div class="line"><a name="l17466"></a><span class="lineno">17466</span>&#160;        UpdateVulkanBudget();</div>
+<div class="line"><a name="l17467"></a><span class="lineno">17467</span>&#160;    }</div>
+<div class="line"><a name="l17468"></a><span class="lineno">17468</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l17469"></a><span class="lineno">17469</span>&#160;}</div>
+<div class="line"><a name="l17470"></a><span class="lineno">17470</span>&#160; </div>
+<div class="line"><a name="l17471"></a><span class="lineno">17471</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::MakePoolAllocationsLost(</div>
+<div class="line"><a name="l17472"></a><span class="lineno">17472</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> hPool,</div>
+<div class="line"><a name="l17473"></a><span class="lineno">17473</span>&#160;    <span class="keywordtype">size_t</span>* pLostAllocationCount)</div>
+<div class="line"><a name="l17474"></a><span class="lineno">17474</span>&#160;{</div>
+<div class="line"><a name="l17475"></a><span class="lineno">17475</span>&#160;    hPool-&gt;m_BlockVector.MakePoolAllocationsLost(</div>
+<div class="line"><a name="l17476"></a><span class="lineno">17476</span>&#160;        m_CurrentFrameIndex.load(),</div>
+<div class="line"><a name="l17477"></a><span class="lineno">17477</span>&#160;        pLostAllocationCount);</div>
+<div class="line"><a name="l17478"></a><span class="lineno">17478</span>&#160;}</div>
+<div class="line"><a name="l17479"></a><span class="lineno">17479</span>&#160; </div>
+<div class="line"><a name="l17480"></a><span class="lineno">17480</span>&#160;VkResult VmaAllocator_T::CheckPoolCorruption(<a class="code" href="struct_vma_pool.html">VmaPool</a> hPool)</div>
+<div class="line"><a name="l17481"></a><span class="lineno">17481</span>&#160;{</div>
+<div class="line"><a name="l17482"></a><span class="lineno">17482</span>&#160;    <span class="keywordflow">return</span> hPool-&gt;m_BlockVector.CheckCorruption();</div>
+<div class="line"><a name="l17483"></a><span class="lineno">17483</span>&#160;}</div>
+<div class="line"><a name="l17484"></a><span class="lineno">17484</span>&#160; </div>
+<div class="line"><a name="l17485"></a><span class="lineno">17485</span>&#160;VkResult VmaAllocator_T::CheckCorruption(uint32_t memoryTypeBits)</div>
+<div class="line"><a name="l17486"></a><span class="lineno">17486</span>&#160;{</div>
+<div class="line"><a name="l17487"></a><span class="lineno">17487</span>&#160;    VkResult finalRes = VK_ERROR_FEATURE_NOT_PRESENT;</div>
+<div class="line"><a name="l17488"></a><span class="lineno">17488</span>&#160; </div>
+<div class="line"><a name="l17489"></a><span class="lineno">17489</span>&#160;    <span class="comment">// Process default pools.</span></div>
+<div class="line"><a name="l17490"></a><span class="lineno">17490</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
+<div class="line"><a name="l17491"></a><span class="lineno">17491</span>&#160;    {</div>
+<div class="line"><a name="l17492"></a><span class="lineno">17492</span>&#160;        <span class="keywordflow">if</span>(((1u &lt;&lt; memTypeIndex) &amp; memoryTypeBits) != 0)</div>
+<div class="line"><a name="l17493"></a><span class="lineno">17493</span>&#160;        {</div>
+<div class="line"><a name="l17494"></a><span class="lineno">17494</span>&#160;            VmaBlockVector* <span class="keyword">const</span> pBlockVector = m_pBlockVectors[memTypeIndex];</div>
+<div class="line"><a name="l17495"></a><span class="lineno">17495</span>&#160;            VMA_ASSERT(pBlockVector);</div>
+<div class="line"><a name="l17496"></a><span class="lineno">17496</span>&#160;            VkResult localRes = pBlockVector-&gt;CheckCorruption();</div>
+<div class="line"><a name="l17497"></a><span class="lineno">17497</span>&#160;            <span class="keywordflow">switch</span>(localRes)</div>
+<div class="line"><a name="l17498"></a><span class="lineno">17498</span>&#160;            {</div>
+<div class="line"><a name="l17499"></a><span class="lineno">17499</span>&#160;            <span class="keywordflow">case</span> VK_ERROR_FEATURE_NOT_PRESENT:</div>
+<div class="line"><a name="l17500"></a><span class="lineno">17500</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17501"></a><span class="lineno">17501</span>&#160;            <span class="keywordflow">case</span> VK_SUCCESS:</div>
+<div class="line"><a name="l17502"></a><span class="lineno">17502</span>&#160;                finalRes = VK_SUCCESS;</div>
+<div class="line"><a name="l17503"></a><span class="lineno">17503</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17504"></a><span class="lineno">17504</span>&#160;            <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l17505"></a><span class="lineno">17505</span>&#160;                <span class="keywordflow">return</span> localRes;</div>
+<div class="line"><a name="l17506"></a><span class="lineno">17506</span>&#160;            }</div>
+<div class="line"><a name="l17507"></a><span class="lineno">17507</span>&#160;        }</div>
+<div class="line"><a name="l17508"></a><span class="lineno">17508</span>&#160;    }</div>
+<div class="line"><a name="l17509"></a><span class="lineno">17509</span>&#160; </div>
+<div class="line"><a name="l17510"></a><span class="lineno">17510</span>&#160;    <span class="comment">// Process custom pools.</span></div>
+<div class="line"><a name="l17511"></a><span class="lineno">17511</span>&#160;    {</div>
+<div class="line"><a name="l17512"></a><span class="lineno">17512</span>&#160;        VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);</div>
+<div class="line"><a name="l17513"></a><span class="lineno">17513</span>&#160;        <span class="keywordflow">for</span>(<a class="code" href="struct_vma_pool.html">VmaPool</a> pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool))</div>
+<div class="line"><a name="l17514"></a><span class="lineno">17514</span>&#160;        {</div>
+<div class="line"><a name="l17515"></a><span class="lineno">17515</span>&#160;            <span class="keywordflow">if</span>(((1u &lt;&lt; pool-&gt;m_BlockVector.GetMemoryTypeIndex()) &amp; memoryTypeBits) != 0)</div>
+<div class="line"><a name="l17516"></a><span class="lineno">17516</span>&#160;            {</div>
+<div class="line"><a name="l17517"></a><span class="lineno">17517</span>&#160;                VkResult localRes = pool-&gt;m_BlockVector.CheckCorruption();</div>
+<div class="line"><a name="l17518"></a><span class="lineno">17518</span>&#160;                <span class="keywordflow">switch</span>(localRes)</div>
+<div class="line"><a name="l17519"></a><span class="lineno">17519</span>&#160;                {</div>
+<div class="line"><a name="l17520"></a><span class="lineno">17520</span>&#160;                <span class="keywordflow">case</span> VK_ERROR_FEATURE_NOT_PRESENT:</div>
+<div class="line"><a name="l17521"></a><span class="lineno">17521</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17522"></a><span class="lineno">17522</span>&#160;                <span class="keywordflow">case</span> VK_SUCCESS:</div>
+<div class="line"><a name="l17523"></a><span class="lineno">17523</span>&#160;                    finalRes = VK_SUCCESS;</div>
+<div class="line"><a name="l17524"></a><span class="lineno">17524</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17525"></a><span class="lineno">17525</span>&#160;                <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l17526"></a><span class="lineno">17526</span>&#160;                    <span class="keywordflow">return</span> localRes;</div>
+<div class="line"><a name="l17527"></a><span class="lineno">17527</span>&#160;                }</div>
+<div class="line"><a name="l17528"></a><span class="lineno">17528</span>&#160;            }</div>
+<div class="line"><a name="l17529"></a><span class="lineno">17529</span>&#160;        }</div>
+<div class="line"><a name="l17530"></a><span class="lineno">17530</span>&#160;    }</div>
+<div class="line"><a name="l17531"></a><span class="lineno">17531</span>&#160; </div>
+<div class="line"><a name="l17532"></a><span class="lineno">17532</span>&#160;    <span class="keywordflow">return</span> finalRes;</div>
+<div class="line"><a name="l17533"></a><span class="lineno">17533</span>&#160;}</div>
+<div class="line"><a name="l17534"></a><span class="lineno">17534</span>&#160; </div>
+<div class="line"><a name="l17535"></a><span class="lineno">17535</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::CreateLostAllocation(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
+<div class="line"><a name="l17536"></a><span class="lineno">17536</span>&#160;{</div>
+<div class="line"><a name="l17537"></a><span class="lineno">17537</span>&#160;    *pAllocation = m_AllocationObjectAllocator.Allocate(VMA_FRAME_INDEX_LOST, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l17538"></a><span class="lineno">17538</span>&#160;    (*pAllocation)-&gt;InitLost();</div>
+<div class="line"><a name="l17539"></a><span class="lineno">17539</span>&#160;}</div>
+<div class="line"><a name="l17540"></a><span class="lineno">17540</span>&#160; </div>
+<div class="line"><a name="l17541"></a><span class="lineno">17541</span>&#160;<span class="comment">// An object that increments given atomic but decrements it back in the destructor unless Commit() is called.</span></div>
+<div class="line"><a name="l17542"></a><span class="lineno">17542</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a name="l17543"></a><span class="lineno">17543</span>&#160;<span class="keyword">struct </span>AtomicTransactionalIncrement</div>
+<div class="line"><a name="l17544"></a><span class="lineno">17544</span>&#160;{</div>
+<div class="line"><a name="l17545"></a><span class="lineno">17545</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l17546"></a><span class="lineno">17546</span>&#160;    <span class="keyword">typedef</span> std::atomic&lt;T&gt; AtomicT;</div>
+<div class="line"><a name="l17547"></a><span class="lineno">17547</span>&#160;    ~AtomicTransactionalIncrement()</div>
+<div class="line"><a name="l17548"></a><span class="lineno">17548</span>&#160;    {</div>
+<div class="line"><a name="l17549"></a><span class="lineno">17549</span>&#160;        <span class="keywordflow">if</span>(m_Atomic)</div>
+<div class="line"><a name="l17550"></a><span class="lineno">17550</span>&#160;            --(*m_Atomic);</div>
+<div class="line"><a name="l17551"></a><span class="lineno">17551</span>&#160;    }</div>
+<div class="line"><a name="l17552"></a><span class="lineno">17552</span>&#160;    T Increment(AtomicT* atomic)</div>
+<div class="line"><a name="l17553"></a><span class="lineno">17553</span>&#160;    {</div>
+<div class="line"><a name="l17554"></a><span class="lineno">17554</span>&#160;        m_Atomic = atomic;</div>
+<div class="line"><a name="l17555"></a><span class="lineno">17555</span>&#160;        <span class="keywordflow">return</span> m_Atomic-&gt;fetch_add(1);</div>
+<div class="line"><a name="l17556"></a><span class="lineno">17556</span>&#160;    }</div>
+<div class="line"><a name="l17557"></a><span class="lineno">17557</span>&#160;    <span class="keywordtype">void</span> Commit()</div>
+<div class="line"><a name="l17558"></a><span class="lineno">17558</span>&#160;    {</div>
+<div class="line"><a name="l17559"></a><span class="lineno">17559</span>&#160;        m_Atomic = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l17560"></a><span class="lineno">17560</span>&#160;    }</div>
+<div class="line"><a name="l17561"></a><span class="lineno">17561</span>&#160; </div>
+<div class="line"><a name="l17562"></a><span class="lineno">17562</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l17563"></a><span class="lineno">17563</span>&#160;    AtomicT* m_Atomic = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l17564"></a><span class="lineno">17564</span>&#160;};</div>
+<div class="line"><a name="l17565"></a><span class="lineno">17565</span>&#160; </div>
+<div class="line"><a name="l17566"></a><span class="lineno">17566</span>&#160;VkResult VmaAllocator_T::AllocateVulkanMemory(<span class="keyword">const</span> VkMemoryAllocateInfo* pAllocateInfo, VkDeviceMemory* pMemory)</div>
+<div class="line"><a name="l17567"></a><span class="lineno">17567</span>&#160;{</div>
+<div class="line"><a name="l17568"></a><span class="lineno">17568</span>&#160;    AtomicTransactionalIncrement&lt;uint32_t&gt; deviceMemoryCountIncrement;</div>
+<div class="line"><a name="l17569"></a><span class="lineno">17569</span>&#160;    <span class="keyword">const</span> uint64_t prevDeviceMemoryCount = deviceMemoryCountIncrement.Increment(&amp;m_DeviceMemoryCount);</div>
+<div class="line"><a name="l17570"></a><span class="lineno">17570</span>&#160;<span class="preprocessor">#if VMA_DEBUG_DONT_EXCEED_MAX_MEMORY_ALLOCATION_COUNT</span></div>
+<div class="line"><a name="l17571"></a><span class="lineno">17571</span>&#160;    <span class="keywordflow">if</span>(prevDeviceMemoryCount &gt;= m_PhysicalDeviceProperties.limits.maxMemoryAllocationCount)</div>
+<div class="line"><a name="l17572"></a><span class="lineno">17572</span>&#160;    {</div>
+<div class="line"><a name="l17573"></a><span class="lineno">17573</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_TOO_MANY_OBJECTS;</div>
+<div class="line"><a name="l17574"></a><span class="lineno">17574</span>&#160;    }</div>
+<div class="line"><a name="l17575"></a><span class="lineno">17575</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l17576"></a><span class="lineno">17576</span>&#160; </div>
+<div class="line"><a name="l17577"></a><span class="lineno">17577</span>&#160;    <span class="keyword">const</span> uint32_t heapIndex = MemoryTypeIndexToHeapIndex(pAllocateInfo-&gt;memoryTypeIndex);</div>
+<div class="line"><a name="l17578"></a><span class="lineno">17578</span>&#160; </div>
+<div class="line"><a name="l17579"></a><span class="lineno">17579</span>&#160;    <span class="comment">// HeapSizeLimit is in effect for this heap.</span></div>
+<div class="line"><a name="l17580"></a><span class="lineno">17580</span>&#160;    <span class="keywordflow">if</span>((m_HeapSizeLimitMask &amp; (1u &lt;&lt; heapIndex)) != 0)</div>
+<div class="line"><a name="l17581"></a><span class="lineno">17581</span>&#160;    {</div>
+<div class="line"><a name="l17582"></a><span class="lineno">17582</span>&#160;        <span class="keyword">const</span> VkDeviceSize heapSize = m_MemProps.memoryHeaps[heapIndex].size;</div>
+<div class="line"><a name="l17583"></a><span class="lineno">17583</span>&#160;        VkDeviceSize blockBytes = m_Budget.m_BlockBytes[heapIndex];</div>
+<div class="line"><a name="l17584"></a><span class="lineno">17584</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
+<div class="line"><a name="l17585"></a><span class="lineno">17585</span>&#160;        {</div>
+<div class="line"><a name="l17586"></a><span class="lineno">17586</span>&#160;            <span class="keyword">const</span> VkDeviceSize blockBytesAfterAllocation = blockBytes + pAllocateInfo-&gt;allocationSize;</div>
+<div class="line"><a name="l17587"></a><span class="lineno">17587</span>&#160;            <span class="keywordflow">if</span>(blockBytesAfterAllocation &gt; heapSize)</div>
+<div class="line"><a name="l17588"></a><span class="lineno">17588</span>&#160;            {</div>
+<div class="line"><a name="l17589"></a><span class="lineno">17589</span>&#160;                <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l17590"></a><span class="lineno">17590</span>&#160;            }</div>
+<div class="line"><a name="l17591"></a><span class="lineno">17591</span>&#160;            <span class="keywordflow">if</span>(m_Budget.m_BlockBytes[heapIndex].compare_exchange_strong(blockBytes, blockBytesAfterAllocation))</div>
+<div class="line"><a name="l17592"></a><span class="lineno">17592</span>&#160;            {</div>
+<div class="line"><a name="l17593"></a><span class="lineno">17593</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17594"></a><span class="lineno">17594</span>&#160;            }</div>
+<div class="line"><a name="l17595"></a><span class="lineno">17595</span>&#160;        }</div>
+<div class="line"><a name="l17596"></a><span class="lineno">17596</span>&#160;    }</div>
+<div class="line"><a name="l17597"></a><span class="lineno">17597</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17598"></a><span class="lineno">17598</span>&#160;    {</div>
+<div class="line"><a name="l17599"></a><span class="lineno">17599</span>&#160;        m_Budget.m_BlockBytes[heapIndex] += pAllocateInfo-&gt;allocationSize;</div>
+<div class="line"><a name="l17600"></a><span class="lineno">17600</span>&#160;    }</div>
+<div class="line"><a name="l17601"></a><span class="lineno">17601</span>&#160; </div>
+<div class="line"><a name="l17602"></a><span class="lineno">17602</span>&#160;    <span class="comment">// VULKAN CALL vkAllocateMemory.</span></div>
+<div class="line"><a name="l17603"></a><span class="lineno">17603</span>&#160;    VkResult res = (*m_VulkanFunctions.vkAllocateMemory)(m_hDevice, pAllocateInfo, GetAllocationCallbacks(), pMemory);</div>
+<div class="line"><a name="l17604"></a><span class="lineno">17604</span>&#160; </div>
+<div class="line"><a name="l17605"></a><span class="lineno">17605</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l17606"></a><span class="lineno">17606</span>&#160;    {</div>
+<div class="line"><a name="l17607"></a><span class="lineno">17607</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l17608"></a><span class="lineno">17608</span>&#160;        ++m_Budget.m_OperationsSinceBudgetFetch;</div>
+<div class="line"><a name="l17609"></a><span class="lineno">17609</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l17610"></a><span class="lineno">17610</span>&#160; </div>
+<div class="line"><a name="l17611"></a><span class="lineno">17611</span>&#160;        <span class="comment">// Informative callback.</span></div>
+<div class="line"><a name="l17612"></a><span class="lineno">17612</span>&#160;        <span class="keywordflow">if</span>(m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">pfnAllocate</a> != VMA_NULL)</div>
+<div class="line"><a name="l17613"></a><span class="lineno">17613</span>&#160;        {</div>
+<div class="line"><a name="l17614"></a><span class="lineno">17614</span>&#160;            (*m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">pfnAllocate</a>)(<span class="keyword">this</span>, pAllocateInfo-&gt;memoryTypeIndex, *pMemory, pAllocateInfo-&gt;allocationSize, m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6">pUserData</a>);</div>
+<div class="line"><a name="l17615"></a><span class="lineno">17615</span>&#160;        }</div>
+<div class="line"><a name="l17616"></a><span class="lineno">17616</span>&#160; </div>
+<div class="line"><a name="l17617"></a><span class="lineno">17617</span>&#160;        deviceMemoryCountIncrement.Commit();</div>
+<div class="line"><a name="l17618"></a><span class="lineno">17618</span>&#160;    }</div>
+<div class="line"><a name="l17619"></a><span class="lineno">17619</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17620"></a><span class="lineno">17620</span>&#160;    {</div>
+<div class="line"><a name="l17621"></a><span class="lineno">17621</span>&#160;        m_Budget.m_BlockBytes[heapIndex] -= pAllocateInfo-&gt;allocationSize;</div>
+<div class="line"><a name="l17622"></a><span class="lineno">17622</span>&#160;    }</div>
+<div class="line"><a name="l17623"></a><span class="lineno">17623</span>&#160; </div>
+<div class="line"><a name="l17624"></a><span class="lineno">17624</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l17625"></a><span class="lineno">17625</span>&#160;}</div>
+<div class="line"><a name="l17626"></a><span class="lineno">17626</span>&#160; </div>
+<div class="line"><a name="l17627"></a><span class="lineno">17627</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::FreeVulkanMemory(uint32_t memoryType, VkDeviceSize size, VkDeviceMemory hMemory)</div>
+<div class="line"><a name="l17628"></a><span class="lineno">17628</span>&#160;{</div>
+<div class="line"><a name="l17629"></a><span class="lineno">17629</span>&#160;    <span class="comment">// Informative callback.</span></div>
+<div class="line"><a name="l17630"></a><span class="lineno">17630</span>&#160;    <span class="keywordflow">if</span>(m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">pfnFree</a> != VMA_NULL)</div>
+<div class="line"><a name="l17631"></a><span class="lineno">17631</span>&#160;    {</div>
+<div class="line"><a name="l17632"></a><span class="lineno">17632</span>&#160;        (*m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">pfnFree</a>)(<span class="keyword">this</span>, memoryType, hMemory, size, m_DeviceMemoryCallbacks.<a class="code" href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6">pUserData</a>);</div>
+<div class="line"><a name="l17633"></a><span class="lineno">17633</span>&#160;    }</div>
+<div class="line"><a name="l17634"></a><span class="lineno">17634</span>&#160; </div>
+<div class="line"><a name="l17635"></a><span class="lineno">17635</span>&#160;    <span class="comment">// VULKAN CALL vkFreeMemory.</span></div>
+<div class="line"><a name="l17636"></a><span class="lineno">17636</span>&#160;    (*m_VulkanFunctions.vkFreeMemory)(m_hDevice, hMemory, GetAllocationCallbacks());</div>
+<div class="line"><a name="l17637"></a><span class="lineno">17637</span>&#160; </div>
+<div class="line"><a name="l17638"></a><span class="lineno">17638</span>&#160;    m_Budget.m_BlockBytes[MemoryTypeIndexToHeapIndex(memoryType)] -= size;</div>
+<div class="line"><a name="l17639"></a><span class="lineno">17639</span>&#160; </div>
+<div class="line"><a name="l17640"></a><span class="lineno">17640</span>&#160;    --m_DeviceMemoryCount;</div>
+<div class="line"><a name="l17641"></a><span class="lineno">17641</span>&#160;}</div>
+<div class="line"><a name="l17642"></a><span class="lineno">17642</span>&#160; </div>
+<div class="line"><a name="l17643"></a><span class="lineno">17643</span>&#160;VkResult VmaAllocator_T::BindVulkanBuffer(</div>
+<div class="line"><a name="l17644"></a><span class="lineno">17644</span>&#160;    VkDeviceMemory memory,</div>
+<div class="line"><a name="l17645"></a><span class="lineno">17645</span>&#160;    VkDeviceSize memoryOffset,</div>
+<div class="line"><a name="l17646"></a><span class="lineno">17646</span>&#160;    VkBuffer buffer,</div>
+<div class="line"><a name="l17647"></a><span class="lineno">17647</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
+<div class="line"><a name="l17648"></a><span class="lineno">17648</span>&#160;{</div>
+<div class="line"><a name="l17649"></a><span class="lineno">17649</span>&#160;    <span class="keywordflow">if</span>(pNext != VMA_NULL)</div>
+<div class="line"><a name="l17650"></a><span class="lineno">17650</span>&#160;    {</div>
+<div class="line"><a name="l17651"></a><span class="lineno">17651</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000 || VMA_BIND_MEMORY2</span></div>
+<div class="line"><a name="l17652"></a><span class="lineno">17652</span>&#160;        <span class="keywordflow">if</span>((m_UseKhrBindMemory2 || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0)) &amp;&amp;</div>
+<div class="line"><a name="l17653"></a><span class="lineno">17653</span>&#160;            m_VulkanFunctions.vkBindBufferMemory2KHR != VMA_NULL)</div>
+<div class="line"><a name="l17654"></a><span class="lineno">17654</span>&#160;        {</div>
+<div class="line"><a name="l17655"></a><span class="lineno">17655</span>&#160;            VkBindBufferMemoryInfoKHR bindBufferMemoryInfo = { VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR };</div>
+<div class="line"><a name="l17656"></a><span class="lineno">17656</span>&#160;            bindBufferMemoryInfo.pNext = pNext;</div>
+<div class="line"><a name="l17657"></a><span class="lineno">17657</span>&#160;            bindBufferMemoryInfo.buffer = buffer;</div>
+<div class="line"><a name="l17658"></a><span class="lineno">17658</span>&#160;            bindBufferMemoryInfo.memory = memory;</div>
+<div class="line"><a name="l17659"></a><span class="lineno">17659</span>&#160;            bindBufferMemoryInfo.memoryOffset = memoryOffset;</div>
+<div class="line"><a name="l17660"></a><span class="lineno">17660</span>&#160;            <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindBufferMemory2KHR)(m_hDevice, 1, &amp;bindBufferMemoryInfo);</div>
+<div class="line"><a name="l17661"></a><span class="lineno">17661</span>&#160;        }</div>
+<div class="line"><a name="l17662"></a><span class="lineno">17662</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17663"></a><span class="lineno">17663</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_VULKAN_VERSION &gt;= 1001000 || VMA_BIND_MEMORY2</span></div>
+<div class="line"><a name="l17664"></a><span class="lineno">17664</span>&#160;        {</div>
+<div class="line"><a name="l17665"></a><span class="lineno">17665</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_EXTENSION_NOT_PRESENT;</div>
+<div class="line"><a name="l17666"></a><span class="lineno">17666</span>&#160;        }</div>
+<div class="line"><a name="l17667"></a><span class="lineno">17667</span>&#160;    }</div>
+<div class="line"><a name="l17668"></a><span class="lineno">17668</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17669"></a><span class="lineno">17669</span>&#160;    {</div>
+<div class="line"><a name="l17670"></a><span class="lineno">17670</span>&#160;        <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindBufferMemory)(m_hDevice, buffer, memory, memoryOffset);</div>
+<div class="line"><a name="l17671"></a><span class="lineno">17671</span>&#160;    }</div>
+<div class="line"><a name="l17672"></a><span class="lineno">17672</span>&#160;}</div>
+<div class="line"><a name="l17673"></a><span class="lineno">17673</span>&#160; </div>
+<div class="line"><a name="l17674"></a><span class="lineno">17674</span>&#160;VkResult VmaAllocator_T::BindVulkanImage(</div>
+<div class="line"><a name="l17675"></a><span class="lineno">17675</span>&#160;    VkDeviceMemory memory,</div>
+<div class="line"><a name="l17676"></a><span class="lineno">17676</span>&#160;    VkDeviceSize memoryOffset,</div>
+<div class="line"><a name="l17677"></a><span class="lineno">17677</span>&#160;    VkImage image,</div>
+<div class="line"><a name="l17678"></a><span class="lineno">17678</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
+<div class="line"><a name="l17679"></a><span class="lineno">17679</span>&#160;{</div>
+<div class="line"><a name="l17680"></a><span class="lineno">17680</span>&#160;    <span class="keywordflow">if</span>(pNext != VMA_NULL)</div>
+<div class="line"><a name="l17681"></a><span class="lineno">17681</span>&#160;    {</div>
+<div class="line"><a name="l17682"></a><span class="lineno">17682</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000 || VMA_BIND_MEMORY2</span></div>
+<div class="line"><a name="l17683"></a><span class="lineno">17683</span>&#160;        <span class="keywordflow">if</span>((m_UseKhrBindMemory2 || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0)) &amp;&amp;</div>
+<div class="line"><a name="l17684"></a><span class="lineno">17684</span>&#160;            m_VulkanFunctions.vkBindImageMemory2KHR != VMA_NULL)</div>
+<div class="line"><a name="l17685"></a><span class="lineno">17685</span>&#160;        {</div>
+<div class="line"><a name="l17686"></a><span class="lineno">17686</span>&#160;            VkBindImageMemoryInfoKHR bindBufferMemoryInfo = { VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR };</div>
+<div class="line"><a name="l17687"></a><span class="lineno">17687</span>&#160;            bindBufferMemoryInfo.pNext = pNext;</div>
+<div class="line"><a name="l17688"></a><span class="lineno">17688</span>&#160;            bindBufferMemoryInfo.image = image;</div>
+<div class="line"><a name="l17689"></a><span class="lineno">17689</span>&#160;            bindBufferMemoryInfo.memory = memory;</div>
+<div class="line"><a name="l17690"></a><span class="lineno">17690</span>&#160;            bindBufferMemoryInfo.memoryOffset = memoryOffset;</div>
+<div class="line"><a name="l17691"></a><span class="lineno">17691</span>&#160;            <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindImageMemory2KHR)(m_hDevice, 1, &amp;bindBufferMemoryInfo);</div>
+<div class="line"><a name="l17692"></a><span class="lineno">17692</span>&#160;        }</div>
+<div class="line"><a name="l17693"></a><span class="lineno">17693</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17694"></a><span class="lineno">17694</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_BIND_MEMORY2</span></div>
+<div class="line"><a name="l17695"></a><span class="lineno">17695</span>&#160;        {</div>
+<div class="line"><a name="l17696"></a><span class="lineno">17696</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_EXTENSION_NOT_PRESENT;</div>
+<div class="line"><a name="l17697"></a><span class="lineno">17697</span>&#160;        }</div>
+<div class="line"><a name="l17698"></a><span class="lineno">17698</span>&#160;    }</div>
+<div class="line"><a name="l17699"></a><span class="lineno">17699</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17700"></a><span class="lineno">17700</span>&#160;    {</div>
+<div class="line"><a name="l17701"></a><span class="lineno">17701</span>&#160;        <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindImageMemory)(m_hDevice, image, memory, memoryOffset);</div>
+<div class="line"><a name="l17702"></a><span class="lineno">17702</span>&#160;    }</div>
+<div class="line"><a name="l17703"></a><span class="lineno">17703</span>&#160;}</div>
+<div class="line"><a name="l17704"></a><span class="lineno">17704</span>&#160; </div>
+<div class="line"><a name="l17705"></a><span class="lineno">17705</span>&#160;VkResult VmaAllocator_T::Map(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation, <span class="keywordtype">void</span>** ppData)</div>
+<div class="line"><a name="l17706"></a><span class="lineno">17706</span>&#160;{</div>
+<div class="line"><a name="l17707"></a><span class="lineno">17707</span>&#160;    <span class="keywordflow">if</span>(hAllocation-&gt;CanBecomeLost())</div>
+<div class="line"><a name="l17708"></a><span class="lineno">17708</span>&#160;    {</div>
+<div class="line"><a name="l17709"></a><span class="lineno">17709</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_MEMORY_MAP_FAILED;</div>
+<div class="line"><a name="l17710"></a><span class="lineno">17710</span>&#160;    }</div>
+<div class="line"><a name="l17711"></a><span class="lineno">17711</span>&#160; </div>
+<div class="line"><a name="l17712"></a><span class="lineno">17712</span>&#160;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</div>
+<div class="line"><a name="l17713"></a><span class="lineno">17713</span>&#160;    {</div>
+<div class="line"><a name="l17714"></a><span class="lineno">17714</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
+<div class="line"><a name="l17715"></a><span class="lineno">17715</span>&#160;        {</div>
+<div class="line"><a name="l17716"></a><span class="lineno">17716</span>&#160;            VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = hAllocation-&gt;GetBlock();</div>
+<div class="line"><a name="l17717"></a><span class="lineno">17717</span>&#160;            <span class="keywordtype">char</span> *pBytes = VMA_NULL;</div>
+<div class="line"><a name="l17718"></a><span class="lineno">17718</span>&#160;            VkResult res = pBlock-&gt;Map(<span class="keyword">this</span>, 1, (<span class="keywordtype">void</span>**)&amp;pBytes);</div>
+<div class="line"><a name="l17719"></a><span class="lineno">17719</span>&#160;            <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l17720"></a><span class="lineno">17720</span>&#160;            {</div>
+<div class="line"><a name="l17721"></a><span class="lineno">17721</span>&#160;                *ppData = pBytes + (ptrdiff_t)hAllocation-&gt;GetOffset();</div>
+<div class="line"><a name="l17722"></a><span class="lineno">17722</span>&#160;                hAllocation-&gt;BlockAllocMap();</div>
+<div class="line"><a name="l17723"></a><span class="lineno">17723</span>&#160;            }</div>
+<div class="line"><a name="l17724"></a><span class="lineno">17724</span>&#160;            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l17725"></a><span class="lineno">17725</span>&#160;        }</div>
+<div class="line"><a name="l17726"></a><span class="lineno">17726</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
+<div class="line"><a name="l17727"></a><span class="lineno">17727</span>&#160;        <span class="keywordflow">return</span> hAllocation-&gt;DedicatedAllocMap(<span class="keyword">this</span>, ppData);</div>
+<div class="line"><a name="l17728"></a><span class="lineno">17728</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l17729"></a><span class="lineno">17729</span>&#160;        VMA_ASSERT(0);</div>
+<div class="line"><a name="l17730"></a><span class="lineno">17730</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_MEMORY_MAP_FAILED;</div>
+<div class="line"><a name="l17731"></a><span class="lineno">17731</span>&#160;    }</div>
+<div class="line"><a name="l17732"></a><span class="lineno">17732</span>&#160;}</div>
+<div class="line"><a name="l17733"></a><span class="lineno">17733</span>&#160; </div>
+<div class="line"><a name="l17734"></a><span class="lineno">17734</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::Unmap(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</div>
+<div class="line"><a name="l17735"></a><span class="lineno">17735</span>&#160;{</div>
+<div class="line"><a name="l17736"></a><span class="lineno">17736</span>&#160;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</div>
+<div class="line"><a name="l17737"></a><span class="lineno">17737</span>&#160;    {</div>
+<div class="line"><a name="l17738"></a><span class="lineno">17738</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
+<div class="line"><a name="l17739"></a><span class="lineno">17739</span>&#160;        {</div>
+<div class="line"><a name="l17740"></a><span class="lineno">17740</span>&#160;            VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = hAllocation-&gt;GetBlock();</div>
+<div class="line"><a name="l17741"></a><span class="lineno">17741</span>&#160;            hAllocation-&gt;BlockAllocUnmap();</div>
+<div class="line"><a name="l17742"></a><span class="lineno">17742</span>&#160;            pBlock-&gt;Unmap(<span class="keyword">this</span>, 1);</div>
+<div class="line"><a name="l17743"></a><span class="lineno">17743</span>&#160;        }</div>
+<div class="line"><a name="l17744"></a><span class="lineno">17744</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17745"></a><span class="lineno">17745</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
+<div class="line"><a name="l17746"></a><span class="lineno">17746</span>&#160;        hAllocation-&gt;DedicatedAllocUnmap(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l17747"></a><span class="lineno">17747</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17748"></a><span class="lineno">17748</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l17749"></a><span class="lineno">17749</span>&#160;        VMA_ASSERT(0);</div>
+<div class="line"><a name="l17750"></a><span class="lineno">17750</span>&#160;    }</div>
+<div class="line"><a name="l17751"></a><span class="lineno">17751</span>&#160;}</div>
+<div class="line"><a name="l17752"></a><span class="lineno">17752</span>&#160; </div>
+<div class="line"><a name="l17753"></a><span class="lineno">17753</span>&#160;VkResult VmaAllocator_T::BindBufferMemory(</div>
+<div class="line"><a name="l17754"></a><span class="lineno">17754</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
+<div class="line"><a name="l17755"></a><span class="lineno">17755</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
+<div class="line"><a name="l17756"></a><span class="lineno">17756</span>&#160;    VkBuffer hBuffer,</div>
+<div class="line"><a name="l17757"></a><span class="lineno">17757</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
+<div class="line"><a name="l17758"></a><span class="lineno">17758</span>&#160;{</div>
+<div class="line"><a name="l17759"></a><span class="lineno">17759</span>&#160;    VkResult res = VK_SUCCESS;</div>
+<div class="line"><a name="l17760"></a><span class="lineno">17760</span>&#160;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</div>
+<div class="line"><a name="l17761"></a><span class="lineno">17761</span>&#160;    {</div>
+<div class="line"><a name="l17762"></a><span class="lineno">17762</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
+<div class="line"><a name="l17763"></a><span class="lineno">17763</span>&#160;        res = BindVulkanBuffer(hAllocation-&gt;GetMemory(), allocationLocalOffset, hBuffer, pNext);</div>
+<div class="line"><a name="l17764"></a><span class="lineno">17764</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17765"></a><span class="lineno">17765</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
+<div class="line"><a name="l17766"></a><span class="lineno">17766</span>&#160;    {</div>
+<div class="line"><a name="l17767"></a><span class="lineno">17767</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = hAllocation-&gt;GetBlock();</div>
+<div class="line"><a name="l17768"></a><span class="lineno">17768</span>&#160;        VMA_ASSERT(pBlock &amp;&amp; <span class="stringliteral">&quot;Binding buffer to allocation that doesn&#39;t belong to any block. Is the allocation lost?&quot;</span>);</div>
+<div class="line"><a name="l17769"></a><span class="lineno">17769</span>&#160;        res = pBlock-&gt;BindBufferMemory(<span class="keyword">this</span>, hAllocation, allocationLocalOffset, hBuffer, pNext);</div>
+<div class="line"><a name="l17770"></a><span class="lineno">17770</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17771"></a><span class="lineno">17771</span>&#160;    }</div>
+<div class="line"><a name="l17772"></a><span class="lineno">17772</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l17773"></a><span class="lineno">17773</span>&#160;        VMA_ASSERT(0);</div>
+<div class="line"><a name="l17774"></a><span class="lineno">17774</span>&#160;    }</div>
+<div class="line"><a name="l17775"></a><span class="lineno">17775</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l17776"></a><span class="lineno">17776</span>&#160;}</div>
+<div class="line"><a name="l17777"></a><span class="lineno">17777</span>&#160; </div>
+<div class="line"><a name="l17778"></a><span class="lineno">17778</span>&#160;VkResult VmaAllocator_T::BindImageMemory(</div>
+<div class="line"><a name="l17779"></a><span class="lineno">17779</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
+<div class="line"><a name="l17780"></a><span class="lineno">17780</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
+<div class="line"><a name="l17781"></a><span class="lineno">17781</span>&#160;    VkImage hImage,</div>
+<div class="line"><a name="l17782"></a><span class="lineno">17782</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
+<div class="line"><a name="l17783"></a><span class="lineno">17783</span>&#160;{</div>
+<div class="line"><a name="l17784"></a><span class="lineno">17784</span>&#160;    VkResult res = VK_SUCCESS;</div>
+<div class="line"><a name="l17785"></a><span class="lineno">17785</span>&#160;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</div>
+<div class="line"><a name="l17786"></a><span class="lineno">17786</span>&#160;    {</div>
+<div class="line"><a name="l17787"></a><span class="lineno">17787</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
+<div class="line"><a name="l17788"></a><span class="lineno">17788</span>&#160;        res = BindVulkanImage(hAllocation-&gt;GetMemory(), allocationLocalOffset, hImage, pNext);</div>
+<div class="line"><a name="l17789"></a><span class="lineno">17789</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17790"></a><span class="lineno">17790</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
+<div class="line"><a name="l17791"></a><span class="lineno">17791</span>&#160;    {</div>
+<div class="line"><a name="l17792"></a><span class="lineno">17792</span>&#160;        VmaDeviceMemoryBlock* pBlock = hAllocation-&gt;GetBlock();</div>
+<div class="line"><a name="l17793"></a><span class="lineno">17793</span>&#160;        VMA_ASSERT(pBlock &amp;&amp; <span class="stringliteral">&quot;Binding image to allocation that doesn&#39;t belong to any block. Is the allocation lost?&quot;</span>);</div>
+<div class="line"><a name="l17794"></a><span class="lineno">17794</span>&#160;        res = pBlock-&gt;BindImageMemory(<span class="keyword">this</span>, hAllocation, allocationLocalOffset, hImage, pNext);</div>
+<div class="line"><a name="l17795"></a><span class="lineno">17795</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17796"></a><span class="lineno">17796</span>&#160;    }</div>
+<div class="line"><a name="l17797"></a><span class="lineno">17797</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l17798"></a><span class="lineno">17798</span>&#160;        VMA_ASSERT(0);</div>
+<div class="line"><a name="l17799"></a><span class="lineno">17799</span>&#160;    }</div>
+<div class="line"><a name="l17800"></a><span class="lineno">17800</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l17801"></a><span class="lineno">17801</span>&#160;}</div>
+<div class="line"><a name="l17802"></a><span class="lineno">17802</span>&#160; </div>
+<div class="line"><a name="l17803"></a><span class="lineno">17803</span>&#160;VkResult VmaAllocator_T::FlushOrInvalidateAllocation(</div>
+<div class="line"><a name="l17804"></a><span class="lineno">17804</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
+<div class="line"><a name="l17805"></a><span class="lineno">17805</span>&#160;    VkDeviceSize offset, VkDeviceSize size,</div>
+<div class="line"><a name="l17806"></a><span class="lineno">17806</span>&#160;    VMA_CACHE_OPERATION op)</div>
+<div class="line"><a name="l17807"></a><span class="lineno">17807</span>&#160;{</div>
+<div class="line"><a name="l17808"></a><span class="lineno">17808</span>&#160;    VkResult res = VK_SUCCESS;</div>
+<div class="line"><a name="l17809"></a><span class="lineno">17809</span>&#160; </div>
+<div class="line"><a name="l17810"></a><span class="lineno">17810</span>&#160;    VkMappedMemoryRange memRange = {};</div>
+<div class="line"><a name="l17811"></a><span class="lineno">17811</span>&#160;    <span class="keywordflow">if</span>(GetFlushOrInvalidateRange(hAllocation, offset, size, memRange))</div>
+<div class="line"><a name="l17812"></a><span class="lineno">17812</span>&#160;    {</div>
+<div class="line"><a name="l17813"></a><span class="lineno">17813</span>&#160;        <span class="keywordflow">switch</span>(op)</div>
+<div class="line"><a name="l17814"></a><span class="lineno">17814</span>&#160;        {</div>
+<div class="line"><a name="l17815"></a><span class="lineno">17815</span>&#160;        <span class="keywordflow">case</span> VMA_CACHE_FLUSH:</div>
+<div class="line"><a name="l17816"></a><span class="lineno">17816</span>&#160;            res = (*GetVulkanFunctions().vkFlushMappedMemoryRanges)(m_hDevice, 1, &amp;memRange);</div>
+<div class="line"><a name="l17817"></a><span class="lineno">17817</span>&#160;            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17818"></a><span class="lineno">17818</span>&#160;        <span class="keywordflow">case</span> VMA_CACHE_INVALIDATE:</div>
+<div class="line"><a name="l17819"></a><span class="lineno">17819</span>&#160;            res = (*GetVulkanFunctions().vkInvalidateMappedMemoryRanges)(m_hDevice, 1, &amp;memRange);</div>
+<div class="line"><a name="l17820"></a><span class="lineno">17820</span>&#160;            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17821"></a><span class="lineno">17821</span>&#160;        <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l17822"></a><span class="lineno">17822</span>&#160;            VMA_ASSERT(0);</div>
+<div class="line"><a name="l17823"></a><span class="lineno">17823</span>&#160;        }</div>
+<div class="line"><a name="l17824"></a><span class="lineno">17824</span>&#160;    }</div>
+<div class="line"><a name="l17825"></a><span class="lineno">17825</span>&#160;    <span class="comment">// else: Just ignore this call.</span></div>
+<div class="line"><a name="l17826"></a><span class="lineno">17826</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l17827"></a><span class="lineno">17827</span>&#160;}</div>
+<div class="line"><a name="l17828"></a><span class="lineno">17828</span>&#160; </div>
+<div class="line"><a name="l17829"></a><span class="lineno">17829</span>&#160;VkResult VmaAllocator_T::FlushOrInvalidateAllocations(</div>
+<div class="line"><a name="l17830"></a><span class="lineno">17830</span>&#160;    uint32_t allocationCount,</div>
+<div class="line"><a name="l17831"></a><span class="lineno">17831</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* allocations,</div>
+<div class="line"><a name="l17832"></a><span class="lineno">17832</span>&#160;    <span class="keyword">const</span> VkDeviceSize* offsets, <span class="keyword">const</span> VkDeviceSize* sizes,</div>
+<div class="line"><a name="l17833"></a><span class="lineno">17833</span>&#160;    VMA_CACHE_OPERATION op)</div>
+<div class="line"><a name="l17834"></a><span class="lineno">17834</span>&#160;{</div>
+<div class="line"><a name="l17835"></a><span class="lineno">17835</span>&#160;    <span class="keyword">typedef</span> VmaStlAllocator&lt;VkMappedMemoryRange&gt; RangeAllocator;</div>
+<div class="line"><a name="l17836"></a><span class="lineno">17836</span>&#160;    <span class="keyword">typedef</span> VmaSmallVector&lt;VkMappedMemoryRange, RangeAllocator, 16&gt; RangeVector;</div>
+<div class="line"><a name="l17837"></a><span class="lineno">17837</span>&#160;    RangeVector ranges = RangeVector(RangeAllocator(GetAllocationCallbacks()));</div>
+<div class="line"><a name="l17838"></a><span class="lineno">17838</span>&#160; </div>
+<div class="line"><a name="l17839"></a><span class="lineno">17839</span>&#160;    <span class="keywordflow">for</span>(uint32_t allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</div>
+<div class="line"><a name="l17840"></a><span class="lineno">17840</span>&#160;    {</div>
+<div class="line"><a name="l17841"></a><span class="lineno">17841</span>&#160;        <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> alloc = allocations[allocIndex];</div>
+<div class="line"><a name="l17842"></a><span class="lineno">17842</span>&#160;        <span class="keyword">const</span> VkDeviceSize offset = offsets != VMA_NULL ? offsets[allocIndex] : 0;</div>
+<div class="line"><a name="l17843"></a><span class="lineno">17843</span>&#160;        <span class="keyword">const</span> VkDeviceSize size = sizes != VMA_NULL ? sizes[allocIndex] : VK_WHOLE_SIZE;</div>
+<div class="line"><a name="l17844"></a><span class="lineno">17844</span>&#160;        VkMappedMemoryRange newRange;</div>
+<div class="line"><a name="l17845"></a><span class="lineno">17845</span>&#160;        <span class="keywordflow">if</span>(GetFlushOrInvalidateRange(alloc, offset, size, newRange))</div>
+<div class="line"><a name="l17846"></a><span class="lineno">17846</span>&#160;        {</div>
+<div class="line"><a name="l17847"></a><span class="lineno">17847</span>&#160;            ranges.push_back(newRange);</div>
+<div class="line"><a name="l17848"></a><span class="lineno">17848</span>&#160;        }</div>
+<div class="line"><a name="l17849"></a><span class="lineno">17849</span>&#160;    }</div>
+<div class="line"><a name="l17850"></a><span class="lineno">17850</span>&#160; </div>
+<div class="line"><a name="l17851"></a><span class="lineno">17851</span>&#160;    VkResult res = VK_SUCCESS;</div>
+<div class="line"><a name="l17852"></a><span class="lineno">17852</span>&#160;    <span class="keywordflow">if</span>(!ranges.empty())</div>
+<div class="line"><a name="l17853"></a><span class="lineno">17853</span>&#160;    {</div>
+<div class="line"><a name="l17854"></a><span class="lineno">17854</span>&#160;        <span class="keywordflow">switch</span>(op)</div>
+<div class="line"><a name="l17855"></a><span class="lineno">17855</span>&#160;        {</div>
+<div class="line"><a name="l17856"></a><span class="lineno">17856</span>&#160;        <span class="keywordflow">case</span> VMA_CACHE_FLUSH:</div>
+<div class="line"><a name="l17857"></a><span class="lineno">17857</span>&#160;            res = (*GetVulkanFunctions().vkFlushMappedMemoryRanges)(m_hDevice, (uint32_t)ranges.size(), ranges.data());</div>
+<div class="line"><a name="l17858"></a><span class="lineno">17858</span>&#160;            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17859"></a><span class="lineno">17859</span>&#160;        <span class="keywordflow">case</span> VMA_CACHE_INVALIDATE:</div>
+<div class="line"><a name="l17860"></a><span class="lineno">17860</span>&#160;            res = (*GetVulkanFunctions().vkInvalidateMappedMemoryRanges)(m_hDevice, (uint32_t)ranges.size(), ranges.data());</div>
+<div class="line"><a name="l17861"></a><span class="lineno">17861</span>&#160;            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17862"></a><span class="lineno">17862</span>&#160;        <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l17863"></a><span class="lineno">17863</span>&#160;            VMA_ASSERT(0);</div>
+<div class="line"><a name="l17864"></a><span class="lineno">17864</span>&#160;        }</div>
+<div class="line"><a name="l17865"></a><span class="lineno">17865</span>&#160;    }</div>
+<div class="line"><a name="l17866"></a><span class="lineno">17866</span>&#160;    <span class="comment">// else: Just ignore this call.</span></div>
+<div class="line"><a name="l17867"></a><span class="lineno">17867</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l17868"></a><span class="lineno">17868</span>&#160;}</div>
+<div class="line"><a name="l17869"></a><span class="lineno">17869</span>&#160; </div>
+<div class="line"><a name="l17870"></a><span class="lineno">17870</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::FreeDedicatedMemory(<span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l17871"></a><span class="lineno">17871</span>&#160;{</div>
+<div class="line"><a name="l17872"></a><span class="lineno">17872</span>&#160;    VMA_ASSERT(allocation &amp;&amp; allocation-&gt;GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED);</div>
+<div class="line"><a name="l17873"></a><span class="lineno">17873</span>&#160; </div>
+<div class="line"><a name="l17874"></a><span class="lineno">17874</span>&#160;    <span class="keyword">const</span> uint32_t memTypeIndex = allocation-&gt;GetMemoryTypeIndex();</div>
+<div class="line"><a name="l17875"></a><span class="lineno">17875</span>&#160;    {</div>
+<div class="line"><a name="l17876"></a><span class="lineno">17876</span>&#160;        VmaMutexLockWrite lock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
+<div class="line"><a name="l17877"></a><span class="lineno">17877</span>&#160;        DedicatedAllocationLinkedList&amp; dedicatedAllocations = m_DedicatedAllocations[memTypeIndex];</div>
+<div class="line"><a name="l17878"></a><span class="lineno">17878</span>&#160;        dedicatedAllocations.Remove(allocation);</div>
+<div class="line"><a name="l17879"></a><span class="lineno">17879</span>&#160;    }</div>
+<div class="line"><a name="l17880"></a><span class="lineno">17880</span>&#160; </div>
+<div class="line"><a name="l17881"></a><span class="lineno">17881</span>&#160;    VkDeviceMemory hMemory = allocation-&gt;GetMemory();</div>
+<div class="line"><a name="l17882"></a><span class="lineno">17882</span>&#160; </div>
+<div class="line"><a name="l17883"></a><span class="lineno">17883</span>&#160;    <span class="comment">/*</span></div>
+<div class="line"><a name="l17884"></a><span class="lineno">17884</span>&#160;<span class="comment">    There is no need to call this, because Vulkan spec allows to skip vkUnmapMemory</span></div>
+<div class="line"><a name="l17885"></a><span class="lineno">17885</span>&#160;<span class="comment">    before vkFreeMemory.</span></div>
+<div class="line"><a name="l17886"></a><span class="lineno">17886</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l17887"></a><span class="lineno">17887</span>&#160;<span class="comment">    if(allocation-&gt;GetMappedData() != VMA_NULL)</span></div>
+<div class="line"><a name="l17888"></a><span class="lineno">17888</span>&#160;<span class="comment">    {</span></div>
+<div class="line"><a name="l17889"></a><span class="lineno">17889</span>&#160;<span class="comment">        (*m_VulkanFunctions.vkUnmapMemory)(m_hDevice, hMemory);</span></div>
+<div class="line"><a name="l17890"></a><span class="lineno">17890</span>&#160;<span class="comment">    }</span></div>
+<div class="line"><a name="l17891"></a><span class="lineno">17891</span>&#160;<span class="comment">    */</span></div>
+<div class="line"><a name="l17892"></a><span class="lineno">17892</span>&#160; </div>
+<div class="line"><a name="l17893"></a><span class="lineno">17893</span>&#160;    FreeVulkanMemory(memTypeIndex, allocation-&gt;GetSize(), hMemory);</div>
+<div class="line"><a name="l17894"></a><span class="lineno">17894</span>&#160; </div>
+<div class="line"><a name="l17895"></a><span class="lineno">17895</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Freed DedicatedMemory MemoryTypeIndex=%u&quot;</span>, memTypeIndex);</div>
+<div class="line"><a name="l17896"></a><span class="lineno">17896</span>&#160;}</div>
+<div class="line"><a name="l17897"></a><span class="lineno">17897</span>&#160; </div>
+<div class="line"><a name="l17898"></a><span class="lineno">17898</span>&#160;uint32_t VmaAllocator_T::CalculateGpuDefragmentationMemoryTypeBits()<span class="keyword"> const</span></div>
+<div class="line"><a name="l17899"></a><span class="lineno">17899</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l17900"></a><span class="lineno">17900</span>&#160;    VkBufferCreateInfo dummyBufCreateInfo;</div>
+<div class="line"><a name="l17901"></a><span class="lineno">17901</span>&#160;    VmaFillGpuDefragmentationBufferCreateInfo(dummyBufCreateInfo);</div>
+<div class="line"><a name="l17902"></a><span class="lineno">17902</span>&#160; </div>
+<div class="line"><a name="l17903"></a><span class="lineno">17903</span>&#160;    uint32_t memoryTypeBits = 0;</div>
+<div class="line"><a name="l17904"></a><span class="lineno">17904</span>&#160; </div>
+<div class="line"><a name="l17905"></a><span class="lineno">17905</span>&#160;    <span class="comment">// Create buffer.</span></div>
+<div class="line"><a name="l17906"></a><span class="lineno">17906</span>&#160;    VkBuffer buf = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l17907"></a><span class="lineno">17907</span>&#160;    VkResult res = (*GetVulkanFunctions().vkCreateBuffer)(</div>
+<div class="line"><a name="l17908"></a><span class="lineno">17908</span>&#160;        m_hDevice, &amp;dummyBufCreateInfo, GetAllocationCallbacks(), &amp;buf);</div>
+<div class="line"><a name="l17909"></a><span class="lineno">17909</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l17910"></a><span class="lineno">17910</span>&#160;    {</div>
+<div class="line"><a name="l17911"></a><span class="lineno">17911</span>&#160;        <span class="comment">// Query for supported memory types.</span></div>
+<div class="line"><a name="l17912"></a><span class="lineno">17912</span>&#160;        VkMemoryRequirements memReq;</div>
+<div class="line"><a name="l17913"></a><span class="lineno">17913</span>&#160;        (*GetVulkanFunctions().vkGetBufferMemoryRequirements)(m_hDevice, buf, &amp;memReq);</div>
+<div class="line"><a name="l17914"></a><span class="lineno">17914</span>&#160;        memoryTypeBits = memReq.memoryTypeBits;</div>
+<div class="line"><a name="l17915"></a><span class="lineno">17915</span>&#160; </div>
+<div class="line"><a name="l17916"></a><span class="lineno">17916</span>&#160;        <span class="comment">// Destroy buffer.</span></div>
+<div class="line"><a name="l17917"></a><span class="lineno">17917</span>&#160;        (*GetVulkanFunctions().vkDestroyBuffer)(m_hDevice, buf, GetAllocationCallbacks());</div>
+<div class="line"><a name="l17918"></a><span class="lineno">17918</span>&#160;    }</div>
+<div class="line"><a name="l17919"></a><span class="lineno">17919</span>&#160; </div>
+<div class="line"><a name="l17920"></a><span class="lineno">17920</span>&#160;    <span class="keywordflow">return</span> memoryTypeBits;</div>
+<div class="line"><a name="l17921"></a><span class="lineno">17921</span>&#160;}</div>
+<div class="line"><a name="l17922"></a><span class="lineno">17922</span>&#160; </div>
+<div class="line"><a name="l17923"></a><span class="lineno">17923</span>&#160;uint32_t VmaAllocator_T::CalculateGlobalMemoryTypeBits()<span class="keyword"> const</span></div>
+<div class="line"><a name="l17924"></a><span class="lineno">17924</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l17925"></a><span class="lineno">17925</span>&#160;    <span class="comment">// Make sure memory information is already fetched.</span></div>
+<div class="line"><a name="l17926"></a><span class="lineno">17926</span>&#160;    VMA_ASSERT(GetMemoryTypeCount() &gt; 0);</div>
+<div class="line"><a name="l17927"></a><span class="lineno">17927</span>&#160; </div>
+<div class="line"><a name="l17928"></a><span class="lineno">17928</span>&#160;    uint32_t memoryTypeBits = UINT32_MAX;</div>
+<div class="line"><a name="l17929"></a><span class="lineno">17929</span>&#160; </div>
+<div class="line"><a name="l17930"></a><span class="lineno">17930</span>&#160;    <span class="keywordflow">if</span>(!m_UseAmdDeviceCoherentMemory)</div>
+<div class="line"><a name="l17931"></a><span class="lineno">17931</span>&#160;    {</div>
+<div class="line"><a name="l17932"></a><span class="lineno">17932</span>&#160;        <span class="comment">// Exclude memory types that have VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD.</span></div>
+<div class="line"><a name="l17933"></a><span class="lineno">17933</span>&#160;        <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
+<div class="line"><a name="l17934"></a><span class="lineno">17934</span>&#160;        {</div>
+<div class="line"><a name="l17935"></a><span class="lineno">17935</span>&#160;            <span class="keywordflow">if</span>((m_MemProps.memoryTypes[memTypeIndex].propertyFlags &amp; VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY) != 0)</div>
+<div class="line"><a name="l17936"></a><span class="lineno">17936</span>&#160;            {</div>
+<div class="line"><a name="l17937"></a><span class="lineno">17937</span>&#160;                memoryTypeBits &amp;= ~(1u &lt;&lt; memTypeIndex);</div>
+<div class="line"><a name="l17938"></a><span class="lineno">17938</span>&#160;            }</div>
+<div class="line"><a name="l17939"></a><span class="lineno">17939</span>&#160;        }</div>
+<div class="line"><a name="l17940"></a><span class="lineno">17940</span>&#160;    }</div>
+<div class="line"><a name="l17941"></a><span class="lineno">17941</span>&#160; </div>
+<div class="line"><a name="l17942"></a><span class="lineno">17942</span>&#160;    <span class="keywordflow">return</span> memoryTypeBits;</div>
+<div class="line"><a name="l17943"></a><span class="lineno">17943</span>&#160;}</div>
+<div class="line"><a name="l17944"></a><span class="lineno">17944</span>&#160; </div>
+<div class="line"><a name="l17945"></a><span class="lineno">17945</span>&#160;<span class="keywordtype">bool</span> VmaAllocator_T::GetFlushOrInvalidateRange(</div>
+<div class="line"><a name="l17946"></a><span class="lineno">17946</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l17947"></a><span class="lineno">17947</span>&#160;    VkDeviceSize offset, VkDeviceSize size,</div>
+<div class="line"><a name="l17948"></a><span class="lineno">17948</span>&#160;    VkMappedMemoryRange&amp; outRange)<span class="keyword"> const</span></div>
+<div class="line"><a name="l17949"></a><span class="lineno">17949</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l17950"></a><span class="lineno">17950</span>&#160;    <span class="keyword">const</span> uint32_t memTypeIndex = allocation-&gt;GetMemoryTypeIndex();</div>
+<div class="line"><a name="l17951"></a><span class="lineno">17951</span>&#160;    <span class="keywordflow">if</span>(size &gt; 0 &amp;&amp; IsMemoryTypeNonCoherent(memTypeIndex))</div>
+<div class="line"><a name="l17952"></a><span class="lineno">17952</span>&#160;    {</div>
+<div class="line"><a name="l17953"></a><span class="lineno">17953</span>&#160;        <span class="keyword">const</span> VkDeviceSize nonCoherentAtomSize = m_PhysicalDeviceProperties.limits.nonCoherentAtomSize;</div>
+<div class="line"><a name="l17954"></a><span class="lineno">17954</span>&#160;        <span class="keyword">const</span> VkDeviceSize allocationSize = allocation-&gt;GetSize();</div>
+<div class="line"><a name="l17955"></a><span class="lineno">17955</span>&#160;        VMA_ASSERT(offset &lt;= allocationSize);</div>
+<div class="line"><a name="l17956"></a><span class="lineno">17956</span>&#160; </div>
+<div class="line"><a name="l17957"></a><span class="lineno">17957</span>&#160;        outRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;</div>
+<div class="line"><a name="l17958"></a><span class="lineno">17958</span>&#160;        outRange.pNext = VMA_NULL;</div>
+<div class="line"><a name="l17959"></a><span class="lineno">17959</span>&#160;        outRange.memory = allocation-&gt;GetMemory();</div>
+<div class="line"><a name="l17960"></a><span class="lineno">17960</span>&#160; </div>
+<div class="line"><a name="l17961"></a><span class="lineno">17961</span>&#160;        <span class="keywordflow">switch</span>(allocation-&gt;GetType())</div>
+<div class="line"><a name="l17962"></a><span class="lineno">17962</span>&#160;        {</div>
+<div class="line"><a name="l17963"></a><span class="lineno">17963</span>&#160;        <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
+<div class="line"><a name="l17964"></a><span class="lineno">17964</span>&#160;            outRange.offset = VmaAlignDown(offset, nonCoherentAtomSize);</div>
+<div class="line"><a name="l17965"></a><span class="lineno">17965</span>&#160;            <span class="keywordflow">if</span>(size == VK_WHOLE_SIZE)</div>
+<div class="line"><a name="l17966"></a><span class="lineno">17966</span>&#160;            {</div>
+<div class="line"><a name="l17967"></a><span class="lineno">17967</span>&#160;                outRange.size = allocationSize - outRange.offset;</div>
+<div class="line"><a name="l17968"></a><span class="lineno">17968</span>&#160;            }</div>
+<div class="line"><a name="l17969"></a><span class="lineno">17969</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17970"></a><span class="lineno">17970</span>&#160;            {</div>
+<div class="line"><a name="l17971"></a><span class="lineno">17971</span>&#160;                VMA_ASSERT(offset + size &lt;= allocationSize);</div>
+<div class="line"><a name="l17972"></a><span class="lineno">17972</span>&#160;                outRange.size = VMA_MIN(</div>
+<div class="line"><a name="l17973"></a><span class="lineno">17973</span>&#160;                    VmaAlignUp(size + (offset - outRange.offset), nonCoherentAtomSize),</div>
+<div class="line"><a name="l17974"></a><span class="lineno">17974</span>&#160;                    allocationSize - outRange.offset);</div>
+<div class="line"><a name="l17975"></a><span class="lineno">17975</span>&#160;            }</div>
+<div class="line"><a name="l17976"></a><span class="lineno">17976</span>&#160;            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17977"></a><span class="lineno">17977</span>&#160;        <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
+<div class="line"><a name="l17978"></a><span class="lineno">17978</span>&#160;        {</div>
+<div class="line"><a name="l17979"></a><span class="lineno">17979</span>&#160;            <span class="comment">// 1. Still within this allocation.</span></div>
+<div class="line"><a name="l17980"></a><span class="lineno">17980</span>&#160;            outRange.offset = VmaAlignDown(offset, nonCoherentAtomSize);</div>
+<div class="line"><a name="l17981"></a><span class="lineno">17981</span>&#160;            <span class="keywordflow">if</span>(size == VK_WHOLE_SIZE)</div>
+<div class="line"><a name="l17982"></a><span class="lineno">17982</span>&#160;            {</div>
+<div class="line"><a name="l17983"></a><span class="lineno">17983</span>&#160;                size = allocationSize - offset;</div>
+<div class="line"><a name="l17984"></a><span class="lineno">17984</span>&#160;            }</div>
+<div class="line"><a name="l17985"></a><span class="lineno">17985</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l17986"></a><span class="lineno">17986</span>&#160;            {</div>
+<div class="line"><a name="l17987"></a><span class="lineno">17987</span>&#160;                VMA_ASSERT(offset + size &lt;= allocationSize);</div>
+<div class="line"><a name="l17988"></a><span class="lineno">17988</span>&#160;            }</div>
+<div class="line"><a name="l17989"></a><span class="lineno">17989</span>&#160;            outRange.size = VmaAlignUp(size + (offset - outRange.offset), nonCoherentAtomSize);</div>
+<div class="line"><a name="l17990"></a><span class="lineno">17990</span>&#160; </div>
+<div class="line"><a name="l17991"></a><span class="lineno">17991</span>&#160;            <span class="comment">// 2. Adjust to whole block.</span></div>
+<div class="line"><a name="l17992"></a><span class="lineno">17992</span>&#160;            <span class="keyword">const</span> VkDeviceSize allocationOffset = allocation-&gt;GetOffset();</div>
+<div class="line"><a name="l17993"></a><span class="lineno">17993</span>&#160;            VMA_ASSERT(allocationOffset % nonCoherentAtomSize == 0);</div>
+<div class="line"><a name="l17994"></a><span class="lineno">17994</span>&#160;            <span class="keyword">const</span> VkDeviceSize blockSize = allocation-&gt;GetBlock()-&gt;m_pMetadata-&gt;GetSize();</div>
+<div class="line"><a name="l17995"></a><span class="lineno">17995</span>&#160;            outRange.offset += allocationOffset;</div>
+<div class="line"><a name="l17996"></a><span class="lineno">17996</span>&#160;            outRange.size = VMA_MIN(outRange.size, blockSize - outRange.offset);</div>
+<div class="line"><a name="l17997"></a><span class="lineno">17997</span>&#160; </div>
+<div class="line"><a name="l17998"></a><span class="lineno">17998</span>&#160;            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l17999"></a><span class="lineno">17999</span>&#160;        }</div>
+<div class="line"><a name="l18000"></a><span class="lineno">18000</span>&#160;        <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l18001"></a><span class="lineno">18001</span>&#160;            VMA_ASSERT(0);</div>
+<div class="line"><a name="l18002"></a><span class="lineno">18002</span>&#160;        }</div>
+<div class="line"><a name="l18003"></a><span class="lineno">18003</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l18004"></a><span class="lineno">18004</span>&#160;    }</div>
+<div class="line"><a name="l18005"></a><span class="lineno">18005</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l18006"></a><span class="lineno">18006</span>&#160;}</div>
+<div class="line"><a name="l18007"></a><span class="lineno">18007</span>&#160; </div>
+<div class="line"><a name="l18008"></a><span class="lineno">18008</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l18009"></a><span class="lineno">18009</span>&#160; </div>
+<div class="line"><a name="l18010"></a><span class="lineno">18010</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::UpdateVulkanBudget()</div>
+<div class="line"><a name="l18011"></a><span class="lineno">18011</span>&#160;{</div>
+<div class="line"><a name="l18012"></a><span class="lineno">18012</span>&#160;    VMA_ASSERT(m_UseExtMemoryBudget);</div>
+<div class="line"><a name="l18013"></a><span class="lineno">18013</span>&#160; </div>
+<div class="line"><a name="l18014"></a><span class="lineno">18014</span>&#160;    VkPhysicalDeviceMemoryProperties2KHR memProps = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR };</div>
+<div class="line"><a name="l18015"></a><span class="lineno">18015</span>&#160; </div>
+<div class="line"><a name="l18016"></a><span class="lineno">18016</span>&#160;    VkPhysicalDeviceMemoryBudgetPropertiesEXT budgetProps = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT };</div>
+<div class="line"><a name="l18017"></a><span class="lineno">18017</span>&#160;    VmaPnextChainPushFront(&amp;memProps, &amp;budgetProps);</div>
+<div class="line"><a name="l18018"></a><span class="lineno">18018</span>&#160; </div>
+<div class="line"><a name="l18019"></a><span class="lineno">18019</span>&#160;    GetVulkanFunctions().vkGetPhysicalDeviceMemoryProperties2KHR(m_PhysicalDevice, &amp;memProps);</div>
+<div class="line"><a name="l18020"></a><span class="lineno">18020</span>&#160; </div>
+<div class="line"><a name="l18021"></a><span class="lineno">18021</span>&#160;    {</div>
+<div class="line"><a name="l18022"></a><span class="lineno">18022</span>&#160;        VmaMutexLockWrite lockWrite(m_Budget.m_BudgetMutex, m_UseMutex);</div>
+<div class="line"><a name="l18023"></a><span class="lineno">18023</span>&#160; </div>
+<div class="line"><a name="l18024"></a><span class="lineno">18024</span>&#160;        <span class="keywordflow">for</span>(uint32_t heapIndex = 0; heapIndex &lt; GetMemoryHeapCount(); ++heapIndex)</div>
+<div class="line"><a name="l18025"></a><span class="lineno">18025</span>&#160;        {</div>
+<div class="line"><a name="l18026"></a><span class="lineno">18026</span>&#160;            m_Budget.m_VulkanUsage[heapIndex] = budgetProps.heapUsage[heapIndex];</div>
+<div class="line"><a name="l18027"></a><span class="lineno">18027</span>&#160;            m_Budget.m_VulkanBudget[heapIndex] = budgetProps.heapBudget[heapIndex];</div>
+<div class="line"><a name="l18028"></a><span class="lineno">18028</span>&#160;            m_Budget.m_BlockBytesAtBudgetFetch[heapIndex] = m_Budget.m_BlockBytes[heapIndex].load();</div>
+<div class="line"><a name="l18029"></a><span class="lineno">18029</span>&#160; </div>
+<div class="line"><a name="l18030"></a><span class="lineno">18030</span>&#160;            <span class="comment">// Some bugged drivers return the budget incorrectly, e.g. 0 or much bigger than heap size.</span></div>
+<div class="line"><a name="l18031"></a><span class="lineno">18031</span>&#160;            <span class="keywordflow">if</span>(m_Budget.m_VulkanBudget[heapIndex] == 0)</div>
+<div class="line"><a name="l18032"></a><span class="lineno">18032</span>&#160;            {</div>
+<div class="line"><a name="l18033"></a><span class="lineno">18033</span>&#160;                m_Budget.m_VulkanBudget[heapIndex] = m_MemProps.memoryHeaps[heapIndex].size * 8 / 10; <span class="comment">// 80% heuristics.</span></div>
+<div class="line"><a name="l18034"></a><span class="lineno">18034</span>&#160;            }</div>
+<div class="line"><a name="l18035"></a><span class="lineno">18035</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_Budget.m_VulkanBudget[heapIndex] &gt; m_MemProps.memoryHeaps[heapIndex].size)</div>
+<div class="line"><a name="l18036"></a><span class="lineno">18036</span>&#160;            {</div>
+<div class="line"><a name="l18037"></a><span class="lineno">18037</span>&#160;                m_Budget.m_VulkanBudget[heapIndex] = m_MemProps.memoryHeaps[heapIndex].size;</div>
+<div class="line"><a name="l18038"></a><span class="lineno">18038</span>&#160;            }</div>
+<div class="line"><a name="l18039"></a><span class="lineno">18039</span>&#160;            <span class="keywordflow">if</span>(m_Budget.m_VulkanUsage[heapIndex] == 0 &amp;&amp; m_Budget.m_BlockBytesAtBudgetFetch[heapIndex] &gt; 0)</div>
+<div class="line"><a name="l18040"></a><span class="lineno">18040</span>&#160;            {</div>
+<div class="line"><a name="l18041"></a><span class="lineno">18041</span>&#160;                m_Budget.m_VulkanUsage[heapIndex] = m_Budget.m_BlockBytesAtBudgetFetch[heapIndex];</div>
+<div class="line"><a name="l18042"></a><span class="lineno">18042</span>&#160;            }</div>
+<div class="line"><a name="l18043"></a><span class="lineno">18043</span>&#160;        }</div>
+<div class="line"><a name="l18044"></a><span class="lineno">18044</span>&#160;        m_Budget.m_OperationsSinceBudgetFetch = 0;</div>
+<div class="line"><a name="l18045"></a><span class="lineno">18045</span>&#160;    }</div>
+<div class="line"><a name="l18046"></a><span class="lineno">18046</span>&#160;}</div>
+<div class="line"><a name="l18047"></a><span class="lineno">18047</span>&#160; </div>
+<div class="line"><a name="l18048"></a><span class="lineno">18048</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l18049"></a><span class="lineno">18049</span>&#160; </div>
+<div class="line"><a name="l18050"></a><span class="lineno">18050</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::FillAllocation(<span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation, uint8_t pattern)</div>
+<div class="line"><a name="l18051"></a><span class="lineno">18051</span>&#160;{</div>
+<div class="line"><a name="l18052"></a><span class="lineno">18052</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS &amp;&amp;</div>
+<div class="line"><a name="l18053"></a><span class="lineno">18053</span>&#160;        !hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
+<div class="line"><a name="l18054"></a><span class="lineno">18054</span>&#160;        (m_MemProps.memoryTypes[hAllocation-&gt;GetMemoryTypeIndex()].propertyFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0)</div>
+<div class="line"><a name="l18055"></a><span class="lineno">18055</span>&#160;    {</div>
+<div class="line"><a name="l18056"></a><span class="lineno">18056</span>&#160;        <span class="keywordtype">void</span>* pData = VMA_NULL;</div>
+<div class="line"><a name="l18057"></a><span class="lineno">18057</span>&#160;        VkResult res = Map(hAllocation, &amp;pData);</div>
+<div class="line"><a name="l18058"></a><span class="lineno">18058</span>&#160;        <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l18059"></a><span class="lineno">18059</span>&#160;        {</div>
+<div class="line"><a name="l18060"></a><span class="lineno">18060</span>&#160;            memset(pData, (<span class="keywordtype">int</span>)pattern, (<span class="keywordtype">size_t</span>)hAllocation-&gt;GetSize());</div>
+<div class="line"><a name="l18061"></a><span class="lineno">18061</span>&#160;            FlushOrInvalidateAllocation(hAllocation, 0, VK_WHOLE_SIZE, VMA_CACHE_FLUSH);</div>
+<div class="line"><a name="l18062"></a><span class="lineno">18062</span>&#160;            Unmap(hAllocation);</div>
+<div class="line"><a name="l18063"></a><span class="lineno">18063</span>&#160;        }</div>
+<div class="line"><a name="l18064"></a><span class="lineno">18064</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l18065"></a><span class="lineno">18065</span>&#160;        {</div>
+<div class="line"><a name="l18066"></a><span class="lineno">18066</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;VMA_DEBUG_INITIALIZE_ALLOCATIONS is enabled, but couldn&#39;t map memory to fill allocation.&quot;</span>);</div>
+<div class="line"><a name="l18067"></a><span class="lineno">18067</span>&#160;        }</div>
+<div class="line"><a name="l18068"></a><span class="lineno">18068</span>&#160;    }</div>
+<div class="line"><a name="l18069"></a><span class="lineno">18069</span>&#160;}</div>
+<div class="line"><a name="l18070"></a><span class="lineno">18070</span>&#160; </div>
+<div class="line"><a name="l18071"></a><span class="lineno">18071</span>&#160;uint32_t VmaAllocator_T::GetGpuDefragmentationMemoryTypeBits()</div>
+<div class="line"><a name="l18072"></a><span class="lineno">18072</span>&#160;{</div>
+<div class="line"><a name="l18073"></a><span class="lineno">18073</span>&#160;    uint32_t memoryTypeBits = m_GpuDefragmentationMemoryTypeBits.load();</div>
+<div class="line"><a name="l18074"></a><span class="lineno">18074</span>&#160;    <span class="keywordflow">if</span>(memoryTypeBits == UINT32_MAX)</div>
+<div class="line"><a name="l18075"></a><span class="lineno">18075</span>&#160;    {</div>
+<div class="line"><a name="l18076"></a><span class="lineno">18076</span>&#160;        memoryTypeBits = CalculateGpuDefragmentationMemoryTypeBits();</div>
+<div class="line"><a name="l18077"></a><span class="lineno">18077</span>&#160;        m_GpuDefragmentationMemoryTypeBits.store(memoryTypeBits);</div>
+<div class="line"><a name="l18078"></a><span class="lineno">18078</span>&#160;    }</div>
+<div class="line"><a name="l18079"></a><span class="lineno">18079</span>&#160;    <span class="keywordflow">return</span> memoryTypeBits;</div>
+<div class="line"><a name="l18080"></a><span class="lineno">18080</span>&#160;}</div>
+<div class="line"><a name="l18081"></a><span class="lineno">18081</span>&#160; </div>
+<div class="line"><a name="l18082"></a><span class="lineno">18082</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l18083"></a><span class="lineno">18083</span>&#160; </div>
+<div class="line"><a name="l18084"></a><span class="lineno">18084</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::PrintDetailedMap(VmaJsonWriter&amp; json)</div>
+<div class="line"><a name="l18085"></a><span class="lineno">18085</span>&#160;{</div>
+<div class="line"><a name="l18086"></a><span class="lineno">18086</span>&#160;    <span class="keywordtype">bool</span> dedicatedAllocationsStarted = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l18087"></a><span class="lineno">18087</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
+<div class="line"><a name="l18088"></a><span class="lineno">18088</span>&#160;    {</div>
+<div class="line"><a name="l18089"></a><span class="lineno">18089</span>&#160;        VmaMutexLockRead dedicatedAllocationsLock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
+<div class="line"><a name="l18090"></a><span class="lineno">18090</span>&#160;        DedicatedAllocationLinkedList&amp; dedicatedAllocList = m_DedicatedAllocations[memTypeIndex];</div>
+<div class="line"><a name="l18091"></a><span class="lineno">18091</span>&#160;        <span class="keywordflow">if</span>(!dedicatedAllocList.IsEmpty())</div>
+<div class="line"><a name="l18092"></a><span class="lineno">18092</span>&#160;        {</div>
+<div class="line"><a name="l18093"></a><span class="lineno">18093</span>&#160;            <span class="keywordflow">if</span>(dedicatedAllocationsStarted == <span class="keyword">false</span>)</div>
+<div class="line"><a name="l18094"></a><span class="lineno">18094</span>&#160;            {</div>
+<div class="line"><a name="l18095"></a><span class="lineno">18095</span>&#160;                dedicatedAllocationsStarted = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l18096"></a><span class="lineno">18096</span>&#160;                json.WriteString(<span class="stringliteral">&quot;DedicatedAllocations&quot;</span>);</div>
+<div class="line"><a name="l18097"></a><span class="lineno">18097</span>&#160;                json.BeginObject();</div>
+<div class="line"><a name="l18098"></a><span class="lineno">18098</span>&#160;            }</div>
+<div class="line"><a name="l18099"></a><span class="lineno">18099</span>&#160; </div>
+<div class="line"><a name="l18100"></a><span class="lineno">18100</span>&#160;            json.BeginString(<span class="stringliteral">&quot;Type &quot;</span>);</div>
+<div class="line"><a name="l18101"></a><span class="lineno">18101</span>&#160;            json.ContinueString(memTypeIndex);</div>
+<div class="line"><a name="l18102"></a><span class="lineno">18102</span>&#160;            json.EndString();</div>
+<div class="line"><a name="l18103"></a><span class="lineno">18103</span>&#160; </div>
+<div class="line"><a name="l18104"></a><span class="lineno">18104</span>&#160;            json.BeginArray();</div>
+<div class="line"><a name="l18105"></a><span class="lineno">18105</span>&#160; </div>
+<div class="line"><a name="l18106"></a><span class="lineno">18106</span>&#160;            <span class="keywordflow">for</span>(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> alloc = dedicatedAllocList.Front();</div>
+<div class="line"><a name="l18107"></a><span class="lineno">18107</span>&#160;                alloc != VMA_NULL; alloc = dedicatedAllocList.GetNext(alloc))</div>
+<div class="line"><a name="l18108"></a><span class="lineno">18108</span>&#160;            {</div>
+<div class="line"><a name="l18109"></a><span class="lineno">18109</span>&#160;                json.BeginObject(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l18110"></a><span class="lineno">18110</span>&#160;                alloc-&gt;PrintParameters(json);</div>
+<div class="line"><a name="l18111"></a><span class="lineno">18111</span>&#160;                json.EndObject();</div>
+<div class="line"><a name="l18112"></a><span class="lineno">18112</span>&#160;            }</div>
+<div class="line"><a name="l18113"></a><span class="lineno">18113</span>&#160; </div>
+<div class="line"><a name="l18114"></a><span class="lineno">18114</span>&#160;            json.EndArray();</div>
+<div class="line"><a name="l18115"></a><span class="lineno">18115</span>&#160;        }</div>
+<div class="line"><a name="l18116"></a><span class="lineno">18116</span>&#160;    }</div>
+<div class="line"><a name="l18117"></a><span class="lineno">18117</span>&#160;    <span class="keywordflow">if</span>(dedicatedAllocationsStarted)</div>
+<div class="line"><a name="l18118"></a><span class="lineno">18118</span>&#160;    {</div>
+<div class="line"><a name="l18119"></a><span class="lineno">18119</span>&#160;        json.EndObject();</div>
+<div class="line"><a name="l18120"></a><span class="lineno">18120</span>&#160;    }</div>
+<div class="line"><a name="l18121"></a><span class="lineno">18121</span>&#160; </div>
+<div class="line"><a name="l18122"></a><span class="lineno">18122</span>&#160;    {</div>
+<div class="line"><a name="l18123"></a><span class="lineno">18123</span>&#160;        <span class="keywordtype">bool</span> allocationsStarted = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l18124"></a><span class="lineno">18124</span>&#160;        <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
+<div class="line"><a name="l18125"></a><span class="lineno">18125</span>&#160;        {</div>
+<div class="line"><a name="l18126"></a><span class="lineno">18126</span>&#160;            <span class="keywordflow">if</span>(m_pBlockVectors[memTypeIndex]-&gt;IsEmpty() == <span class="keyword">false</span>)</div>
+<div class="line"><a name="l18127"></a><span class="lineno">18127</span>&#160;            {</div>
+<div class="line"><a name="l18128"></a><span class="lineno">18128</span>&#160;                <span class="keywordflow">if</span>(allocationsStarted == <span class="keyword">false</span>)</div>
+<div class="line"><a name="l18129"></a><span class="lineno">18129</span>&#160;                {</div>
+<div class="line"><a name="l18130"></a><span class="lineno">18130</span>&#160;                    allocationsStarted = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l18131"></a><span class="lineno">18131</span>&#160;                    json.WriteString(<span class="stringliteral">&quot;DefaultPools&quot;</span>);</div>
+<div class="line"><a name="l18132"></a><span class="lineno">18132</span>&#160;                    json.BeginObject();</div>
+<div class="line"><a name="l18133"></a><span class="lineno">18133</span>&#160;                }</div>
+<div class="line"><a name="l18134"></a><span class="lineno">18134</span>&#160; </div>
+<div class="line"><a name="l18135"></a><span class="lineno">18135</span>&#160;                json.BeginString(<span class="stringliteral">&quot;Type &quot;</span>);</div>
+<div class="line"><a name="l18136"></a><span class="lineno">18136</span>&#160;                json.ContinueString(memTypeIndex);</div>
+<div class="line"><a name="l18137"></a><span class="lineno">18137</span>&#160;                json.EndString();</div>
+<div class="line"><a name="l18138"></a><span class="lineno">18138</span>&#160; </div>
+<div class="line"><a name="l18139"></a><span class="lineno">18139</span>&#160;                m_pBlockVectors[memTypeIndex]-&gt;PrintDetailedMap(json);</div>
+<div class="line"><a name="l18140"></a><span class="lineno">18140</span>&#160;            }</div>
+<div class="line"><a name="l18141"></a><span class="lineno">18141</span>&#160;        }</div>
+<div class="line"><a name="l18142"></a><span class="lineno">18142</span>&#160;        <span class="keywordflow">if</span>(allocationsStarted)</div>
+<div class="line"><a name="l18143"></a><span class="lineno">18143</span>&#160;        {</div>
+<div class="line"><a name="l18144"></a><span class="lineno">18144</span>&#160;            json.EndObject();</div>
+<div class="line"><a name="l18145"></a><span class="lineno">18145</span>&#160;        }</div>
+<div class="line"><a name="l18146"></a><span class="lineno">18146</span>&#160;    }</div>
+<div class="line"><a name="l18147"></a><span class="lineno">18147</span>&#160; </div>
+<div class="line"><a name="l18148"></a><span class="lineno">18148</span>&#160;    <span class="comment">// Custom pools</span></div>
+<div class="line"><a name="l18149"></a><span class="lineno">18149</span>&#160;    {</div>
+<div class="line"><a name="l18150"></a><span class="lineno">18150</span>&#160;        VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);</div>
+<div class="line"><a name="l18151"></a><span class="lineno">18151</span>&#160;        <span class="keywordflow">if</span>(!m_Pools.IsEmpty())</div>
+<div class="line"><a name="l18152"></a><span class="lineno">18152</span>&#160;        {</div>
+<div class="line"><a name="l18153"></a><span class="lineno">18153</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Pools&quot;</span>);</div>
+<div class="line"><a name="l18154"></a><span class="lineno">18154</span>&#160;            json.BeginObject();</div>
+<div class="line"><a name="l18155"></a><span class="lineno">18155</span>&#160;            <span class="keywordflow">for</span>(<a class="code" href="struct_vma_pool.html">VmaPool</a> pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool))</div>
+<div class="line"><a name="l18156"></a><span class="lineno">18156</span>&#160;            {</div>
+<div class="line"><a name="l18157"></a><span class="lineno">18157</span>&#160;                json.BeginString();</div>
+<div class="line"><a name="l18158"></a><span class="lineno">18158</span>&#160;                json.ContinueString(pool-&gt;GetId());</div>
+<div class="line"><a name="l18159"></a><span class="lineno">18159</span>&#160;                json.EndString();</div>
+<div class="line"><a name="l18160"></a><span class="lineno">18160</span>&#160; </div>
+<div class="line"><a name="l18161"></a><span class="lineno">18161</span>&#160;                pool-&gt;m_BlockVector.PrintDetailedMap(json);</div>
+<div class="line"><a name="l18162"></a><span class="lineno">18162</span>&#160;            }</div>
+<div class="line"><a name="l18163"></a><span class="lineno">18163</span>&#160;            json.EndObject();</div>
+<div class="line"><a name="l18164"></a><span class="lineno">18164</span>&#160;        }</div>
+<div class="line"><a name="l18165"></a><span class="lineno">18165</span>&#160;    }</div>
+<div class="line"><a name="l18166"></a><span class="lineno">18166</span>&#160;}</div>
+<div class="line"><a name="l18167"></a><span class="lineno">18167</span>&#160; </div>
+<div class="line"><a name="l18168"></a><span class="lineno">18168</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l18169"></a><span class="lineno">18169</span>&#160; </div>
+<div class="line"><a name="l18171"></a><span class="lineno">18171</span>&#160;<span class="comment">// Public interface</span></div>
+<div class="line"><a name="l18172"></a><span class="lineno">18172</span>&#160; </div>
+<div class="line"><a name="l18173"></a><span class="lineno">18173</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a>(</div>
+<div class="line"><a name="l18174"></a><span class="lineno">18174</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a>* pCreateInfo,</div>
+<div class="line"><a name="l18175"></a><span class="lineno">18175</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a>* pAllocator)</div>
+<div class="line"><a name="l18176"></a><span class="lineno">18176</span>&#160;{</div>
+<div class="line"><a name="l18177"></a><span class="lineno">18177</span>&#160;    VMA_ASSERT(pCreateInfo &amp;&amp; pAllocator);</div>
+<div class="line"><a name="l18178"></a><span class="lineno">18178</span>&#160;    VMA_ASSERT(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">vulkanApiVersion</a> == 0 ||</div>
+<div class="line"><a name="l18179"></a><span class="lineno">18179</span>&#160;        (VK_VERSION_MAJOR(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">vulkanApiVersion</a>) == 1 &amp;&amp; VK_VERSION_MINOR(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">vulkanApiVersion</a>) &lt;= 2));</div>
+<div class="line"><a name="l18180"></a><span class="lineno">18180</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreateAllocator&quot;</span>);</div>
+<div class="line"><a name="l18181"></a><span class="lineno">18181</span>&#160;    *pAllocator = vma_new(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d">pAllocationCallbacks</a>, VmaAllocator_T)(pCreateInfo);</div>
+<div class="line"><a name="l18182"></a><span class="lineno">18182</span>&#160;    <span class="keywordflow">return</span> (*pAllocator)-&gt;Init(pCreateInfo);</div>
+<div class="line"><a name="l18183"></a><span class="lineno">18183</span>&#160;}</div>
+<div class="line"><a name="l18184"></a><span class="lineno">18184</span>&#160; </div>
+<div class="line"><a name="l18185"></a><span class="lineno">18185</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d">vmaDestroyAllocator</a>(</div>
+<div class="line"><a name="l18186"></a><span class="lineno">18186</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator)</div>
+<div class="line"><a name="l18187"></a><span class="lineno">18187</span>&#160;{</div>
+<div class="line"><a name="l18188"></a><span class="lineno">18188</span>&#160;    <span class="keywordflow">if</span>(allocator != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l18189"></a><span class="lineno">18189</span>&#160;    {</div>
+<div class="line"><a name="l18190"></a><span class="lineno">18190</span>&#160;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyAllocator&quot;</span>);</div>
+<div class="line"><a name="l18191"></a><span class="lineno">18191</span>&#160;        VkAllocationCallbacks allocationCallbacks = allocator-&gt;m_AllocationCallbacks;</div>
+<div class="line"><a name="l18192"></a><span class="lineno">18192</span>&#160;        vma_delete(&amp;allocationCallbacks, allocator);</div>
+<div class="line"><a name="l18193"></a><span class="lineno">18193</span>&#160;    }</div>
+<div class="line"><a name="l18194"></a><span class="lineno">18194</span>&#160;}</div>
+<div class="line"><a name="l18195"></a><span class="lineno">18195</span>&#160; </div>
+<div class="line"><a name="l18196"></a><span class="lineno">18196</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#afa02231a791b37255720d566a52683e7">vmaGetAllocatorInfo</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="code" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a>* pAllocatorInfo)</div>
+<div class="line"><a name="l18197"></a><span class="lineno">18197</span>&#160;{</div>
+<div class="line"><a name="l18198"></a><span class="lineno">18198</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pAllocatorInfo);</div>
+<div class="line"><a name="l18199"></a><span class="lineno">18199</span>&#160;    pAllocatorInfo-&gt;<a class="code" href="struct_vma_allocator_info.html#a2ed6a4d2d3fea039d66a13f15d0ce5fe">instance</a> = allocator-&gt;m_hInstance;</div>
+<div class="line"><a name="l18200"></a><span class="lineno">18200</span>&#160;    pAllocatorInfo-&gt;<a class="code" href="struct_vma_allocator_info.html#aba2b703f96e51d567717e1fb2935b47a">physicalDevice</a> = allocator-&gt;GetPhysicalDevice();</div>
+<div class="line"><a name="l18201"></a><span class="lineno">18201</span>&#160;    pAllocatorInfo-&gt;<a class="code" href="struct_vma_allocator_info.html#a012b4c485bf3b0ea8921352c5ee0c357">device</a> = allocator-&gt;m_hDevice;</div>
+<div class="line"><a name="l18202"></a><span class="lineno">18202</span>&#160;}</div>
+<div class="line"><a name="l18203"></a><span class="lineno">18203</span>&#160; </div>
+<div class="line"><a name="l18204"></a><span class="lineno">18204</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0">vmaGetPhysicalDeviceProperties</a>(</div>
+<div class="line"><a name="l18205"></a><span class="lineno">18205</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18206"></a><span class="lineno">18206</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceProperties **ppPhysicalDeviceProperties)</div>
+<div class="line"><a name="l18207"></a><span class="lineno">18207</span>&#160;{</div>
+<div class="line"><a name="l18208"></a><span class="lineno">18208</span>&#160;    VMA_ASSERT(allocator &amp;&amp; ppPhysicalDeviceProperties);</div>
+<div class="line"><a name="l18209"></a><span class="lineno">18209</span>&#160;    *ppPhysicalDeviceProperties = &amp;allocator-&gt;m_PhysicalDeviceProperties;</div>
+<div class="line"><a name="l18210"></a><span class="lineno">18210</span>&#160;}</div>
+<div class="line"><a name="l18211"></a><span class="lineno">18211</span>&#160; </div>
+<div class="line"><a name="l18212"></a><span class="lineno">18212</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19">vmaGetMemoryProperties</a>(</div>
+<div class="line"><a name="l18213"></a><span class="lineno">18213</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18214"></a><span class="lineno">18214</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceMemoryProperties** ppPhysicalDeviceMemoryProperties)</div>
+<div class="line"><a name="l18215"></a><span class="lineno">18215</span>&#160;{</div>
+<div class="line"><a name="l18216"></a><span class="lineno">18216</span>&#160;    VMA_ASSERT(allocator &amp;&amp; ppPhysicalDeviceMemoryProperties);</div>
+<div class="line"><a name="l18217"></a><span class="lineno">18217</span>&#160;    *ppPhysicalDeviceMemoryProperties = &amp;allocator-&gt;m_MemProps;</div>
+<div class="line"><a name="l18218"></a><span class="lineno">18218</span>&#160;}</div>
+<div class="line"><a name="l18219"></a><span class="lineno">18219</span>&#160; </div>
+<div class="line"><a name="l18220"></a><span class="lineno">18220</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca">vmaGetMemoryTypeProperties</a>(</div>
+<div class="line"><a name="l18221"></a><span class="lineno">18221</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18222"></a><span class="lineno">18222</span>&#160;    uint32_t memoryTypeIndex,</div>
+<div class="line"><a name="l18223"></a><span class="lineno">18223</span>&#160;    VkMemoryPropertyFlags* pFlags)</div>
+<div class="line"><a name="l18224"></a><span class="lineno">18224</span>&#160;{</div>
+<div class="line"><a name="l18225"></a><span class="lineno">18225</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pFlags);</div>
+<div class="line"><a name="l18226"></a><span class="lineno">18226</span>&#160;    VMA_ASSERT(memoryTypeIndex &lt; allocator-&gt;GetMemoryTypeCount());</div>
+<div class="line"><a name="l18227"></a><span class="lineno">18227</span>&#160;    *pFlags = allocator-&gt;m_MemProps.memoryTypes[memoryTypeIndex].propertyFlags;</div>
+<div class="line"><a name="l18228"></a><span class="lineno">18228</span>&#160;}</div>
+<div class="line"><a name="l18229"></a><span class="lineno">18229</span>&#160; </div>
+<div class="line"><a name="l18230"></a><span class="lineno">18230</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236">vmaSetCurrentFrameIndex</a>(</div>
+<div class="line"><a name="l18231"></a><span class="lineno">18231</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18232"></a><span class="lineno">18232</span>&#160;    uint32_t frameIndex)</div>
+<div class="line"><a name="l18233"></a><span class="lineno">18233</span>&#160;{</div>
+<div class="line"><a name="l18234"></a><span class="lineno">18234</span>&#160;    VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l18235"></a><span class="lineno">18235</span>&#160;    VMA_ASSERT(frameIndex != VMA_FRAME_INDEX_LOST);</div>
+<div class="line"><a name="l18236"></a><span class="lineno">18236</span>&#160; </div>
+<div class="line"><a name="l18237"></a><span class="lineno">18237</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18238"></a><span class="lineno">18238</span>&#160; </div>
+<div class="line"><a name="l18239"></a><span class="lineno">18239</span>&#160;    allocator-&gt;SetCurrentFrameIndex(frameIndex);</div>
+<div class="line"><a name="l18240"></a><span class="lineno">18240</span>&#160;}</div>
+<div class="line"><a name="l18241"></a><span class="lineno">18241</span>&#160; </div>
+<div class="line"><a name="l18242"></a><span class="lineno">18242</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3">vmaCalculateStats</a>(</div>
+<div class="line"><a name="l18243"></a><span class="lineno">18243</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18244"></a><span class="lineno">18244</span>&#160;    <a class="code" href="struct_vma_stats.html">VmaStats</a>* pStats)</div>
+<div class="line"><a name="l18245"></a><span class="lineno">18245</span>&#160;{</div>
+<div class="line"><a name="l18246"></a><span class="lineno">18246</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pStats);</div>
+<div class="line"><a name="l18247"></a><span class="lineno">18247</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18248"></a><span class="lineno">18248</span>&#160;    allocator-&gt;CalculateStats(pStats);</div>
+<div class="line"><a name="l18249"></a><span class="lineno">18249</span>&#160;}</div>
+<div class="line"><a name="l18250"></a><span class="lineno">18250</span>&#160; </div>
+<div class="line"><a name="l18251"></a><span class="lineno">18251</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aec0ed24ebea2d0099eed5f801daaefba">vmaGetBudget</a>(</div>
+<div class="line"><a name="l18252"></a><span class="lineno">18252</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18253"></a><span class="lineno">18253</span>&#160;    <a class="code" href="struct_vma_budget.html">VmaBudget</a>* pBudget)</div>
+<div class="line"><a name="l18254"></a><span class="lineno">18254</span>&#160;{</div>
+<div class="line"><a name="l18255"></a><span class="lineno">18255</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pBudget);</div>
+<div class="line"><a name="l18256"></a><span class="lineno">18256</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18257"></a><span class="lineno">18257</span>&#160;    allocator-&gt;GetBudget(pBudget, 0, allocator-&gt;GetMemoryHeapCount());</div>
+<div class="line"><a name="l18258"></a><span class="lineno">18258</span>&#160;}</div>
+<div class="line"><a name="l18259"></a><span class="lineno">18259</span>&#160; </div>
+<div class="line"><a name="l18260"></a><span class="lineno">18260</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l18261"></a><span class="lineno">18261</span>&#160; </div>
+<div class="line"><a name="l18262"></a><span class="lineno">18262</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0">vmaBuildStatsString</a>(</div>
+<div class="line"><a name="l18263"></a><span class="lineno">18263</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18264"></a><span class="lineno">18264</span>&#160;    <span class="keywordtype">char</span>** ppStatsString,</div>
+<div class="line"><a name="l18265"></a><span class="lineno">18265</span>&#160;    VkBool32 detailedMap)</div>
+<div class="line"><a name="l18266"></a><span class="lineno">18266</span>&#160;{</div>
+<div class="line"><a name="l18267"></a><span class="lineno">18267</span>&#160;    VMA_ASSERT(allocator &amp;&amp; ppStatsString);</div>
+<div class="line"><a name="l18268"></a><span class="lineno">18268</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18269"></a><span class="lineno">18269</span>&#160; </div>
+<div class="line"><a name="l18270"></a><span class="lineno">18270</span>&#160;    VmaStringBuilder sb(allocator);</div>
+<div class="line"><a name="l18271"></a><span class="lineno">18271</span>&#160;    {</div>
+<div class="line"><a name="l18272"></a><span class="lineno">18272</span>&#160;        VmaJsonWriter json(allocator-&gt;GetAllocationCallbacks(), sb);</div>
+<div class="line"><a name="l18273"></a><span class="lineno">18273</span>&#160;        json.BeginObject();</div>
+<div class="line"><a name="l18274"></a><span class="lineno">18274</span>&#160; </div>
+<div class="line"><a name="l18275"></a><span class="lineno">18275</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> budget[VK_MAX_MEMORY_HEAPS];</div>
+<div class="line"><a name="l18276"></a><span class="lineno">18276</span>&#160;        allocator-&gt;GetBudget(budget, 0, allocator-&gt;GetMemoryHeapCount());</div>
+<div class="line"><a name="l18277"></a><span class="lineno">18277</span>&#160; </div>
+<div class="line"><a name="l18278"></a><span class="lineno">18278</span>&#160;        <a class="code" href="struct_vma_stats.html">VmaStats</a> stats;</div>
+<div class="line"><a name="l18279"></a><span class="lineno">18279</span>&#160;        allocator-&gt;CalculateStats(&amp;stats);</div>
+<div class="line"><a name="l18280"></a><span class="lineno">18280</span>&#160; </div>
+<div class="line"><a name="l18281"></a><span class="lineno">18281</span>&#160;        json.WriteString(<span class="stringliteral">&quot;Total&quot;</span>);</div>
+<div class="line"><a name="l18282"></a><span class="lineno">18282</span>&#160;        VmaPrintStatInfo(json, stats.<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>);</div>
+<div class="line"><a name="l18283"></a><span class="lineno">18283</span>&#160; </div>
+<div class="line"><a name="l18284"></a><span class="lineno">18284</span>&#160;        <span class="keywordflow">for</span>(uint32_t heapIndex = 0; heapIndex &lt; allocator-&gt;GetMemoryHeapCount(); ++heapIndex)</div>
+<div class="line"><a name="l18285"></a><span class="lineno">18285</span>&#160;        {</div>
+<div class="line"><a name="l18286"></a><span class="lineno">18286</span>&#160;            json.BeginString(<span class="stringliteral">&quot;Heap &quot;</span>);</div>
+<div class="line"><a name="l18287"></a><span class="lineno">18287</span>&#160;            json.ContinueString(heapIndex);</div>
+<div class="line"><a name="l18288"></a><span class="lineno">18288</span>&#160;            json.EndString();</div>
+<div class="line"><a name="l18289"></a><span class="lineno">18289</span>&#160;            json.BeginObject();</div>
+<div class="line"><a name="l18290"></a><span class="lineno">18290</span>&#160; </div>
+<div class="line"><a name="l18291"></a><span class="lineno">18291</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Size&quot;</span>);</div>
+<div class="line"><a name="l18292"></a><span class="lineno">18292</span>&#160;            json.WriteNumber(allocator-&gt;m_MemProps.memoryHeaps[heapIndex].size);</div>
+<div class="line"><a name="l18293"></a><span class="lineno">18293</span>&#160; </div>
+<div class="line"><a name="l18294"></a><span class="lineno">18294</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Flags&quot;</span>);</div>
+<div class="line"><a name="l18295"></a><span class="lineno">18295</span>&#160;            json.BeginArray(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l18296"></a><span class="lineno">18296</span>&#160;            <span class="keywordflow">if</span>((allocator-&gt;m_MemProps.memoryHeaps[heapIndex].flags &amp; VK_MEMORY_HEAP_DEVICE_LOCAL_BIT) != 0)</div>
+<div class="line"><a name="l18297"></a><span class="lineno">18297</span>&#160;            {</div>
+<div class="line"><a name="l18298"></a><span class="lineno">18298</span>&#160;                json.WriteString(<span class="stringliteral">&quot;DEVICE_LOCAL&quot;</span>);</div>
+<div class="line"><a name="l18299"></a><span class="lineno">18299</span>&#160;            }</div>
+<div class="line"><a name="l18300"></a><span class="lineno">18300</span>&#160;            json.EndArray();</div>
+<div class="line"><a name="l18301"></a><span class="lineno">18301</span>&#160; </div>
+<div class="line"><a name="l18302"></a><span class="lineno">18302</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Budget&quot;</span>);</div>
+<div class="line"><a name="l18303"></a><span class="lineno">18303</span>&#160;            json.BeginObject();</div>
+<div class="line"><a name="l18304"></a><span class="lineno">18304</span>&#160;            {</div>
+<div class="line"><a name="l18305"></a><span class="lineno">18305</span>&#160;                json.WriteString(<span class="stringliteral">&quot;BlockBytes&quot;</span>);</div>
+<div class="line"><a name="l18306"></a><span class="lineno">18306</span>&#160;                json.WriteNumber(budget[heapIndex].blockBytes);</div>
+<div class="line"><a name="l18307"></a><span class="lineno">18307</span>&#160;                json.WriteString(<span class="stringliteral">&quot;AllocationBytes&quot;</span>);</div>
+<div class="line"><a name="l18308"></a><span class="lineno">18308</span>&#160;                json.WriteNumber(budget[heapIndex].allocationBytes);</div>
+<div class="line"><a name="l18309"></a><span class="lineno">18309</span>&#160;                json.WriteString(<span class="stringliteral">&quot;Usage&quot;</span>);</div>
+<div class="line"><a name="l18310"></a><span class="lineno">18310</span>&#160;                json.WriteNumber(budget[heapIndex].usage);</div>
+<div class="line"><a name="l18311"></a><span class="lineno">18311</span>&#160;                json.WriteString(<span class="stringliteral">&quot;Budget&quot;</span>);</div>
+<div class="line"><a name="l18312"></a><span class="lineno">18312</span>&#160;                json.WriteNumber(budget[heapIndex].budget);</div>
+<div class="line"><a name="l18313"></a><span class="lineno">18313</span>&#160;            }</div>
+<div class="line"><a name="l18314"></a><span class="lineno">18314</span>&#160;            json.EndObject();</div>
+<div class="line"><a name="l18315"></a><span class="lineno">18315</span>&#160; </div>
+<div class="line"><a name="l18316"></a><span class="lineno">18316</span>&#160;            <span class="keywordflow">if</span>(stats.<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[heapIndex].<a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a> &gt; 0)</div>
+<div class="line"><a name="l18317"></a><span class="lineno">18317</span>&#160;            {</div>
+<div class="line"><a name="l18318"></a><span class="lineno">18318</span>&#160;                json.WriteString(<span class="stringliteral">&quot;Stats&quot;</span>);</div>
+<div class="line"><a name="l18319"></a><span class="lineno">18319</span>&#160;                VmaPrintStatInfo(json, stats.<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[heapIndex]);</div>
+<div class="line"><a name="l18320"></a><span class="lineno">18320</span>&#160;            }</div>
+<div class="line"><a name="l18321"></a><span class="lineno">18321</span>&#160; </div>
+<div class="line"><a name="l18322"></a><span class="lineno">18322</span>&#160;            <span class="keywordflow">for</span>(uint32_t typeIndex = 0; typeIndex &lt; allocator-&gt;GetMemoryTypeCount(); ++typeIndex)</div>
+<div class="line"><a name="l18323"></a><span class="lineno">18323</span>&#160;            {</div>
+<div class="line"><a name="l18324"></a><span class="lineno">18324</span>&#160;                <span class="keywordflow">if</span>(allocator-&gt;MemoryTypeIndexToHeapIndex(typeIndex) == heapIndex)</div>
+<div class="line"><a name="l18325"></a><span class="lineno">18325</span>&#160;                {</div>
+<div class="line"><a name="l18326"></a><span class="lineno">18326</span>&#160;                    json.BeginString(<span class="stringliteral">&quot;Type &quot;</span>);</div>
+<div class="line"><a name="l18327"></a><span class="lineno">18327</span>&#160;                    json.ContinueString(typeIndex);</div>
+<div class="line"><a name="l18328"></a><span class="lineno">18328</span>&#160;                    json.EndString();</div>
+<div class="line"><a name="l18329"></a><span class="lineno">18329</span>&#160; </div>
+<div class="line"><a name="l18330"></a><span class="lineno">18330</span>&#160;                    json.BeginObject();</div>
+<div class="line"><a name="l18331"></a><span class="lineno">18331</span>&#160; </div>
+<div class="line"><a name="l18332"></a><span class="lineno">18332</span>&#160;                    json.WriteString(<span class="stringliteral">&quot;Flags&quot;</span>);</div>
+<div class="line"><a name="l18333"></a><span class="lineno">18333</span>&#160;                    json.BeginArray(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l18334"></a><span class="lineno">18334</span>&#160;                    VkMemoryPropertyFlags flags = allocator-&gt;m_MemProps.memoryTypes[typeIndex].propertyFlags;</div>
+<div class="line"><a name="l18335"></a><span class="lineno">18335</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) != 0)</div>
+<div class="line"><a name="l18336"></a><span class="lineno">18336</span>&#160;                    {</div>
+<div class="line"><a name="l18337"></a><span class="lineno">18337</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;DEVICE_LOCAL&quot;</span>);</div>
+<div class="line"><a name="l18338"></a><span class="lineno">18338</span>&#160;                    }</div>
+<div class="line"><a name="l18339"></a><span class="lineno">18339</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0)</div>
+<div class="line"><a name="l18340"></a><span class="lineno">18340</span>&#160;                    {</div>
+<div class="line"><a name="l18341"></a><span class="lineno">18341</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;HOST_VISIBLE&quot;</span>);</div>
+<div class="line"><a name="l18342"></a><span class="lineno">18342</span>&#160;                    }</div>
+<div class="line"><a name="l18343"></a><span class="lineno">18343</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) != 0)</div>
+<div class="line"><a name="l18344"></a><span class="lineno">18344</span>&#160;                    {</div>
+<div class="line"><a name="l18345"></a><span class="lineno">18345</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;HOST_COHERENT&quot;</span>);</div>
+<div class="line"><a name="l18346"></a><span class="lineno">18346</span>&#160;                    }</div>
+<div class="line"><a name="l18347"></a><span class="lineno">18347</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_HOST_CACHED_BIT) != 0)</div>
+<div class="line"><a name="l18348"></a><span class="lineno">18348</span>&#160;                    {</div>
+<div class="line"><a name="l18349"></a><span class="lineno">18349</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;HOST_CACHED&quot;</span>);</div>
+<div class="line"><a name="l18350"></a><span class="lineno">18350</span>&#160;                    }</div>
+<div class="line"><a name="l18351"></a><span class="lineno">18351</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT) != 0)</div>
+<div class="line"><a name="l18352"></a><span class="lineno">18352</span>&#160;                    {</div>
+<div class="line"><a name="l18353"></a><span class="lineno">18353</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;LAZILY_ALLOCATED&quot;</span>);</div>
+<div class="line"><a name="l18354"></a><span class="lineno">18354</span>&#160;                    }</div>
+<div class="line"><a name="l18355"></a><span class="lineno">18355</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l18356"></a><span class="lineno">18356</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_PROTECTED_BIT) != 0)</div>
+<div class="line"><a name="l18357"></a><span class="lineno">18357</span>&#160;                    {</div>
+<div class="line"><a name="l18358"></a><span class="lineno">18358</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;PROTECTED&quot;</span>);</div>
+<div class="line"><a name="l18359"></a><span class="lineno">18359</span>&#160;                    }</div>
+<div class="line"><a name="l18360"></a><span class="lineno">18360</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l18361"></a><span class="lineno">18361</span>&#160;<span class="preprocessor">#if VK_AMD_device_coherent_memory</span></div>
+<div class="line"><a name="l18362"></a><span class="lineno">18362</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY) != 0)</div>
+<div class="line"><a name="l18363"></a><span class="lineno">18363</span>&#160;                    {</div>
+<div class="line"><a name="l18364"></a><span class="lineno">18364</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;DEVICE_COHERENT&quot;</span>);</div>
+<div class="line"><a name="l18365"></a><span class="lineno">18365</span>&#160;                    }</div>
+<div class="line"><a name="l18366"></a><span class="lineno">18366</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY) != 0)</div>
+<div class="line"><a name="l18367"></a><span class="lineno">18367</span>&#160;                    {</div>
+<div class="line"><a name="l18368"></a><span class="lineno">18368</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;DEVICE_UNCACHED&quot;</span>);</div>
+<div class="line"><a name="l18369"></a><span class="lineno">18369</span>&#160;                    }</div>
+<div class="line"><a name="l18370"></a><span class="lineno">18370</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VK_AMD_device_coherent_memory</span></div>
+<div class="line"><a name="l18371"></a><span class="lineno">18371</span>&#160;                    json.EndArray();</div>
+<div class="line"><a name="l18372"></a><span class="lineno">18372</span>&#160; </div>
+<div class="line"><a name="l18373"></a><span class="lineno">18373</span>&#160;                    <span class="keywordflow">if</span>(stats.<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[typeIndex].<a class="code" href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">blockCount</a> &gt; 0)</div>
+<div class="line"><a name="l18374"></a><span class="lineno">18374</span>&#160;                    {</div>
+<div class="line"><a name="l18375"></a><span class="lineno">18375</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;Stats&quot;</span>);</div>
+<div class="line"><a name="l18376"></a><span class="lineno">18376</span>&#160;                        VmaPrintStatInfo(json, stats.<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[typeIndex]);</div>
+<div class="line"><a name="l18377"></a><span class="lineno">18377</span>&#160;                    }</div>
+<div class="line"><a name="l18378"></a><span class="lineno">18378</span>&#160; </div>
+<div class="line"><a name="l18379"></a><span class="lineno">18379</span>&#160;                    json.EndObject();</div>
+<div class="line"><a name="l18380"></a><span class="lineno">18380</span>&#160;                }</div>
+<div class="line"><a name="l18381"></a><span class="lineno">18381</span>&#160;            }</div>
+<div class="line"><a name="l18382"></a><span class="lineno">18382</span>&#160; </div>
+<div class="line"><a name="l18383"></a><span class="lineno">18383</span>&#160;            json.EndObject();</div>
+<div class="line"><a name="l18384"></a><span class="lineno">18384</span>&#160;        }</div>
+<div class="line"><a name="l18385"></a><span class="lineno">18385</span>&#160;        <span class="keywordflow">if</span>(detailedMap == VK_TRUE)</div>
+<div class="line"><a name="l18386"></a><span class="lineno">18386</span>&#160;        {</div>
+<div class="line"><a name="l18387"></a><span class="lineno">18387</span>&#160;            allocator-&gt;PrintDetailedMap(json);</div>
+<div class="line"><a name="l18388"></a><span class="lineno">18388</span>&#160;        }</div>
+<div class="line"><a name="l18389"></a><span class="lineno">18389</span>&#160; </div>
+<div class="line"><a name="l18390"></a><span class="lineno">18390</span>&#160;        json.EndObject();</div>
+<div class="line"><a name="l18391"></a><span class="lineno">18391</span>&#160;    }</div>
+<div class="line"><a name="l18392"></a><span class="lineno">18392</span>&#160; </div>
+<div class="line"><a name="l18393"></a><span class="lineno">18393</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> len = sb.GetLength();</div>
+<div class="line"><a name="l18394"></a><span class="lineno">18394</span>&#160;    <span class="keywordtype">char</span>* <span class="keyword">const</span> pChars = vma_new_array(allocator, <span class="keywordtype">char</span>, len + 1);</div>
+<div class="line"><a name="l18395"></a><span class="lineno">18395</span>&#160;    <span class="keywordflow">if</span>(len &gt; 0)</div>
+<div class="line"><a name="l18396"></a><span class="lineno">18396</span>&#160;    {</div>
+<div class="line"><a name="l18397"></a><span class="lineno">18397</span>&#160;        memcpy(pChars, sb.GetData(), len);</div>
+<div class="line"><a name="l18398"></a><span class="lineno">18398</span>&#160;    }</div>
+<div class="line"><a name="l18399"></a><span class="lineno">18399</span>&#160;    pChars[len] = <span class="charliteral">&#39;\0&#39;</span>;</div>
+<div class="line"><a name="l18400"></a><span class="lineno">18400</span>&#160;    *ppStatsString = pChars;</div>
+<div class="line"><a name="l18401"></a><span class="lineno">18401</span>&#160;}</div>
+<div class="line"><a name="l18402"></a><span class="lineno">18402</span>&#160; </div>
+<div class="line"><a name="l18403"></a><span class="lineno">18403</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288">vmaFreeStatsString</a>(</div>
+<div class="line"><a name="l18404"></a><span class="lineno">18404</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18405"></a><span class="lineno">18405</span>&#160;    <span class="keywordtype">char</span>* pStatsString)</div>
+<div class="line"><a name="l18406"></a><span class="lineno">18406</span>&#160;{</div>
+<div class="line"><a name="l18407"></a><span class="lineno">18407</span>&#160;    <span class="keywordflow">if</span>(pStatsString != VMA_NULL)</div>
+<div class="line"><a name="l18408"></a><span class="lineno">18408</span>&#160;    {</div>
+<div class="line"><a name="l18409"></a><span class="lineno">18409</span>&#160;        VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l18410"></a><span class="lineno">18410</span>&#160;        <span class="keywordtype">size_t</span> len = strlen(pStatsString);</div>
+<div class="line"><a name="l18411"></a><span class="lineno">18411</span>&#160;        vma_delete_array(allocator, pStatsString, len + 1);</div>
+<div class="line"><a name="l18412"></a><span class="lineno">18412</span>&#160;    }</div>
+<div class="line"><a name="l18413"></a><span class="lineno">18413</span>&#160;}</div>
+<div class="line"><a name="l18414"></a><span class="lineno">18414</span>&#160; </div>
+<div class="line"><a name="l18415"></a><span class="lineno">18415</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l18416"></a><span class="lineno">18416</span>&#160; </div>
+<div class="line"><a name="l18417"></a><span class="lineno">18417</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l18418"></a><span class="lineno">18418</span>&#160;<span class="comment">This function is not protected by any mutex because it just reads immutable data.</span></div>
+<div class="line"><a name="l18419"></a><span class="lineno">18419</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l18420"></a><span class="lineno">18420</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(</div>
+<div class="line"><a name="l18421"></a><span class="lineno">18421</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18422"></a><span class="lineno">18422</span>&#160;    uint32_t memoryTypeBits,</div>
+<div class="line"><a name="l18423"></a><span class="lineno">18423</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div>
+<div class="line"><a name="l18424"></a><span class="lineno">18424</span>&#160;    uint32_t* pMemoryTypeIndex)</div>
+<div class="line"><a name="l18425"></a><span class="lineno">18425</span>&#160;{</div>
+<div class="line"><a name="l18426"></a><span class="lineno">18426</span>&#160;    VMA_ASSERT(allocator != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l18427"></a><span class="lineno">18427</span>&#160;    VMA_ASSERT(pAllocationCreateInfo != VMA_NULL);</div>
+<div class="line"><a name="l18428"></a><span class="lineno">18428</span>&#160;    VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);</div>
+<div class="line"><a name="l18429"></a><span class="lineno">18429</span>&#160; </div>
+<div class="line"><a name="l18430"></a><span class="lineno">18430</span>&#160;    memoryTypeBits &amp;= allocator-&gt;GetGlobalMemoryTypeBits();</div>
+<div class="line"><a name="l18431"></a><span class="lineno">18431</span>&#160; </div>
+<div class="line"><a name="l18432"></a><span class="lineno">18432</span>&#160;    <span class="keywordflow">if</span>(pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a> != 0)</div>
+<div class="line"><a name="l18433"></a><span class="lineno">18433</span>&#160;    {</div>
+<div class="line"><a name="l18434"></a><span class="lineno">18434</span>&#160;        memoryTypeBits &amp;= pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>;</div>
+<div class="line"><a name="l18435"></a><span class="lineno">18435</span>&#160;    }</div>
+<div class="line"><a name="l18436"></a><span class="lineno">18436</span>&#160; </div>
+<div class="line"><a name="l18437"></a><span class="lineno">18437</span>&#160;    uint32_t requiredFlags = pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>;</div>
+<div class="line"><a name="l18438"></a><span class="lineno">18438</span>&#160;    uint32_t preferredFlags = pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>;</div>
+<div class="line"><a name="l18439"></a><span class="lineno">18439</span>&#160;    uint32_t notPreferredFlags = 0;</div>
+<div class="line"><a name="l18440"></a><span class="lineno">18440</span>&#160; </div>
+<div class="line"><a name="l18441"></a><span class="lineno">18441</span>&#160;    <span class="comment">// Convert usage to requiredFlags and preferredFlags.</span></div>
+<div class="line"><a name="l18442"></a><span class="lineno">18442</span>&#160;    <span class="keywordflow">switch</span>(pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>)</div>
+<div class="line"><a name="l18443"></a><span class="lineno">18443</span>&#160;    {</div>
+<div class="line"><a name="l18444"></a><span class="lineno">18444</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a>:</div>
+<div class="line"><a name="l18445"></a><span class="lineno">18445</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l18446"></a><span class="lineno">18446</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>:</div>
+<div class="line"><a name="l18447"></a><span class="lineno">18447</span>&#160;        <span class="keywordflow">if</span>(!allocator-&gt;IsIntegratedGpu() || (preferredFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)</div>
+<div class="line"><a name="l18448"></a><span class="lineno">18448</span>&#160;        {</div>
+<div class="line"><a name="l18449"></a><span class="lineno">18449</span>&#160;            preferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;</div>
+<div class="line"><a name="l18450"></a><span class="lineno">18450</span>&#160;        }</div>
+<div class="line"><a name="l18451"></a><span class="lineno">18451</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l18452"></a><span class="lineno">18452</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a>:</div>
+<div class="line"><a name="l18453"></a><span class="lineno">18453</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;</div>
+<div class="line"><a name="l18454"></a><span class="lineno">18454</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l18455"></a><span class="lineno">18455</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a>:</div>
+<div class="line"><a name="l18456"></a><span class="lineno">18456</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;</div>
+<div class="line"><a name="l18457"></a><span class="lineno">18457</span>&#160;        <span class="keywordflow">if</span>(!allocator-&gt;IsIntegratedGpu() || (preferredFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)</div>
+<div class="line"><a name="l18458"></a><span class="lineno">18458</span>&#160;        {</div>
+<div class="line"><a name="l18459"></a><span class="lineno">18459</span>&#160;            preferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;</div>
+<div class="line"><a name="l18460"></a><span class="lineno">18460</span>&#160;        }</div>
+<div class="line"><a name="l18461"></a><span class="lineno">18461</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l18462"></a><span class="lineno">18462</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a>:</div>
+<div class="line"><a name="l18463"></a><span class="lineno">18463</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;</div>
+<div class="line"><a name="l18464"></a><span class="lineno">18464</span>&#160;        preferredFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT;</div>
+<div class="line"><a name="l18465"></a><span class="lineno">18465</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l18466"></a><span class="lineno">18466</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500">VMA_MEMORY_USAGE_CPU_COPY</a>:</div>
+<div class="line"><a name="l18467"></a><span class="lineno">18467</span>&#160;        notPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;</div>
+<div class="line"><a name="l18468"></a><span class="lineno">18468</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l18469"></a><span class="lineno">18469</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED</a>:</div>
+<div class="line"><a name="l18470"></a><span class="lineno">18470</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;</div>
+<div class="line"><a name="l18471"></a><span class="lineno">18471</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l18472"></a><span class="lineno">18472</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l18473"></a><span class="lineno">18473</span>&#160;        VMA_ASSERT(0);</div>
+<div class="line"><a name="l18474"></a><span class="lineno">18474</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l18475"></a><span class="lineno">18475</span>&#160;    }</div>
+<div class="line"><a name="l18476"></a><span class="lineno">18476</span>&#160; </div>
+<div class="line"><a name="l18477"></a><span class="lineno">18477</span>&#160;    <span class="comment">// Avoid DEVICE_COHERENT unless explicitly requested.</span></div>
+<div class="line"><a name="l18478"></a><span class="lineno">18478</span>&#160;    <span class="keywordflow">if</span>(((pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a> | pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>) &amp;</div>
+<div class="line"><a name="l18479"></a><span class="lineno">18479</span>&#160;        (VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY | VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY)) == 0)</div>
+<div class="line"><a name="l18480"></a><span class="lineno">18480</span>&#160;    {</div>
+<div class="line"><a name="l18481"></a><span class="lineno">18481</span>&#160;        notPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY;</div>
+<div class="line"><a name="l18482"></a><span class="lineno">18482</span>&#160;    }</div>
+<div class="line"><a name="l18483"></a><span class="lineno">18483</span>&#160; </div>
+<div class="line"><a name="l18484"></a><span class="lineno">18484</span>&#160;    *pMemoryTypeIndex = UINT32_MAX;</div>
+<div class="line"><a name="l18485"></a><span class="lineno">18485</span>&#160;    uint32_t minCost = UINT32_MAX;</div>
+<div class="line"><a name="l18486"></a><span class="lineno">18486</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0, memTypeBit = 1;</div>
+<div class="line"><a name="l18487"></a><span class="lineno">18487</span>&#160;        memTypeIndex &lt; allocator-&gt;GetMemoryTypeCount();</div>
+<div class="line"><a name="l18488"></a><span class="lineno">18488</span>&#160;        ++memTypeIndex, memTypeBit &lt;&lt;= 1)</div>
+<div class="line"><a name="l18489"></a><span class="lineno">18489</span>&#160;    {</div>
+<div class="line"><a name="l18490"></a><span class="lineno">18490</span>&#160;        <span class="comment">// This memory type is acceptable according to memoryTypeBits bitmask.</span></div>
+<div class="line"><a name="l18491"></a><span class="lineno">18491</span>&#160;        <span class="keywordflow">if</span>((memTypeBit &amp; memoryTypeBits) != 0)</div>
+<div class="line"><a name="l18492"></a><span class="lineno">18492</span>&#160;        {</div>
+<div class="line"><a name="l18493"></a><span class="lineno">18493</span>&#160;            <span class="keyword">const</span> VkMemoryPropertyFlags currFlags =</div>
+<div class="line"><a name="l18494"></a><span class="lineno">18494</span>&#160;                allocator-&gt;m_MemProps.memoryTypes[memTypeIndex].propertyFlags;</div>
+<div class="line"><a name="l18495"></a><span class="lineno">18495</span>&#160;            <span class="comment">// This memory type contains requiredFlags.</span></div>
+<div class="line"><a name="l18496"></a><span class="lineno">18496</span>&#160;            <span class="keywordflow">if</span>((requiredFlags &amp; ~currFlags) == 0)</div>
+<div class="line"><a name="l18497"></a><span class="lineno">18497</span>&#160;            {</div>
+<div class="line"><a name="l18498"></a><span class="lineno">18498</span>&#160;                <span class="comment">// Calculate cost as number of bits from preferredFlags not present in this memory type.</span></div>
+<div class="line"><a name="l18499"></a><span class="lineno">18499</span>&#160;                uint32_t currCost = VmaCountBitsSet(preferredFlags &amp; ~currFlags) +</div>
+<div class="line"><a name="l18500"></a><span class="lineno">18500</span>&#160;                    VmaCountBitsSet(currFlags &amp; notPreferredFlags);</div>
+<div class="line"><a name="l18501"></a><span class="lineno">18501</span>&#160;                <span class="comment">// Remember memory type with lowest cost.</span></div>
+<div class="line"><a name="l18502"></a><span class="lineno">18502</span>&#160;                <span class="keywordflow">if</span>(currCost &lt; minCost)</div>
+<div class="line"><a name="l18503"></a><span class="lineno">18503</span>&#160;                {</div>
+<div class="line"><a name="l18504"></a><span class="lineno">18504</span>&#160;                    *pMemoryTypeIndex = memTypeIndex;</div>
+<div class="line"><a name="l18505"></a><span class="lineno">18505</span>&#160;                    <span class="keywordflow">if</span>(currCost == 0)</div>
+<div class="line"><a name="l18506"></a><span class="lineno">18506</span>&#160;                    {</div>
+<div class="line"><a name="l18507"></a><span class="lineno">18507</span>&#160;                        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l18508"></a><span class="lineno">18508</span>&#160;                    }</div>
+<div class="line"><a name="l18509"></a><span class="lineno">18509</span>&#160;                    minCost = currCost;</div>
+<div class="line"><a name="l18510"></a><span class="lineno">18510</span>&#160;                }</div>
+<div class="line"><a name="l18511"></a><span class="lineno">18511</span>&#160;            }</div>
+<div class="line"><a name="l18512"></a><span class="lineno">18512</span>&#160;        }</div>
+<div class="line"><a name="l18513"></a><span class="lineno">18513</span>&#160;    }</div>
+<div class="line"><a name="l18514"></a><span class="lineno">18514</span>&#160;    <span class="keywordflow">return</span> (*pMemoryTypeIndex != UINT32_MAX) ? VK_SUCCESS : VK_ERROR_FEATURE_NOT_PRESENT;</div>
+<div class="line"><a name="l18515"></a><span class="lineno">18515</span>&#160;}</div>
+<div class="line"><a name="l18516"></a><span class="lineno">18516</span>&#160; </div>
+<div class="line"><a name="l18517"></a><span class="lineno">18517</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888">vmaFindMemoryTypeIndexForBufferInfo</a>(</div>
+<div class="line"><a name="l18518"></a><span class="lineno">18518</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18519"></a><span class="lineno">18519</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* pBufferCreateInfo,</div>
+<div class="line"><a name="l18520"></a><span class="lineno">18520</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div>
+<div class="line"><a name="l18521"></a><span class="lineno">18521</span>&#160;    uint32_t* pMemoryTypeIndex)</div>
+<div class="line"><a name="l18522"></a><span class="lineno">18522</span>&#160;{</div>
+<div class="line"><a name="l18523"></a><span class="lineno">18523</span>&#160;    VMA_ASSERT(allocator != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l18524"></a><span class="lineno">18524</span>&#160;    VMA_ASSERT(pBufferCreateInfo != VMA_NULL);</div>
+<div class="line"><a name="l18525"></a><span class="lineno">18525</span>&#160;    VMA_ASSERT(pAllocationCreateInfo != VMA_NULL);</div>
+<div class="line"><a name="l18526"></a><span class="lineno">18526</span>&#160;    VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);</div>
+<div class="line"><a name="l18527"></a><span class="lineno">18527</span>&#160; </div>
+<div class="line"><a name="l18528"></a><span class="lineno">18528</span>&#160;    <span class="keyword">const</span> VkDevice hDev = allocator-&gt;m_hDevice;</div>
+<div class="line"><a name="l18529"></a><span class="lineno">18529</span>&#160;    VkBuffer hBuffer = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l18530"></a><span class="lineno">18530</span>&#160;    VkResult res = allocator-&gt;GetVulkanFunctions().vkCreateBuffer(</div>
+<div class="line"><a name="l18531"></a><span class="lineno">18531</span>&#160;        hDev, pBufferCreateInfo, allocator-&gt;GetAllocationCallbacks(), &amp;hBuffer);</div>
+<div class="line"><a name="l18532"></a><span class="lineno">18532</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l18533"></a><span class="lineno">18533</span>&#160;    {</div>
+<div class="line"><a name="l18534"></a><span class="lineno">18534</span>&#160;        VkMemoryRequirements memReq = {};</div>
+<div class="line"><a name="l18535"></a><span class="lineno">18535</span>&#160;        allocator-&gt;GetVulkanFunctions().vkGetBufferMemoryRequirements(</div>
+<div class="line"><a name="l18536"></a><span class="lineno">18536</span>&#160;            hDev, hBuffer, &amp;memReq);</div>
+<div class="line"><a name="l18537"></a><span class="lineno">18537</span>&#160; </div>
+<div class="line"><a name="l18538"></a><span class="lineno">18538</span>&#160;        res = <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(</div>
+<div class="line"><a name="l18539"></a><span class="lineno">18539</span>&#160;            allocator,</div>
+<div class="line"><a name="l18540"></a><span class="lineno">18540</span>&#160;            memReq.memoryTypeBits,</div>
+<div class="line"><a name="l18541"></a><span class="lineno">18541</span>&#160;            pAllocationCreateInfo,</div>
+<div class="line"><a name="l18542"></a><span class="lineno">18542</span>&#160;            pMemoryTypeIndex);</div>
+<div class="line"><a name="l18543"></a><span class="lineno">18543</span>&#160; </div>
+<div class="line"><a name="l18544"></a><span class="lineno">18544</span>&#160;        allocator-&gt;GetVulkanFunctions().vkDestroyBuffer(</div>
+<div class="line"><a name="l18545"></a><span class="lineno">18545</span>&#160;            hDev, hBuffer, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l18546"></a><span class="lineno">18546</span>&#160;    }</div>
+<div class="line"><a name="l18547"></a><span class="lineno">18547</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l18548"></a><span class="lineno">18548</span>&#160;}</div>
+<div class="line"><a name="l18549"></a><span class="lineno">18549</span>&#160; </div>
+<div class="line"><a name="l18550"></a><span class="lineno">18550</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472">vmaFindMemoryTypeIndexForImageInfo</a>(</div>
+<div class="line"><a name="l18551"></a><span class="lineno">18551</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18552"></a><span class="lineno">18552</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo* pImageCreateInfo,</div>
+<div class="line"><a name="l18553"></a><span class="lineno">18553</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div>
+<div class="line"><a name="l18554"></a><span class="lineno">18554</span>&#160;    uint32_t* pMemoryTypeIndex)</div>
+<div class="line"><a name="l18555"></a><span class="lineno">18555</span>&#160;{</div>
+<div class="line"><a name="l18556"></a><span class="lineno">18556</span>&#160;    VMA_ASSERT(allocator != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l18557"></a><span class="lineno">18557</span>&#160;    VMA_ASSERT(pImageCreateInfo != VMA_NULL);</div>
+<div class="line"><a name="l18558"></a><span class="lineno">18558</span>&#160;    VMA_ASSERT(pAllocationCreateInfo != VMA_NULL);</div>
+<div class="line"><a name="l18559"></a><span class="lineno">18559</span>&#160;    VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);</div>
+<div class="line"><a name="l18560"></a><span class="lineno">18560</span>&#160; </div>
+<div class="line"><a name="l18561"></a><span class="lineno">18561</span>&#160;    <span class="keyword">const</span> VkDevice hDev = allocator-&gt;m_hDevice;</div>
+<div class="line"><a name="l18562"></a><span class="lineno">18562</span>&#160;    VkImage hImage = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l18563"></a><span class="lineno">18563</span>&#160;    VkResult res = allocator-&gt;GetVulkanFunctions().vkCreateImage(</div>
+<div class="line"><a name="l18564"></a><span class="lineno">18564</span>&#160;        hDev, pImageCreateInfo, allocator-&gt;GetAllocationCallbacks(), &amp;hImage);</div>
+<div class="line"><a name="l18565"></a><span class="lineno">18565</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l18566"></a><span class="lineno">18566</span>&#160;    {</div>
+<div class="line"><a name="l18567"></a><span class="lineno">18567</span>&#160;        VkMemoryRequirements memReq = {};</div>
+<div class="line"><a name="l18568"></a><span class="lineno">18568</span>&#160;        allocator-&gt;GetVulkanFunctions().vkGetImageMemoryRequirements(</div>
+<div class="line"><a name="l18569"></a><span class="lineno">18569</span>&#160;            hDev, hImage, &amp;memReq);</div>
+<div class="line"><a name="l18570"></a><span class="lineno">18570</span>&#160; </div>
+<div class="line"><a name="l18571"></a><span class="lineno">18571</span>&#160;        res = <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(</div>
+<div class="line"><a name="l18572"></a><span class="lineno">18572</span>&#160;            allocator,</div>
+<div class="line"><a name="l18573"></a><span class="lineno">18573</span>&#160;            memReq.memoryTypeBits,</div>
+<div class="line"><a name="l18574"></a><span class="lineno">18574</span>&#160;            pAllocationCreateInfo,</div>
+<div class="line"><a name="l18575"></a><span class="lineno">18575</span>&#160;            pMemoryTypeIndex);</div>
+<div class="line"><a name="l18576"></a><span class="lineno">18576</span>&#160; </div>
+<div class="line"><a name="l18577"></a><span class="lineno">18577</span>&#160;        allocator-&gt;GetVulkanFunctions().vkDestroyImage(</div>
+<div class="line"><a name="l18578"></a><span class="lineno">18578</span>&#160;            hDev, hImage, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l18579"></a><span class="lineno">18579</span>&#160;    }</div>
+<div class="line"><a name="l18580"></a><span class="lineno">18580</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l18581"></a><span class="lineno">18581</span>&#160;}</div>
+<div class="line"><a name="l18582"></a><span class="lineno">18582</span>&#160; </div>
+<div class="line"><a name="l18583"></a><span class="lineno">18583</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50">vmaCreatePool</a>(</div>
+<div class="line"><a name="l18584"></a><span class="lineno">18584</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18585"></a><span class="lineno">18585</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a>* pCreateInfo,</div>
+<div class="line"><a name="l18586"></a><span class="lineno">18586</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a>* pPool)</div>
+<div class="line"><a name="l18587"></a><span class="lineno">18587</span>&#160;{</div>
+<div class="line"><a name="l18588"></a><span class="lineno">18588</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pCreateInfo &amp;&amp; pPool);</div>
+<div class="line"><a name="l18589"></a><span class="lineno">18589</span>&#160; </div>
+<div class="line"><a name="l18590"></a><span class="lineno">18590</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreatePool&quot;</span>);</div>
+<div class="line"><a name="l18591"></a><span class="lineno">18591</span>&#160; </div>
+<div class="line"><a name="l18592"></a><span class="lineno">18592</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18593"></a><span class="lineno">18593</span>&#160; </div>
+<div class="line"><a name="l18594"></a><span class="lineno">18594</span>&#160;    VkResult res = allocator-&gt;CreatePool(pCreateInfo, pPool);</div>
+<div class="line"><a name="l18595"></a><span class="lineno">18595</span>&#160; </div>
+<div class="line"><a name="l18596"></a><span class="lineno">18596</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l18597"></a><span class="lineno">18597</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l18598"></a><span class="lineno">18598</span>&#160;    {</div>
+<div class="line"><a name="l18599"></a><span class="lineno">18599</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordCreatePool(allocator-&gt;GetCurrentFrameIndex(), *pCreateInfo, *pPool);</div>
+<div class="line"><a name="l18600"></a><span class="lineno">18600</span>&#160;    }</div>
+<div class="line"><a name="l18601"></a><span class="lineno">18601</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l18602"></a><span class="lineno">18602</span>&#160; </div>
+<div class="line"><a name="l18603"></a><span class="lineno">18603</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l18604"></a><span class="lineno">18604</span>&#160;}</div>
+<div class="line"><a name="l18605"></a><span class="lineno">18605</span>&#160; </div>
+<div class="line"><a name="l18606"></a><span class="lineno">18606</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1">vmaDestroyPool</a>(</div>
+<div class="line"><a name="l18607"></a><span class="lineno">18607</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18608"></a><span class="lineno">18608</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</div>
+<div class="line"><a name="l18609"></a><span class="lineno">18609</span>&#160;{</div>
+<div class="line"><a name="l18610"></a><span class="lineno">18610</span>&#160;    VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l18611"></a><span class="lineno">18611</span>&#160; </div>
+<div class="line"><a name="l18612"></a><span class="lineno">18612</span>&#160;    <span class="keywordflow">if</span>(pool == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l18613"></a><span class="lineno">18613</span>&#160;    {</div>
+<div class="line"><a name="l18614"></a><span class="lineno">18614</span>&#160;        <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l18615"></a><span class="lineno">18615</span>&#160;    }</div>
+<div class="line"><a name="l18616"></a><span class="lineno">18616</span>&#160; </div>
+<div class="line"><a name="l18617"></a><span class="lineno">18617</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyPool&quot;</span>);</div>
+<div class="line"><a name="l18618"></a><span class="lineno">18618</span>&#160; </div>
+<div class="line"><a name="l18619"></a><span class="lineno">18619</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18620"></a><span class="lineno">18620</span>&#160; </div>
+<div class="line"><a name="l18621"></a><span class="lineno">18621</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l18622"></a><span class="lineno">18622</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l18623"></a><span class="lineno">18623</span>&#160;    {</div>
+<div class="line"><a name="l18624"></a><span class="lineno">18624</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordDestroyPool(allocator-&gt;GetCurrentFrameIndex(), pool);</div>
+<div class="line"><a name="l18625"></a><span class="lineno">18625</span>&#160;    }</div>
+<div class="line"><a name="l18626"></a><span class="lineno">18626</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l18627"></a><span class="lineno">18627</span>&#160; </div>
+<div class="line"><a name="l18628"></a><span class="lineno">18628</span>&#160;    allocator-&gt;DestroyPool(pool);</div>
+<div class="line"><a name="l18629"></a><span class="lineno">18629</span>&#160;}</div>
+<div class="line"><a name="l18630"></a><span class="lineno">18630</span>&#160; </div>
+<div class="line"><a name="l18631"></a><span class="lineno">18631</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153">vmaGetPoolStats</a>(</div>
+<div class="line"><a name="l18632"></a><span class="lineno">18632</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18633"></a><span class="lineno">18633</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
+<div class="line"><a name="l18634"></a><span class="lineno">18634</span>&#160;    <a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>* pPoolStats)</div>
+<div class="line"><a name="l18635"></a><span class="lineno">18635</span>&#160;{</div>
+<div class="line"><a name="l18636"></a><span class="lineno">18636</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool &amp;&amp; pPoolStats);</div>
+<div class="line"><a name="l18637"></a><span class="lineno">18637</span>&#160; </div>
+<div class="line"><a name="l18638"></a><span class="lineno">18638</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18639"></a><span class="lineno">18639</span>&#160; </div>
+<div class="line"><a name="l18640"></a><span class="lineno">18640</span>&#160;    allocator-&gt;GetPoolStats(pool, pPoolStats);</div>
+<div class="line"><a name="l18641"></a><span class="lineno">18641</span>&#160;}</div>
+<div class="line"><a name="l18642"></a><span class="lineno">18642</span>&#160; </div>
+<div class="line"><a name="l18643"></a><span class="lineno">18643</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a736bd6cbda886f36c891727e73bd4024">vmaMakePoolAllocationsLost</a>(</div>
+<div class="line"><a name="l18644"></a><span class="lineno">18644</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18645"></a><span class="lineno">18645</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
+<div class="line"><a name="l18646"></a><span class="lineno">18646</span>&#160;    <span class="keywordtype">size_t</span>* pLostAllocationCount)</div>
+<div class="line"><a name="l18647"></a><span class="lineno">18647</span>&#160;{</div>
+<div class="line"><a name="l18648"></a><span class="lineno">18648</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool);</div>
+<div class="line"><a name="l18649"></a><span class="lineno">18649</span>&#160; </div>
+<div class="line"><a name="l18650"></a><span class="lineno">18650</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18651"></a><span class="lineno">18651</span>&#160; </div>
+<div class="line"><a name="l18652"></a><span class="lineno">18652</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l18653"></a><span class="lineno">18653</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l18654"></a><span class="lineno">18654</span>&#160;    {</div>
+<div class="line"><a name="l18655"></a><span class="lineno">18655</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordMakePoolAllocationsLost(allocator-&gt;GetCurrentFrameIndex(), pool);</div>
+<div class="line"><a name="l18656"></a><span class="lineno">18656</span>&#160;    }</div>
+<div class="line"><a name="l18657"></a><span class="lineno">18657</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l18658"></a><span class="lineno">18658</span>&#160; </div>
+<div class="line"><a name="l18659"></a><span class="lineno">18659</span>&#160;    allocator-&gt;MakePoolAllocationsLost(pool, pLostAllocationCount);</div>
+<div class="line"><a name="l18660"></a><span class="lineno">18660</span>&#160;}</div>
+<div class="line"><a name="l18661"></a><span class="lineno">18661</span>&#160; </div>
+<div class="line"><a name="l18662"></a><span class="lineno">18662</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89">vmaCheckPoolCorruption</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</div>
+<div class="line"><a name="l18663"></a><span class="lineno">18663</span>&#160;{</div>
+<div class="line"><a name="l18664"></a><span class="lineno">18664</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool);</div>
+<div class="line"><a name="l18665"></a><span class="lineno">18665</span>&#160; </div>
+<div class="line"><a name="l18666"></a><span class="lineno">18666</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18667"></a><span class="lineno">18667</span>&#160; </div>
+<div class="line"><a name="l18668"></a><span class="lineno">18668</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCheckPoolCorruption&quot;</span>);</div>
+<div class="line"><a name="l18669"></a><span class="lineno">18669</span>&#160; </div>
+<div class="line"><a name="l18670"></a><span class="lineno">18670</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;CheckPoolCorruption(pool);</div>
+<div class="line"><a name="l18671"></a><span class="lineno">18671</span>&#160;}</div>
+<div class="line"><a name="l18672"></a><span class="lineno">18672</span>&#160; </div>
+<div class="line"><a name="l18673"></a><span class="lineno">18673</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#af09b4e4eafdbee812e8d73ddf960f030">vmaGetPoolName</a>(</div>
+<div class="line"><a name="l18674"></a><span class="lineno">18674</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18675"></a><span class="lineno">18675</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
+<div class="line"><a name="l18676"></a><span class="lineno">18676</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>** ppName)</div>
+<div class="line"><a name="l18677"></a><span class="lineno">18677</span>&#160;{</div>
+<div class="line"><a name="l18678"></a><span class="lineno">18678</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool &amp;&amp; ppName);</div>
+<div class="line"><a name="l18679"></a><span class="lineno">18679</span>&#160; </div>
+<div class="line"><a name="l18680"></a><span class="lineno">18680</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaGetPoolName&quot;</span>);</div>
+<div class="line"><a name="l18681"></a><span class="lineno">18681</span>&#160; </div>
+<div class="line"><a name="l18682"></a><span class="lineno">18682</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18683"></a><span class="lineno">18683</span>&#160; </div>
+<div class="line"><a name="l18684"></a><span class="lineno">18684</span>&#160;    *ppName = pool-&gt;GetName();</div>
+<div class="line"><a name="l18685"></a><span class="lineno">18685</span>&#160;}</div>
+<div class="line"><a name="l18686"></a><span class="lineno">18686</span>&#160; </div>
+<div class="line"><a name="l18687"></a><span class="lineno">18687</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58">vmaSetPoolName</a>(</div>
+<div class="line"><a name="l18688"></a><span class="lineno">18688</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18689"></a><span class="lineno">18689</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
+<div class="line"><a name="l18690"></a><span class="lineno">18690</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* pName)</div>
+<div class="line"><a name="l18691"></a><span class="lineno">18691</span>&#160;{</div>
+<div class="line"><a name="l18692"></a><span class="lineno">18692</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool);</div>
+<div class="line"><a name="l18693"></a><span class="lineno">18693</span>&#160; </div>
+<div class="line"><a name="l18694"></a><span class="lineno">18694</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaSetPoolName&quot;</span>);</div>
+<div class="line"><a name="l18695"></a><span class="lineno">18695</span>&#160; </div>
+<div class="line"><a name="l18696"></a><span class="lineno">18696</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18697"></a><span class="lineno">18697</span>&#160; </div>
+<div class="line"><a name="l18698"></a><span class="lineno">18698</span>&#160;    pool-&gt;SetName(pName);</div>
+<div class="line"><a name="l18699"></a><span class="lineno">18699</span>&#160; </div>
+<div class="line"><a name="l18700"></a><span class="lineno">18700</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l18701"></a><span class="lineno">18701</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l18702"></a><span class="lineno">18702</span>&#160;    {</div>
+<div class="line"><a name="l18703"></a><span class="lineno">18703</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordSetPoolName(allocator-&gt;GetCurrentFrameIndex(), pool, pName);</div>
+<div class="line"><a name="l18704"></a><span class="lineno">18704</span>&#160;    }</div>
+<div class="line"><a name="l18705"></a><span class="lineno">18705</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l18706"></a><span class="lineno">18706</span>&#160;}</div>
+<div class="line"><a name="l18707"></a><span class="lineno">18707</span>&#160; </div>
+<div class="line"><a name="l18708"></a><span class="lineno">18708</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8">vmaAllocateMemory</a>(</div>
+<div class="line"><a name="l18709"></a><span class="lineno">18709</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18710"></a><span class="lineno">18710</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements* pVkMemoryRequirements,</div>
+<div class="line"><a name="l18711"></a><span class="lineno">18711</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pCreateInfo,</div>
+<div class="line"><a name="l18712"></a><span class="lineno">18712</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
+<div class="line"><a name="l18713"></a><span class="lineno">18713</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
+<div class="line"><a name="l18714"></a><span class="lineno">18714</span>&#160;{</div>
+<div class="line"><a name="l18715"></a><span class="lineno">18715</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pVkMemoryRequirements &amp;&amp; pCreateInfo &amp;&amp; pAllocation);</div>
+<div class="line"><a name="l18716"></a><span class="lineno">18716</span>&#160; </div>
+<div class="line"><a name="l18717"></a><span class="lineno">18717</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemory&quot;</span>);</div>
+<div class="line"><a name="l18718"></a><span class="lineno">18718</span>&#160; </div>
+<div class="line"><a name="l18719"></a><span class="lineno">18719</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18720"></a><span class="lineno">18720</span>&#160; </div>
+<div class="line"><a name="l18721"></a><span class="lineno">18721</span>&#160;    VkResult result = allocator-&gt;AllocateMemory(</div>
+<div class="line"><a name="l18722"></a><span class="lineno">18722</span>&#160;        *pVkMemoryRequirements,</div>
+<div class="line"><a name="l18723"></a><span class="lineno">18723</span>&#160;        <span class="keyword">false</span>, <span class="comment">// requiresDedicatedAllocation</span></div>
+<div class="line"><a name="l18724"></a><span class="lineno">18724</span>&#160;        <span class="keyword">false</span>, <span class="comment">// prefersDedicatedAllocation</span></div>
+<div class="line"><a name="l18725"></a><span class="lineno">18725</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
+<div class="line"><a name="l18726"></a><span class="lineno">18726</span>&#160;        UINT32_MAX, <span class="comment">// dedicatedBufferUsage</span></div>
+<div class="line"><a name="l18727"></a><span class="lineno">18727</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
+<div class="line"><a name="l18728"></a><span class="lineno">18728</span>&#160;        *pCreateInfo,</div>
+<div class="line"><a name="l18729"></a><span class="lineno">18729</span>&#160;        VMA_SUBALLOCATION_TYPE_UNKNOWN,</div>
+<div class="line"><a name="l18730"></a><span class="lineno">18730</span>&#160;        1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l18731"></a><span class="lineno">18731</span>&#160;        pAllocation);</div>
+<div class="line"><a name="l18732"></a><span class="lineno">18732</span>&#160; </div>
+<div class="line"><a name="l18733"></a><span class="lineno">18733</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l18734"></a><span class="lineno">18734</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l18735"></a><span class="lineno">18735</span>&#160;    {</div>
+<div class="line"><a name="l18736"></a><span class="lineno">18736</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemory(</div>
+<div class="line"><a name="l18737"></a><span class="lineno">18737</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l18738"></a><span class="lineno">18738</span>&#160;            *pVkMemoryRequirements,</div>
+<div class="line"><a name="l18739"></a><span class="lineno">18739</span>&#160;            *pCreateInfo,</div>
+<div class="line"><a name="l18740"></a><span class="lineno">18740</span>&#160;            *pAllocation);</div>
+<div class="line"><a name="l18741"></a><span class="lineno">18741</span>&#160;    }</div>
+<div class="line"><a name="l18742"></a><span class="lineno">18742</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l18743"></a><span class="lineno">18743</span>&#160; </div>
+<div class="line"><a name="l18744"></a><span class="lineno">18744</span>&#160;    <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL &amp;&amp; result == VK_SUCCESS)</div>
+<div class="line"><a name="l18745"></a><span class="lineno">18745</span>&#160;    {</div>
+<div class="line"><a name="l18746"></a><span class="lineno">18746</span>&#160;        allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
+<div class="line"><a name="l18747"></a><span class="lineno">18747</span>&#160;    }</div>
+<div class="line"><a name="l18748"></a><span class="lineno">18748</span>&#160; </div>
+<div class="line"><a name="l18749"></a><span class="lineno">18749</span>&#160;    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l18750"></a><span class="lineno">18750</span>&#160;}</div>
+<div class="line"><a name="l18751"></a><span class="lineno">18751</span>&#160; </div>
+<div class="line"><a name="l18752"></a><span class="lineno">18752</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1">vmaAllocateMemoryPages</a>(</div>
+<div class="line"><a name="l18753"></a><span class="lineno">18753</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18754"></a><span class="lineno">18754</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements* pVkMemoryRequirements,</div>
+<div class="line"><a name="l18755"></a><span class="lineno">18755</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pCreateInfo,</div>
+<div class="line"><a name="l18756"></a><span class="lineno">18756</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l18757"></a><span class="lineno">18757</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations,</div>
+<div class="line"><a name="l18758"></a><span class="lineno">18758</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
+<div class="line"><a name="l18759"></a><span class="lineno">18759</span>&#160;{</div>
+<div class="line"><a name="l18760"></a><span class="lineno">18760</span>&#160;    <span class="keywordflow">if</span>(allocationCount == 0)</div>
+<div class="line"><a name="l18761"></a><span class="lineno">18761</span>&#160;    {</div>
+<div class="line"><a name="l18762"></a><span class="lineno">18762</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l18763"></a><span class="lineno">18763</span>&#160;    }</div>
+<div class="line"><a name="l18764"></a><span class="lineno">18764</span>&#160; </div>
+<div class="line"><a name="l18765"></a><span class="lineno">18765</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pVkMemoryRequirements &amp;&amp; pCreateInfo &amp;&amp; pAllocations);</div>
+<div class="line"><a name="l18766"></a><span class="lineno">18766</span>&#160; </div>
+<div class="line"><a name="l18767"></a><span class="lineno">18767</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemoryPages&quot;</span>);</div>
+<div class="line"><a name="l18768"></a><span class="lineno">18768</span>&#160; </div>
+<div class="line"><a name="l18769"></a><span class="lineno">18769</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18770"></a><span class="lineno">18770</span>&#160; </div>
+<div class="line"><a name="l18771"></a><span class="lineno">18771</span>&#160;    VkResult result = allocator-&gt;AllocateMemory(</div>
+<div class="line"><a name="l18772"></a><span class="lineno">18772</span>&#160;        *pVkMemoryRequirements,</div>
+<div class="line"><a name="l18773"></a><span class="lineno">18773</span>&#160;        <span class="keyword">false</span>, <span class="comment">// requiresDedicatedAllocation</span></div>
+<div class="line"><a name="l18774"></a><span class="lineno">18774</span>&#160;        <span class="keyword">false</span>, <span class="comment">// prefersDedicatedAllocation</span></div>
+<div class="line"><a name="l18775"></a><span class="lineno">18775</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
+<div class="line"><a name="l18776"></a><span class="lineno">18776</span>&#160;        UINT32_MAX, <span class="comment">// dedicatedBufferUsage</span></div>
+<div class="line"><a name="l18777"></a><span class="lineno">18777</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
+<div class="line"><a name="l18778"></a><span class="lineno">18778</span>&#160;        *pCreateInfo,</div>
+<div class="line"><a name="l18779"></a><span class="lineno">18779</span>&#160;        VMA_SUBALLOCATION_TYPE_UNKNOWN,</div>
+<div class="line"><a name="l18780"></a><span class="lineno">18780</span>&#160;        allocationCount,</div>
+<div class="line"><a name="l18781"></a><span class="lineno">18781</span>&#160;        pAllocations);</div>
+<div class="line"><a name="l18782"></a><span class="lineno">18782</span>&#160; </div>
+<div class="line"><a name="l18783"></a><span class="lineno">18783</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l18784"></a><span class="lineno">18784</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l18785"></a><span class="lineno">18785</span>&#160;    {</div>
+<div class="line"><a name="l18786"></a><span class="lineno">18786</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemoryPages(</div>
+<div class="line"><a name="l18787"></a><span class="lineno">18787</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l18788"></a><span class="lineno">18788</span>&#160;            *pVkMemoryRequirements,</div>
+<div class="line"><a name="l18789"></a><span class="lineno">18789</span>&#160;            *pCreateInfo,</div>
+<div class="line"><a name="l18790"></a><span class="lineno">18790</span>&#160;            (uint64_t)allocationCount,</div>
+<div class="line"><a name="l18791"></a><span class="lineno">18791</span>&#160;            pAllocations);</div>
+<div class="line"><a name="l18792"></a><span class="lineno">18792</span>&#160;    }</div>
+<div class="line"><a name="l18793"></a><span class="lineno">18793</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l18794"></a><span class="lineno">18794</span>&#160; </div>
+<div class="line"><a name="l18795"></a><span class="lineno">18795</span>&#160;    <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL &amp;&amp; result == VK_SUCCESS)</div>
+<div class="line"><a name="l18796"></a><span class="lineno">18796</span>&#160;    {</div>
+<div class="line"><a name="l18797"></a><span class="lineno">18797</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; allocationCount; ++i)</div>
+<div class="line"><a name="l18798"></a><span class="lineno">18798</span>&#160;        {</div>
+<div class="line"><a name="l18799"></a><span class="lineno">18799</span>&#160;            allocator-&gt;GetAllocationInfo(pAllocations[i], pAllocationInfo + i);</div>
+<div class="line"><a name="l18800"></a><span class="lineno">18800</span>&#160;        }</div>
+<div class="line"><a name="l18801"></a><span class="lineno">18801</span>&#160;    }</div>
+<div class="line"><a name="l18802"></a><span class="lineno">18802</span>&#160; </div>
+<div class="line"><a name="l18803"></a><span class="lineno">18803</span>&#160;    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l18804"></a><span class="lineno">18804</span>&#160;}</div>
+<div class="line"><a name="l18805"></a><span class="lineno">18805</span>&#160; </div>
+<div class="line"><a name="l18806"></a><span class="lineno">18806</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer</a>(</div>
+<div class="line"><a name="l18807"></a><span class="lineno">18807</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18808"></a><span class="lineno">18808</span>&#160;    VkBuffer buffer,</div>
+<div class="line"><a name="l18809"></a><span class="lineno">18809</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pCreateInfo,</div>
+<div class="line"><a name="l18810"></a><span class="lineno">18810</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
+<div class="line"><a name="l18811"></a><span class="lineno">18811</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
+<div class="line"><a name="l18812"></a><span class="lineno">18812</span>&#160;{</div>
+<div class="line"><a name="l18813"></a><span class="lineno">18813</span>&#160;    VMA_ASSERT(allocator &amp;&amp; buffer != VK_NULL_HANDLE &amp;&amp; pCreateInfo &amp;&amp; pAllocation);</div>
+<div class="line"><a name="l18814"></a><span class="lineno">18814</span>&#160; </div>
+<div class="line"><a name="l18815"></a><span class="lineno">18815</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemoryForBuffer&quot;</span>);</div>
+<div class="line"><a name="l18816"></a><span class="lineno">18816</span>&#160; </div>
+<div class="line"><a name="l18817"></a><span class="lineno">18817</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18818"></a><span class="lineno">18818</span>&#160; </div>
+<div class="line"><a name="l18819"></a><span class="lineno">18819</span>&#160;    VkMemoryRequirements vkMemReq = {};</div>
+<div class="line"><a name="l18820"></a><span class="lineno">18820</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l18821"></a><span class="lineno">18821</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l18822"></a><span class="lineno">18822</span>&#160;    allocator-&gt;GetBufferMemoryRequirements(buffer, vkMemReq,</div>
+<div class="line"><a name="l18823"></a><span class="lineno">18823</span>&#160;        requiresDedicatedAllocation,</div>
+<div class="line"><a name="l18824"></a><span class="lineno">18824</span>&#160;        prefersDedicatedAllocation);</div>
+<div class="line"><a name="l18825"></a><span class="lineno">18825</span>&#160; </div>
+<div class="line"><a name="l18826"></a><span class="lineno">18826</span>&#160;    VkResult result = allocator-&gt;AllocateMemory(</div>
+<div class="line"><a name="l18827"></a><span class="lineno">18827</span>&#160;        vkMemReq,</div>
+<div class="line"><a name="l18828"></a><span class="lineno">18828</span>&#160;        requiresDedicatedAllocation,</div>
+<div class="line"><a name="l18829"></a><span class="lineno">18829</span>&#160;        prefersDedicatedAllocation,</div>
+<div class="line"><a name="l18830"></a><span class="lineno">18830</span>&#160;        buffer, <span class="comment">// dedicatedBuffer</span></div>
+<div class="line"><a name="l18831"></a><span class="lineno">18831</span>&#160;        UINT32_MAX, <span class="comment">// dedicatedBufferUsage</span></div>
+<div class="line"><a name="l18832"></a><span class="lineno">18832</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
+<div class="line"><a name="l18833"></a><span class="lineno">18833</span>&#160;        *pCreateInfo,</div>
+<div class="line"><a name="l18834"></a><span class="lineno">18834</span>&#160;        VMA_SUBALLOCATION_TYPE_BUFFER,</div>
+<div class="line"><a name="l18835"></a><span class="lineno">18835</span>&#160;        1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l18836"></a><span class="lineno">18836</span>&#160;        pAllocation);</div>
+<div class="line"><a name="l18837"></a><span class="lineno">18837</span>&#160; </div>
+<div class="line"><a name="l18838"></a><span class="lineno">18838</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l18839"></a><span class="lineno">18839</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l18840"></a><span class="lineno">18840</span>&#160;    {</div>
+<div class="line"><a name="l18841"></a><span class="lineno">18841</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemoryForBuffer(</div>
+<div class="line"><a name="l18842"></a><span class="lineno">18842</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l18843"></a><span class="lineno">18843</span>&#160;            vkMemReq,</div>
+<div class="line"><a name="l18844"></a><span class="lineno">18844</span>&#160;            requiresDedicatedAllocation,</div>
+<div class="line"><a name="l18845"></a><span class="lineno">18845</span>&#160;            prefersDedicatedAllocation,</div>
+<div class="line"><a name="l18846"></a><span class="lineno">18846</span>&#160;            *pCreateInfo,</div>
+<div class="line"><a name="l18847"></a><span class="lineno">18847</span>&#160;            *pAllocation);</div>
+<div class="line"><a name="l18848"></a><span class="lineno">18848</span>&#160;    }</div>
+<div class="line"><a name="l18849"></a><span class="lineno">18849</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l18850"></a><span class="lineno">18850</span>&#160; </div>
+<div class="line"><a name="l18851"></a><span class="lineno">18851</span>&#160;    <span class="keywordflow">if</span>(pAllocationInfo &amp;&amp; result == VK_SUCCESS)</div>
+<div class="line"><a name="l18852"></a><span class="lineno">18852</span>&#160;    {</div>
+<div class="line"><a name="l18853"></a><span class="lineno">18853</span>&#160;        allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
+<div class="line"><a name="l18854"></a><span class="lineno">18854</span>&#160;    }</div>
+<div class="line"><a name="l18855"></a><span class="lineno">18855</span>&#160; </div>
+<div class="line"><a name="l18856"></a><span class="lineno">18856</span>&#160;    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l18857"></a><span class="lineno">18857</span>&#160;}</div>
+<div class="line"><a name="l18858"></a><span class="lineno">18858</span>&#160; </div>
+<div class="line"><a name="l18859"></a><span class="lineno">18859</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb">vmaAllocateMemoryForImage</a>(</div>
+<div class="line"><a name="l18860"></a><span class="lineno">18860</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18861"></a><span class="lineno">18861</span>&#160;    VkImage image,</div>
+<div class="line"><a name="l18862"></a><span class="lineno">18862</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pCreateInfo,</div>
+<div class="line"><a name="l18863"></a><span class="lineno">18863</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
+<div class="line"><a name="l18864"></a><span class="lineno">18864</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
+<div class="line"><a name="l18865"></a><span class="lineno">18865</span>&#160;{</div>
+<div class="line"><a name="l18866"></a><span class="lineno">18866</span>&#160;    VMA_ASSERT(allocator &amp;&amp; image != VK_NULL_HANDLE &amp;&amp; pCreateInfo &amp;&amp; pAllocation);</div>
+<div class="line"><a name="l18867"></a><span class="lineno">18867</span>&#160; </div>
+<div class="line"><a name="l18868"></a><span class="lineno">18868</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemoryForImage&quot;</span>);</div>
+<div class="line"><a name="l18869"></a><span class="lineno">18869</span>&#160; </div>
+<div class="line"><a name="l18870"></a><span class="lineno">18870</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18871"></a><span class="lineno">18871</span>&#160; </div>
+<div class="line"><a name="l18872"></a><span class="lineno">18872</span>&#160;    VkMemoryRequirements vkMemReq = {};</div>
+<div class="line"><a name="l18873"></a><span class="lineno">18873</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l18874"></a><span class="lineno">18874</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l18875"></a><span class="lineno">18875</span>&#160;    allocator-&gt;GetImageMemoryRequirements(image, vkMemReq,</div>
+<div class="line"><a name="l18876"></a><span class="lineno">18876</span>&#160;        requiresDedicatedAllocation, prefersDedicatedAllocation);</div>
+<div class="line"><a name="l18877"></a><span class="lineno">18877</span>&#160; </div>
+<div class="line"><a name="l18878"></a><span class="lineno">18878</span>&#160;    VkResult result = allocator-&gt;AllocateMemory(</div>
+<div class="line"><a name="l18879"></a><span class="lineno">18879</span>&#160;        vkMemReq,</div>
+<div class="line"><a name="l18880"></a><span class="lineno">18880</span>&#160;        requiresDedicatedAllocation,</div>
+<div class="line"><a name="l18881"></a><span class="lineno">18881</span>&#160;        prefersDedicatedAllocation,</div>
+<div class="line"><a name="l18882"></a><span class="lineno">18882</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
+<div class="line"><a name="l18883"></a><span class="lineno">18883</span>&#160;        UINT32_MAX, <span class="comment">// dedicatedBufferUsage</span></div>
+<div class="line"><a name="l18884"></a><span class="lineno">18884</span>&#160;        image, <span class="comment">// dedicatedImage</span></div>
+<div class="line"><a name="l18885"></a><span class="lineno">18885</span>&#160;        *pCreateInfo,</div>
+<div class="line"><a name="l18886"></a><span class="lineno">18886</span>&#160;        VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN,</div>
+<div class="line"><a name="l18887"></a><span class="lineno">18887</span>&#160;        1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l18888"></a><span class="lineno">18888</span>&#160;        pAllocation);</div>
+<div class="line"><a name="l18889"></a><span class="lineno">18889</span>&#160; </div>
+<div class="line"><a name="l18890"></a><span class="lineno">18890</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l18891"></a><span class="lineno">18891</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l18892"></a><span class="lineno">18892</span>&#160;    {</div>
+<div class="line"><a name="l18893"></a><span class="lineno">18893</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemoryForImage(</div>
+<div class="line"><a name="l18894"></a><span class="lineno">18894</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l18895"></a><span class="lineno">18895</span>&#160;            vkMemReq,</div>
+<div class="line"><a name="l18896"></a><span class="lineno">18896</span>&#160;            requiresDedicatedAllocation,</div>
+<div class="line"><a name="l18897"></a><span class="lineno">18897</span>&#160;            prefersDedicatedAllocation,</div>
+<div class="line"><a name="l18898"></a><span class="lineno">18898</span>&#160;            *pCreateInfo,</div>
+<div class="line"><a name="l18899"></a><span class="lineno">18899</span>&#160;            *pAllocation);</div>
+<div class="line"><a name="l18900"></a><span class="lineno">18900</span>&#160;    }</div>
+<div class="line"><a name="l18901"></a><span class="lineno">18901</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l18902"></a><span class="lineno">18902</span>&#160; </div>
+<div class="line"><a name="l18903"></a><span class="lineno">18903</span>&#160;    <span class="keywordflow">if</span>(pAllocationInfo &amp;&amp; result == VK_SUCCESS)</div>
+<div class="line"><a name="l18904"></a><span class="lineno">18904</span>&#160;    {</div>
+<div class="line"><a name="l18905"></a><span class="lineno">18905</span>&#160;        allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
+<div class="line"><a name="l18906"></a><span class="lineno">18906</span>&#160;    }</div>
+<div class="line"><a name="l18907"></a><span class="lineno">18907</span>&#160; </div>
+<div class="line"><a name="l18908"></a><span class="lineno">18908</span>&#160;    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l18909"></a><span class="lineno">18909</span>&#160;}</div>
+<div class="line"><a name="l18910"></a><span class="lineno">18910</span>&#160; </div>
+<div class="line"><a name="l18911"></a><span class="lineno">18911</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a>(</div>
+<div class="line"><a name="l18912"></a><span class="lineno">18912</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18913"></a><span class="lineno">18913</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l18914"></a><span class="lineno">18914</span>&#160;{</div>
+<div class="line"><a name="l18915"></a><span class="lineno">18915</span>&#160;    VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l18916"></a><span class="lineno">18916</span>&#160; </div>
+<div class="line"><a name="l18917"></a><span class="lineno">18917</span>&#160;    <span class="keywordflow">if</span>(allocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l18918"></a><span class="lineno">18918</span>&#160;    {</div>
+<div class="line"><a name="l18919"></a><span class="lineno">18919</span>&#160;        <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l18920"></a><span class="lineno">18920</span>&#160;    }</div>
+<div class="line"><a name="l18921"></a><span class="lineno">18921</span>&#160; </div>
+<div class="line"><a name="l18922"></a><span class="lineno">18922</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaFreeMemory&quot;</span>);</div>
+<div class="line"><a name="l18923"></a><span class="lineno">18923</span>&#160; </div>
+<div class="line"><a name="l18924"></a><span class="lineno">18924</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18925"></a><span class="lineno">18925</span>&#160; </div>
+<div class="line"><a name="l18926"></a><span class="lineno">18926</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l18927"></a><span class="lineno">18927</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l18928"></a><span class="lineno">18928</span>&#160;    {</div>
+<div class="line"><a name="l18929"></a><span class="lineno">18929</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordFreeMemory(</div>
+<div class="line"><a name="l18930"></a><span class="lineno">18930</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l18931"></a><span class="lineno">18931</span>&#160;            allocation);</div>
+<div class="line"><a name="l18932"></a><span class="lineno">18932</span>&#160;    }</div>
+<div class="line"><a name="l18933"></a><span class="lineno">18933</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l18934"></a><span class="lineno">18934</span>&#160; </div>
+<div class="line"><a name="l18935"></a><span class="lineno">18935</span>&#160;    allocator-&gt;FreeMemory(</div>
+<div class="line"><a name="l18936"></a><span class="lineno">18936</span>&#160;        1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l18937"></a><span class="lineno">18937</span>&#160;        &amp;allocation);</div>
+<div class="line"><a name="l18938"></a><span class="lineno">18938</span>&#160;}</div>
+<div class="line"><a name="l18939"></a><span class="lineno">18939</span>&#160; </div>
+<div class="line"><a name="l18940"></a><span class="lineno">18940</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e">vmaFreeMemoryPages</a>(</div>
+<div class="line"><a name="l18941"></a><span class="lineno">18941</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18942"></a><span class="lineno">18942</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l18943"></a><span class="lineno">18943</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
+<div class="line"><a name="l18944"></a><span class="lineno">18944</span>&#160;{</div>
+<div class="line"><a name="l18945"></a><span class="lineno">18945</span>&#160;    <span class="keywordflow">if</span>(allocationCount == 0)</div>
+<div class="line"><a name="l18946"></a><span class="lineno">18946</span>&#160;    {</div>
+<div class="line"><a name="l18947"></a><span class="lineno">18947</span>&#160;        <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l18948"></a><span class="lineno">18948</span>&#160;    }</div>
+<div class="line"><a name="l18949"></a><span class="lineno">18949</span>&#160; </div>
+<div class="line"><a name="l18950"></a><span class="lineno">18950</span>&#160;    VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l18951"></a><span class="lineno">18951</span>&#160; </div>
+<div class="line"><a name="l18952"></a><span class="lineno">18952</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaFreeMemoryPages&quot;</span>);</div>
+<div class="line"><a name="l18953"></a><span class="lineno">18953</span>&#160; </div>
+<div class="line"><a name="l18954"></a><span class="lineno">18954</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18955"></a><span class="lineno">18955</span>&#160; </div>
+<div class="line"><a name="l18956"></a><span class="lineno">18956</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l18957"></a><span class="lineno">18957</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l18958"></a><span class="lineno">18958</span>&#160;    {</div>
+<div class="line"><a name="l18959"></a><span class="lineno">18959</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordFreeMemoryPages(</div>
+<div class="line"><a name="l18960"></a><span class="lineno">18960</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l18961"></a><span class="lineno">18961</span>&#160;            (uint64_t)allocationCount,</div>
+<div class="line"><a name="l18962"></a><span class="lineno">18962</span>&#160;            pAllocations);</div>
+<div class="line"><a name="l18963"></a><span class="lineno">18963</span>&#160;    }</div>
+<div class="line"><a name="l18964"></a><span class="lineno">18964</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l18965"></a><span class="lineno">18965</span>&#160; </div>
+<div class="line"><a name="l18966"></a><span class="lineno">18966</span>&#160;    allocator-&gt;FreeMemory(allocationCount, pAllocations);</div>
+<div class="line"><a name="l18967"></a><span class="lineno">18967</span>&#160;}</div>
+<div class="line"><a name="l18968"></a><span class="lineno">18968</span>&#160; </div>
+<div class="line"><a name="l18969"></a><span class="lineno">18969</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(</div>
+<div class="line"><a name="l18970"></a><span class="lineno">18970</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18971"></a><span class="lineno">18971</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l18972"></a><span class="lineno">18972</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
+<div class="line"><a name="l18973"></a><span class="lineno">18973</span>&#160;{</div>
+<div class="line"><a name="l18974"></a><span class="lineno">18974</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; pAllocationInfo);</div>
+<div class="line"><a name="l18975"></a><span class="lineno">18975</span>&#160; </div>
+<div class="line"><a name="l18976"></a><span class="lineno">18976</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18977"></a><span class="lineno">18977</span>&#160; </div>
+<div class="line"><a name="l18978"></a><span class="lineno">18978</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l18979"></a><span class="lineno">18979</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l18980"></a><span class="lineno">18980</span>&#160;    {</div>
+<div class="line"><a name="l18981"></a><span class="lineno">18981</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordGetAllocationInfo(</div>
+<div class="line"><a name="l18982"></a><span class="lineno">18982</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l18983"></a><span class="lineno">18983</span>&#160;            allocation);</div>
+<div class="line"><a name="l18984"></a><span class="lineno">18984</span>&#160;    }</div>
+<div class="line"><a name="l18985"></a><span class="lineno">18985</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l18986"></a><span class="lineno">18986</span>&#160; </div>
+<div class="line"><a name="l18987"></a><span class="lineno">18987</span>&#160;    allocator-&gt;GetAllocationInfo(allocation, pAllocationInfo);</div>
+<div class="line"><a name="l18988"></a><span class="lineno">18988</span>&#160;}</div>
+<div class="line"><a name="l18989"></a><span class="lineno">18989</span>&#160; </div>
+<div class="line"><a name="l18990"></a><span class="lineno">18990</span>&#160;VMA_CALL_PRE VkBool32 VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a43d8ba9673c846f049089a5029d5c73a">vmaTouchAllocation</a>(</div>
+<div class="line"><a name="l18991"></a><span class="lineno">18991</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l18992"></a><span class="lineno">18992</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l18993"></a><span class="lineno">18993</span>&#160;{</div>
+<div class="line"><a name="l18994"></a><span class="lineno">18994</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
+<div class="line"><a name="l18995"></a><span class="lineno">18995</span>&#160; </div>
+<div class="line"><a name="l18996"></a><span class="lineno">18996</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l18997"></a><span class="lineno">18997</span>&#160; </div>
+<div class="line"><a name="l18998"></a><span class="lineno">18998</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l18999"></a><span class="lineno">18999</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19000"></a><span class="lineno">19000</span>&#160;    {</div>
+<div class="line"><a name="l19001"></a><span class="lineno">19001</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordTouchAllocation(</div>
+<div class="line"><a name="l19002"></a><span class="lineno">19002</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l19003"></a><span class="lineno">19003</span>&#160;            allocation);</div>
+<div class="line"><a name="l19004"></a><span class="lineno">19004</span>&#160;    }</div>
+<div class="line"><a name="l19005"></a><span class="lineno">19005</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19006"></a><span class="lineno">19006</span>&#160; </div>
+<div class="line"><a name="l19007"></a><span class="lineno">19007</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;TouchAllocation(allocation);</div>
+<div class="line"><a name="l19008"></a><span class="lineno">19008</span>&#160;}</div>
+<div class="line"><a name="l19009"></a><span class="lineno">19009</span>&#160; </div>
+<div class="line"><a name="l19010"></a><span class="lineno">19010</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f">vmaSetAllocationUserData</a>(</div>
+<div class="line"><a name="l19011"></a><span class="lineno">19011</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19012"></a><span class="lineno">19012</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l19013"></a><span class="lineno">19013</span>&#160;    <span class="keywordtype">void</span>* pUserData)</div>
+<div class="line"><a name="l19014"></a><span class="lineno">19014</span>&#160;{</div>
+<div class="line"><a name="l19015"></a><span class="lineno">19015</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
+<div class="line"><a name="l19016"></a><span class="lineno">19016</span>&#160; </div>
+<div class="line"><a name="l19017"></a><span class="lineno">19017</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19018"></a><span class="lineno">19018</span>&#160; </div>
+<div class="line"><a name="l19019"></a><span class="lineno">19019</span>&#160;    allocation-&gt;SetUserData(allocator, pUserData);</div>
+<div class="line"><a name="l19020"></a><span class="lineno">19020</span>&#160; </div>
+<div class="line"><a name="l19021"></a><span class="lineno">19021</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19022"></a><span class="lineno">19022</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19023"></a><span class="lineno">19023</span>&#160;    {</div>
+<div class="line"><a name="l19024"></a><span class="lineno">19024</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordSetAllocationUserData(</div>
+<div class="line"><a name="l19025"></a><span class="lineno">19025</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l19026"></a><span class="lineno">19026</span>&#160;            allocation,</div>
+<div class="line"><a name="l19027"></a><span class="lineno">19027</span>&#160;            pUserData);</div>
+<div class="line"><a name="l19028"></a><span class="lineno">19028</span>&#160;    }</div>
+<div class="line"><a name="l19029"></a><span class="lineno">19029</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19030"></a><span class="lineno">19030</span>&#160;}</div>
+<div class="line"><a name="l19031"></a><span class="lineno">19031</span>&#160; </div>
+<div class="line"><a name="l19032"></a><span class="lineno">19032</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae5c9657d9e94756269145b01c05d16f1">vmaCreateLostAllocation</a>(</div>
+<div class="line"><a name="l19033"></a><span class="lineno">19033</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19034"></a><span class="lineno">19034</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
+<div class="line"><a name="l19035"></a><span class="lineno">19035</span>&#160;{</div>
+<div class="line"><a name="l19036"></a><span class="lineno">19036</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pAllocation);</div>
+<div class="line"><a name="l19037"></a><span class="lineno">19037</span>&#160; </div>
+<div class="line"><a name="l19038"></a><span class="lineno">19038</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK;</div>
+<div class="line"><a name="l19039"></a><span class="lineno">19039</span>&#160; </div>
+<div class="line"><a name="l19040"></a><span class="lineno">19040</span>&#160;    allocator-&gt;CreateLostAllocation(pAllocation);</div>
+<div class="line"><a name="l19041"></a><span class="lineno">19041</span>&#160; </div>
+<div class="line"><a name="l19042"></a><span class="lineno">19042</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19043"></a><span class="lineno">19043</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19044"></a><span class="lineno">19044</span>&#160;    {</div>
+<div class="line"><a name="l19045"></a><span class="lineno">19045</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordCreateLostAllocation(</div>
+<div class="line"><a name="l19046"></a><span class="lineno">19046</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l19047"></a><span class="lineno">19047</span>&#160;            *pAllocation);</div>
+<div class="line"><a name="l19048"></a><span class="lineno">19048</span>&#160;    }</div>
+<div class="line"><a name="l19049"></a><span class="lineno">19049</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19050"></a><span class="lineno">19050</span>&#160;}</div>
+<div class="line"><a name="l19051"></a><span class="lineno">19051</span>&#160; </div>
+<div class="line"><a name="l19052"></a><span class="lineno">19052</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069">vmaMapMemory</a>(</div>
+<div class="line"><a name="l19053"></a><span class="lineno">19053</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19054"></a><span class="lineno">19054</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l19055"></a><span class="lineno">19055</span>&#160;    <span class="keywordtype">void</span>** ppData)</div>
+<div class="line"><a name="l19056"></a><span class="lineno">19056</span>&#160;{</div>
+<div class="line"><a name="l19057"></a><span class="lineno">19057</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; ppData);</div>
+<div class="line"><a name="l19058"></a><span class="lineno">19058</span>&#160; </div>
+<div class="line"><a name="l19059"></a><span class="lineno">19059</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19060"></a><span class="lineno">19060</span>&#160; </div>
+<div class="line"><a name="l19061"></a><span class="lineno">19061</span>&#160;    VkResult res = allocator-&gt;Map(allocation, ppData);</div>
+<div class="line"><a name="l19062"></a><span class="lineno">19062</span>&#160; </div>
+<div class="line"><a name="l19063"></a><span class="lineno">19063</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19064"></a><span class="lineno">19064</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19065"></a><span class="lineno">19065</span>&#160;    {</div>
+<div class="line"><a name="l19066"></a><span class="lineno">19066</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordMapMemory(</div>
+<div class="line"><a name="l19067"></a><span class="lineno">19067</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l19068"></a><span class="lineno">19068</span>&#160;            allocation);</div>
+<div class="line"><a name="l19069"></a><span class="lineno">19069</span>&#160;    }</div>
+<div class="line"><a name="l19070"></a><span class="lineno">19070</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19071"></a><span class="lineno">19071</span>&#160; </div>
+<div class="line"><a name="l19072"></a><span class="lineno">19072</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19073"></a><span class="lineno">19073</span>&#160;}</div>
+<div class="line"><a name="l19074"></a><span class="lineno">19074</span>&#160; </div>
+<div class="line"><a name="l19075"></a><span class="lineno">19075</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a>(</div>
+<div class="line"><a name="l19076"></a><span class="lineno">19076</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19077"></a><span class="lineno">19077</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l19078"></a><span class="lineno">19078</span>&#160;{</div>
+<div class="line"><a name="l19079"></a><span class="lineno">19079</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
+<div class="line"><a name="l19080"></a><span class="lineno">19080</span>&#160; </div>
+<div class="line"><a name="l19081"></a><span class="lineno">19081</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19082"></a><span class="lineno">19082</span>&#160; </div>
+<div class="line"><a name="l19083"></a><span class="lineno">19083</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19084"></a><span class="lineno">19084</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19085"></a><span class="lineno">19085</span>&#160;    {</div>
+<div class="line"><a name="l19086"></a><span class="lineno">19086</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordUnmapMemory(</div>
+<div class="line"><a name="l19087"></a><span class="lineno">19087</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l19088"></a><span class="lineno">19088</span>&#160;            allocation);</div>
+<div class="line"><a name="l19089"></a><span class="lineno">19089</span>&#160;    }</div>
+<div class="line"><a name="l19090"></a><span class="lineno">19090</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19091"></a><span class="lineno">19091</span>&#160; </div>
+<div class="line"><a name="l19092"></a><span class="lineno">19092</span>&#160;    allocator-&gt;Unmap(allocation);</div>
+<div class="line"><a name="l19093"></a><span class="lineno">19093</span>&#160;}</div>
+<div class="line"><a name="l19094"></a><span class="lineno">19094</span>&#160; </div>
+<div class="line"><a name="l19095"></a><span class="lineno">19095</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f">vmaFlushAllocation</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</div>
+<div class="line"><a name="l19096"></a><span class="lineno">19096</span>&#160;{</div>
+<div class="line"><a name="l19097"></a><span class="lineno">19097</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
+<div class="line"><a name="l19098"></a><span class="lineno">19098</span>&#160; </div>
+<div class="line"><a name="l19099"></a><span class="lineno">19099</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaFlushAllocation&quot;</span>);</div>
+<div class="line"><a name="l19100"></a><span class="lineno">19100</span>&#160; </div>
+<div class="line"><a name="l19101"></a><span class="lineno">19101</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19102"></a><span class="lineno">19102</span>&#160; </div>
+<div class="line"><a name="l19103"></a><span class="lineno">19103</span>&#160;    <span class="keyword">const</span> VkResult res = allocator-&gt;FlushOrInvalidateAllocation(allocation, offset, size, VMA_CACHE_FLUSH);</div>
+<div class="line"><a name="l19104"></a><span class="lineno">19104</span>&#160; </div>
+<div class="line"><a name="l19105"></a><span class="lineno">19105</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19106"></a><span class="lineno">19106</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19107"></a><span class="lineno">19107</span>&#160;    {</div>
+<div class="line"><a name="l19108"></a><span class="lineno">19108</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordFlushAllocation(</div>
+<div class="line"><a name="l19109"></a><span class="lineno">19109</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l19110"></a><span class="lineno">19110</span>&#160;            allocation, offset, size);</div>
+<div class="line"><a name="l19111"></a><span class="lineno">19111</span>&#160;    }</div>
+<div class="line"><a name="l19112"></a><span class="lineno">19112</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19113"></a><span class="lineno">19113</span>&#160; </div>
+<div class="line"><a name="l19114"></a><span class="lineno">19114</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19115"></a><span class="lineno">19115</span>&#160;}</div>
+<div class="line"><a name="l19116"></a><span class="lineno">19116</span>&#160; </div>
+<div class="line"><a name="l19117"></a><span class="lineno">19117</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae">vmaInvalidateAllocation</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</div>
+<div class="line"><a name="l19118"></a><span class="lineno">19118</span>&#160;{</div>
+<div class="line"><a name="l19119"></a><span class="lineno">19119</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
+<div class="line"><a name="l19120"></a><span class="lineno">19120</span>&#160; </div>
+<div class="line"><a name="l19121"></a><span class="lineno">19121</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaInvalidateAllocation&quot;</span>);</div>
+<div class="line"><a name="l19122"></a><span class="lineno">19122</span>&#160; </div>
+<div class="line"><a name="l19123"></a><span class="lineno">19123</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19124"></a><span class="lineno">19124</span>&#160; </div>
+<div class="line"><a name="l19125"></a><span class="lineno">19125</span>&#160;    <span class="keyword">const</span> VkResult res = allocator-&gt;FlushOrInvalidateAllocation(allocation, offset, size, VMA_CACHE_INVALIDATE);</div>
+<div class="line"><a name="l19126"></a><span class="lineno">19126</span>&#160; </div>
+<div class="line"><a name="l19127"></a><span class="lineno">19127</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19128"></a><span class="lineno">19128</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19129"></a><span class="lineno">19129</span>&#160;    {</div>
+<div class="line"><a name="l19130"></a><span class="lineno">19130</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordInvalidateAllocation(</div>
+<div class="line"><a name="l19131"></a><span class="lineno">19131</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l19132"></a><span class="lineno">19132</span>&#160;            allocation, offset, size);</div>
+<div class="line"><a name="l19133"></a><span class="lineno">19133</span>&#160;    }</div>
+<div class="line"><a name="l19134"></a><span class="lineno">19134</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19135"></a><span class="lineno">19135</span>&#160; </div>
+<div class="line"><a name="l19136"></a><span class="lineno">19136</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19137"></a><span class="lineno">19137</span>&#160;}</div>
+<div class="line"><a name="l19138"></a><span class="lineno">19138</span>&#160; </div>
+<div class="line"><a name="l19139"></a><span class="lineno">19139</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc">vmaFlushAllocations</a>(</div>
+<div class="line"><a name="l19140"></a><span class="lineno">19140</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19141"></a><span class="lineno">19141</span>&#160;    uint32_t allocationCount,</div>
+<div class="line"><a name="l19142"></a><span class="lineno">19142</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* allocations,</div>
+<div class="line"><a name="l19143"></a><span class="lineno">19143</span>&#160;    <span class="keyword">const</span> VkDeviceSize* offsets,</div>
+<div class="line"><a name="l19144"></a><span class="lineno">19144</span>&#160;    <span class="keyword">const</span> VkDeviceSize* sizes)</div>
+<div class="line"><a name="l19145"></a><span class="lineno">19145</span>&#160;{</div>
+<div class="line"><a name="l19146"></a><span class="lineno">19146</span>&#160;    VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l19147"></a><span class="lineno">19147</span>&#160; </div>
+<div class="line"><a name="l19148"></a><span class="lineno">19148</span>&#160;    <span class="keywordflow">if</span>(allocationCount == 0)</div>
+<div class="line"><a name="l19149"></a><span class="lineno">19149</span>&#160;    {</div>
+<div class="line"><a name="l19150"></a><span class="lineno">19150</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l19151"></a><span class="lineno">19151</span>&#160;    }</div>
+<div class="line"><a name="l19152"></a><span class="lineno">19152</span>&#160; </div>
+<div class="line"><a name="l19153"></a><span class="lineno">19153</span>&#160;    VMA_ASSERT(allocations);</div>
+<div class="line"><a name="l19154"></a><span class="lineno">19154</span>&#160; </div>
+<div class="line"><a name="l19155"></a><span class="lineno">19155</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaFlushAllocations&quot;</span>);</div>
+<div class="line"><a name="l19156"></a><span class="lineno">19156</span>&#160; </div>
+<div class="line"><a name="l19157"></a><span class="lineno">19157</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19158"></a><span class="lineno">19158</span>&#160; </div>
+<div class="line"><a name="l19159"></a><span class="lineno">19159</span>&#160;    <span class="keyword">const</span> VkResult res = allocator-&gt;FlushOrInvalidateAllocations(allocationCount, allocations, offsets, sizes, VMA_CACHE_FLUSH);</div>
+<div class="line"><a name="l19160"></a><span class="lineno">19160</span>&#160; </div>
+<div class="line"><a name="l19161"></a><span class="lineno">19161</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19162"></a><span class="lineno">19162</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19163"></a><span class="lineno">19163</span>&#160;    {</div>
+<div class="line"><a name="l19164"></a><span class="lineno">19164</span>&#160;        <span class="comment">//TODO</span></div>
+<div class="line"><a name="l19165"></a><span class="lineno">19165</span>&#160;    }</div>
+<div class="line"><a name="l19166"></a><span class="lineno">19166</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19167"></a><span class="lineno">19167</span>&#160; </div>
+<div class="line"><a name="l19168"></a><span class="lineno">19168</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19169"></a><span class="lineno">19169</span>&#160;}</div>
+<div class="line"><a name="l19170"></a><span class="lineno">19170</span>&#160; </div>
+<div class="line"><a name="l19171"></a><span class="lineno">19171</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ab25b558d75f7378ec944a1522fdcc3c5">vmaInvalidateAllocations</a>(</div>
+<div class="line"><a name="l19172"></a><span class="lineno">19172</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19173"></a><span class="lineno">19173</span>&#160;    uint32_t allocationCount,</div>
+<div class="line"><a name="l19174"></a><span class="lineno">19174</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* allocations,</div>
+<div class="line"><a name="l19175"></a><span class="lineno">19175</span>&#160;    <span class="keyword">const</span> VkDeviceSize* offsets,</div>
+<div class="line"><a name="l19176"></a><span class="lineno">19176</span>&#160;    <span class="keyword">const</span> VkDeviceSize* sizes)</div>
+<div class="line"><a name="l19177"></a><span class="lineno">19177</span>&#160;{</div>
+<div class="line"><a name="l19178"></a><span class="lineno">19178</span>&#160;    VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l19179"></a><span class="lineno">19179</span>&#160; </div>
+<div class="line"><a name="l19180"></a><span class="lineno">19180</span>&#160;    <span class="keywordflow">if</span>(allocationCount == 0)</div>
+<div class="line"><a name="l19181"></a><span class="lineno">19181</span>&#160;    {</div>
+<div class="line"><a name="l19182"></a><span class="lineno">19182</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l19183"></a><span class="lineno">19183</span>&#160;    }</div>
+<div class="line"><a name="l19184"></a><span class="lineno">19184</span>&#160; </div>
+<div class="line"><a name="l19185"></a><span class="lineno">19185</span>&#160;    VMA_ASSERT(allocations);</div>
+<div class="line"><a name="l19186"></a><span class="lineno">19186</span>&#160; </div>
+<div class="line"><a name="l19187"></a><span class="lineno">19187</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaInvalidateAllocations&quot;</span>);</div>
+<div class="line"><a name="l19188"></a><span class="lineno">19188</span>&#160; </div>
+<div class="line"><a name="l19189"></a><span class="lineno">19189</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19190"></a><span class="lineno">19190</span>&#160; </div>
+<div class="line"><a name="l19191"></a><span class="lineno">19191</span>&#160;    <span class="keyword">const</span> VkResult res = allocator-&gt;FlushOrInvalidateAllocations(allocationCount, allocations, offsets, sizes, VMA_CACHE_INVALIDATE);</div>
+<div class="line"><a name="l19192"></a><span class="lineno">19192</span>&#160; </div>
+<div class="line"><a name="l19193"></a><span class="lineno">19193</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19194"></a><span class="lineno">19194</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19195"></a><span class="lineno">19195</span>&#160;    {</div>
+<div class="line"><a name="l19196"></a><span class="lineno">19196</span>&#160;        <span class="comment">//TODO</span></div>
+<div class="line"><a name="l19197"></a><span class="lineno">19197</span>&#160;    }</div>
+<div class="line"><a name="l19198"></a><span class="lineno">19198</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19199"></a><span class="lineno">19199</span>&#160; </div>
+<div class="line"><a name="l19200"></a><span class="lineno">19200</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19201"></a><span class="lineno">19201</span>&#160;}</div>
+<div class="line"><a name="l19202"></a><span class="lineno">19202</span>&#160; </div>
+<div class="line"><a name="l19203"></a><span class="lineno">19203</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98">vmaCheckCorruption</a>(<a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryTypeBits)</div>
+<div class="line"><a name="l19204"></a><span class="lineno">19204</span>&#160;{</div>
+<div class="line"><a name="l19205"></a><span class="lineno">19205</span>&#160;    VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l19206"></a><span class="lineno">19206</span>&#160; </div>
+<div class="line"><a name="l19207"></a><span class="lineno">19207</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCheckCorruption&quot;</span>);</div>
+<div class="line"><a name="l19208"></a><span class="lineno">19208</span>&#160; </div>
+<div class="line"><a name="l19209"></a><span class="lineno">19209</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19210"></a><span class="lineno">19210</span>&#160; </div>
+<div class="line"><a name="l19211"></a><span class="lineno">19211</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;CheckCorruption(memoryTypeBits);</div>
+<div class="line"><a name="l19212"></a><span class="lineno">19212</span>&#160;}</div>
+<div class="line"><a name="l19213"></a><span class="lineno">19213</span>&#160; </div>
+<div class="line"><a name="l19214"></a><span class="lineno">19214</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac">vmaDefragment</a>(</div>
+<div class="line"><a name="l19215"></a><span class="lineno">19215</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19216"></a><span class="lineno">19216</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations,</div>
+<div class="line"><a name="l19217"></a><span class="lineno">19217</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l19218"></a><span class="lineno">19218</span>&#160;    VkBool32* pAllocationsChanged,</div>
+<div class="line"><a name="l19219"></a><span class="lineno">19219</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> *pDefragmentationInfo,</div>
+<div class="line"><a name="l19220"></a><span class="lineno">19220</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pDefragmentationStats)</div>
+<div class="line"><a name="l19221"></a><span class="lineno">19221</span>&#160;{</div>
+<div class="line"><a name="l19222"></a><span class="lineno">19222</span>&#160;    <span class="comment">// Deprecated interface, reimplemented using new one.</span></div>
+<div class="line"><a name="l19223"></a><span class="lineno">19223</span>&#160; </div>
+<div class="line"><a name="l19224"></a><span class="lineno">19224</span>&#160;    <a class="code" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> info2 = {};</div>
+<div class="line"><a name="l19225"></a><span class="lineno">19225</span>&#160;    info2.<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a> = (uint32_t)allocationCount;</div>
+<div class="line"><a name="l19226"></a><span class="lineno">19226</span>&#160;    info2.<a class="code" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">pAllocations</a> = pAllocations;</div>
+<div class="line"><a name="l19227"></a><span class="lineno">19227</span>&#160;    info2.<a class="code" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">pAllocationsChanged</a> = pAllocationsChanged;</div>
+<div class="line"><a name="l19228"></a><span class="lineno">19228</span>&#160;    <span class="keywordflow">if</span>(pDefragmentationInfo != VMA_NULL)</div>
+<div class="line"><a name="l19229"></a><span class="lineno">19229</span>&#160;    {</div>
+<div class="line"><a name="l19230"></a><span class="lineno">19230</span>&#160;        info2.<a class="code" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a> = pDefragmentationInfo-&gt;<a class="code" href="struct_vma_defragmentation_info.html#aa7c7304e13c71f604c907196c4e28fbc">maxAllocationsToMove</a>;</div>
+<div class="line"><a name="l19231"></a><span class="lineno">19231</span>&#160;        info2.<a class="code" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">maxCpuBytesToMove</a> = pDefragmentationInfo-&gt;<a class="code" href="struct_vma_defragmentation_info.html#acb311c940a777270e67e1b81c5ab6a1d">maxBytesToMove</a>;</div>
+<div class="line"><a name="l19232"></a><span class="lineno">19232</span>&#160;    }</div>
+<div class="line"><a name="l19233"></a><span class="lineno">19233</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l19234"></a><span class="lineno">19234</span>&#160;    {</div>
+<div class="line"><a name="l19235"></a><span class="lineno">19235</span>&#160;        info2.<a class="code" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a> = UINT32_MAX;</div>
+<div class="line"><a name="l19236"></a><span class="lineno">19236</span>&#160;        info2.<a class="code" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">maxCpuBytesToMove</a> = VK_WHOLE_SIZE;</div>
+<div class="line"><a name="l19237"></a><span class="lineno">19237</span>&#160;    }</div>
+<div class="line"><a name="l19238"></a><span class="lineno">19238</span>&#160;    <span class="comment">// info2.flags, maxGpuAllocationsToMove, maxGpuBytesToMove, commandBuffer deliberately left zero.</span></div>
+<div class="line"><a name="l19239"></a><span class="lineno">19239</span>&#160; </div>
+<div class="line"><a name="l19240"></a><span class="lineno">19240</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> ctx;</div>
+<div class="line"><a name="l19241"></a><span class="lineno">19241</span>&#160;    VkResult res = <a class="code" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a>(allocator, &amp;info2, pDefragmentationStats, &amp;ctx);</div>
+<div class="line"><a name="l19242"></a><span class="lineno">19242</span>&#160;    <span class="keywordflow">if</span>(res == VK_NOT_READY)</div>
+<div class="line"><a name="l19243"></a><span class="lineno">19243</span>&#160;    {</div>
+<div class="line"><a name="l19244"></a><span class="lineno">19244</span>&#160;        res = <a class="code" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a>( allocator, ctx);</div>
+<div class="line"><a name="l19245"></a><span class="lineno">19245</span>&#160;    }</div>
+<div class="line"><a name="l19246"></a><span class="lineno">19246</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19247"></a><span class="lineno">19247</span>&#160;}</div>
+<div class="line"><a name="l19248"></a><span class="lineno">19248</span>&#160; </div>
+<div class="line"><a name="l19249"></a><span class="lineno">19249</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a>(</div>
+<div class="line"><a name="l19250"></a><span class="lineno">19250</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19251"></a><span class="lineno">19251</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a>* pInfo,</div>
+<div class="line"><a name="l19252"></a><span class="lineno">19252</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats,</div>
+<div class="line"><a name="l19253"></a><span class="lineno">19253</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> *pContext)</div>
+<div class="line"><a name="l19254"></a><span class="lineno">19254</span>&#160;{</div>
+<div class="line"><a name="l19255"></a><span class="lineno">19255</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pInfo &amp;&amp; pContext);</div>
+<div class="line"><a name="l19256"></a><span class="lineno">19256</span>&#160; </div>
+<div class="line"><a name="l19257"></a><span class="lineno">19257</span>&#160;    <span class="comment">// Degenerate case: Nothing to defragment.</span></div>
+<div class="line"><a name="l19258"></a><span class="lineno">19258</span>&#160;    <span class="keywordflow">if</span>(pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a> == 0 &amp;&amp; pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">poolCount</a> == 0)</div>
+<div class="line"><a name="l19259"></a><span class="lineno">19259</span>&#160;    {</div>
+<div class="line"><a name="l19260"></a><span class="lineno">19260</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l19261"></a><span class="lineno">19261</span>&#160;    }</div>
+<div class="line"><a name="l19262"></a><span class="lineno">19262</span>&#160; </div>
+<div class="line"><a name="l19263"></a><span class="lineno">19263</span>&#160;    VMA_ASSERT(pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a> == 0 || pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">pAllocations</a> != VMA_NULL);</div>
+<div class="line"><a name="l19264"></a><span class="lineno">19264</span>&#160;    VMA_ASSERT(pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">poolCount</a> == 0 || pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b">pPools</a> != VMA_NULL);</div>
+<div class="line"><a name="l19265"></a><span class="lineno">19265</span>&#160;    VMA_HEAVY_ASSERT(VmaValidatePointerArray(pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a>, pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">pAllocations</a>));</div>
+<div class="line"><a name="l19266"></a><span class="lineno">19266</span>&#160;    VMA_HEAVY_ASSERT(VmaValidatePointerArray(pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">poolCount</a>, pInfo-&gt;<a class="code" href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b">pPools</a>));</div>
+<div class="line"><a name="l19267"></a><span class="lineno">19267</span>&#160; </div>
+<div class="line"><a name="l19268"></a><span class="lineno">19268</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDefragmentationBegin&quot;</span>);</div>
+<div class="line"><a name="l19269"></a><span class="lineno">19269</span>&#160; </div>
+<div class="line"><a name="l19270"></a><span class="lineno">19270</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19271"></a><span class="lineno">19271</span>&#160; </div>
+<div class="line"><a name="l19272"></a><span class="lineno">19272</span>&#160;    VkResult res = allocator-&gt;DefragmentationBegin(*pInfo, pStats, pContext);</div>
+<div class="line"><a name="l19273"></a><span class="lineno">19273</span>&#160; </div>
+<div class="line"><a name="l19274"></a><span class="lineno">19274</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19275"></a><span class="lineno">19275</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19276"></a><span class="lineno">19276</span>&#160;    {</div>
+<div class="line"><a name="l19277"></a><span class="lineno">19277</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordDefragmentationBegin(</div>
+<div class="line"><a name="l19278"></a><span class="lineno">19278</span>&#160;            allocator-&gt;GetCurrentFrameIndex(), *pInfo, *pContext);</div>
+<div class="line"><a name="l19279"></a><span class="lineno">19279</span>&#160;    }</div>
+<div class="line"><a name="l19280"></a><span class="lineno">19280</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19281"></a><span class="lineno">19281</span>&#160; </div>
+<div class="line"><a name="l19282"></a><span class="lineno">19282</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19283"></a><span class="lineno">19283</span>&#160;}</div>
+<div class="line"><a name="l19284"></a><span class="lineno">19284</span>&#160; </div>
+<div class="line"><a name="l19285"></a><span class="lineno">19285</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a>(</div>
+<div class="line"><a name="l19286"></a><span class="lineno">19286</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19287"></a><span class="lineno">19287</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</div>
+<div class="line"><a name="l19288"></a><span class="lineno">19288</span>&#160;{</div>
+<div class="line"><a name="l19289"></a><span class="lineno">19289</span>&#160;    VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l19290"></a><span class="lineno">19290</span>&#160; </div>
+<div class="line"><a name="l19291"></a><span class="lineno">19291</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDefragmentationEnd&quot;</span>);</div>
+<div class="line"><a name="l19292"></a><span class="lineno">19292</span>&#160; </div>
+<div class="line"><a name="l19293"></a><span class="lineno">19293</span>&#160;    <span class="keywordflow">if</span>(context != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l19294"></a><span class="lineno">19294</span>&#160;    {</div>
+<div class="line"><a name="l19295"></a><span class="lineno">19295</span>&#160;        VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19296"></a><span class="lineno">19296</span>&#160; </div>
+<div class="line"><a name="l19297"></a><span class="lineno">19297</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19298"></a><span class="lineno">19298</span>&#160;        <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19299"></a><span class="lineno">19299</span>&#160;        {</div>
+<div class="line"><a name="l19300"></a><span class="lineno">19300</span>&#160;            allocator-&gt;GetRecorder()-&gt;RecordDefragmentationEnd(</div>
+<div class="line"><a name="l19301"></a><span class="lineno">19301</span>&#160;                allocator-&gt;GetCurrentFrameIndex(), context);</div>
+<div class="line"><a name="l19302"></a><span class="lineno">19302</span>&#160;        }</div>
+<div class="line"><a name="l19303"></a><span class="lineno">19303</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19304"></a><span class="lineno">19304</span>&#160; </div>
+<div class="line"><a name="l19305"></a><span class="lineno">19305</span>&#160;        <span class="keywordflow">return</span> allocator-&gt;DefragmentationEnd(context);</div>
+<div class="line"><a name="l19306"></a><span class="lineno">19306</span>&#160;    }</div>
+<div class="line"><a name="l19307"></a><span class="lineno">19307</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l19308"></a><span class="lineno">19308</span>&#160;    {</div>
+<div class="line"><a name="l19309"></a><span class="lineno">19309</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l19310"></a><span class="lineno">19310</span>&#160;    }</div>
+<div class="line"><a name="l19311"></a><span class="lineno">19311</span>&#160;}</div>
+<div class="line"><a name="l19312"></a><span class="lineno">19312</span>&#160; </div>
+<div class="line"><a name="l19313"></a><span class="lineno">19313</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b">vmaBeginDefragmentationPass</a>(</div>
+<div class="line"><a name="l19314"></a><span class="lineno">19314</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19315"></a><span class="lineno">19315</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context,</div>
+<div class="line"><a name="l19316"></a><span class="lineno">19316</span>&#160;    <a class="code" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a>* pInfo</div>
+<div class="line"><a name="l19317"></a><span class="lineno">19317</span>&#160;    )</div>
+<div class="line"><a name="l19318"></a><span class="lineno">19318</span>&#160;{</div>
+<div class="line"><a name="l19319"></a><span class="lineno">19319</span>&#160;    VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l19320"></a><span class="lineno">19320</span>&#160;    VMA_ASSERT(pInfo);</div>
+<div class="line"><a name="l19321"></a><span class="lineno">19321</span>&#160; </div>
+<div class="line"><a name="l19322"></a><span class="lineno">19322</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBeginDefragmentationPass&quot;</span>);</div>
+<div class="line"><a name="l19323"></a><span class="lineno">19323</span>&#160; </div>
+<div class="line"><a name="l19324"></a><span class="lineno">19324</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19325"></a><span class="lineno">19325</span>&#160; </div>
+<div class="line"><a name="l19326"></a><span class="lineno">19326</span>&#160;    <span class="keywordflow">if</span>(context == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l19327"></a><span class="lineno">19327</span>&#160;    {</div>
+<div class="line"><a name="l19328"></a><span class="lineno">19328</span>&#160;        pInfo-&gt;<a class="code" href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c">moveCount</a> = 0;</div>
+<div class="line"><a name="l19329"></a><span class="lineno">19329</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l19330"></a><span class="lineno">19330</span>&#160;    }</div>
+<div class="line"><a name="l19331"></a><span class="lineno">19331</span>&#160; </div>
+<div class="line"><a name="l19332"></a><span class="lineno">19332</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;DefragmentationPassBegin(pInfo, context);</div>
+<div class="line"><a name="l19333"></a><span class="lineno">19333</span>&#160;}</div>
+<div class="line"><a name="l19334"></a><span class="lineno">19334</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a1b9ffa538bed905af55c747cc48963bd">vmaEndDefragmentationPass</a>(</div>
+<div class="line"><a name="l19335"></a><span class="lineno">19335</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19336"></a><span class="lineno">19336</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</div>
+<div class="line"><a name="l19337"></a><span class="lineno">19337</span>&#160;{</div>
+<div class="line"><a name="l19338"></a><span class="lineno">19338</span>&#160;    VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l19339"></a><span class="lineno">19339</span>&#160; </div>
+<div class="line"><a name="l19340"></a><span class="lineno">19340</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaEndDefragmentationPass&quot;</span>);</div>
+<div class="line"><a name="l19341"></a><span class="lineno">19341</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19342"></a><span class="lineno">19342</span>&#160; </div>
+<div class="line"><a name="l19343"></a><span class="lineno">19343</span>&#160;    <span class="keywordflow">if</span>(context == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l19344"></a><span class="lineno">19344</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l19345"></a><span class="lineno">19345</span>&#160; </div>
+<div class="line"><a name="l19346"></a><span class="lineno">19346</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;DefragmentationPassEnd(context);</div>
+<div class="line"><a name="l19347"></a><span class="lineno">19347</span>&#160;}</div>
+<div class="line"><a name="l19348"></a><span class="lineno">19348</span>&#160; </div>
+<div class="line"><a name="l19349"></a><span class="lineno">19349</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a>(</div>
+<div class="line"><a name="l19350"></a><span class="lineno">19350</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19351"></a><span class="lineno">19351</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l19352"></a><span class="lineno">19352</span>&#160;    VkBuffer buffer)</div>
+<div class="line"><a name="l19353"></a><span class="lineno">19353</span>&#160;{</div>
+<div class="line"><a name="l19354"></a><span class="lineno">19354</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; buffer);</div>
+<div class="line"><a name="l19355"></a><span class="lineno">19355</span>&#160; </div>
+<div class="line"><a name="l19356"></a><span class="lineno">19356</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindBufferMemory&quot;</span>);</div>
+<div class="line"><a name="l19357"></a><span class="lineno">19357</span>&#160; </div>
+<div class="line"><a name="l19358"></a><span class="lineno">19358</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19359"></a><span class="lineno">19359</span>&#160; </div>
+<div class="line"><a name="l19360"></a><span class="lineno">19360</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;BindBufferMemory(allocation, 0, buffer, VMA_NULL);</div>
+<div class="line"><a name="l19361"></a><span class="lineno">19361</span>&#160;}</div>
+<div class="line"><a name="l19362"></a><span class="lineno">19362</span>&#160; </div>
+<div class="line"><a name="l19363"></a><span class="lineno">19363</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a">vmaBindBufferMemory2</a>(</div>
+<div class="line"><a name="l19364"></a><span class="lineno">19364</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19365"></a><span class="lineno">19365</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l19366"></a><span class="lineno">19366</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
+<div class="line"><a name="l19367"></a><span class="lineno">19367</span>&#160;    VkBuffer buffer,</div>
+<div class="line"><a name="l19368"></a><span class="lineno">19368</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
+<div class="line"><a name="l19369"></a><span class="lineno">19369</span>&#160;{</div>
+<div class="line"><a name="l19370"></a><span class="lineno">19370</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; buffer);</div>
+<div class="line"><a name="l19371"></a><span class="lineno">19371</span>&#160; </div>
+<div class="line"><a name="l19372"></a><span class="lineno">19372</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindBufferMemory2&quot;</span>);</div>
+<div class="line"><a name="l19373"></a><span class="lineno">19373</span>&#160; </div>
+<div class="line"><a name="l19374"></a><span class="lineno">19374</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19375"></a><span class="lineno">19375</span>&#160; </div>
+<div class="line"><a name="l19376"></a><span class="lineno">19376</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;BindBufferMemory(allocation, allocationLocalOffset, buffer, pNext);</div>
+<div class="line"><a name="l19377"></a><span class="lineno">19377</span>&#160;}</div>
+<div class="line"><a name="l19378"></a><span class="lineno">19378</span>&#160; </div>
+<div class="line"><a name="l19379"></a><span class="lineno">19379</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a>(</div>
+<div class="line"><a name="l19380"></a><span class="lineno">19380</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19381"></a><span class="lineno">19381</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l19382"></a><span class="lineno">19382</span>&#160;    VkImage image)</div>
+<div class="line"><a name="l19383"></a><span class="lineno">19383</span>&#160;{</div>
+<div class="line"><a name="l19384"></a><span class="lineno">19384</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; image);</div>
+<div class="line"><a name="l19385"></a><span class="lineno">19385</span>&#160; </div>
+<div class="line"><a name="l19386"></a><span class="lineno">19386</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindImageMemory&quot;</span>);</div>
+<div class="line"><a name="l19387"></a><span class="lineno">19387</span>&#160; </div>
+<div class="line"><a name="l19388"></a><span class="lineno">19388</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19389"></a><span class="lineno">19389</span>&#160; </div>
+<div class="line"><a name="l19390"></a><span class="lineno">19390</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;BindImageMemory(allocation, 0, image, VMA_NULL);</div>
+<div class="line"><a name="l19391"></a><span class="lineno">19391</span>&#160;}</div>
+<div class="line"><a name="l19392"></a><span class="lineno">19392</span>&#160; </div>
+<div class="line"><a name="l19393"></a><span class="lineno">19393</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc">vmaBindImageMemory2</a>(</div>
+<div class="line"><a name="l19394"></a><span class="lineno">19394</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19395"></a><span class="lineno">19395</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l19396"></a><span class="lineno">19396</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
+<div class="line"><a name="l19397"></a><span class="lineno">19397</span>&#160;    VkImage image,</div>
+<div class="line"><a name="l19398"></a><span class="lineno">19398</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
+<div class="line"><a name="l19399"></a><span class="lineno">19399</span>&#160;{</div>
+<div class="line"><a name="l19400"></a><span class="lineno">19400</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; image);</div>
+<div class="line"><a name="l19401"></a><span class="lineno">19401</span>&#160; </div>
+<div class="line"><a name="l19402"></a><span class="lineno">19402</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindImageMemory2&quot;</span>);</div>
+<div class="line"><a name="l19403"></a><span class="lineno">19403</span>&#160; </div>
+<div class="line"><a name="l19404"></a><span class="lineno">19404</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19405"></a><span class="lineno">19405</span>&#160; </div>
+<div class="line"><a name="l19406"></a><span class="lineno">19406</span>&#160;        <span class="keywordflow">return</span> allocator-&gt;BindImageMemory(allocation, allocationLocalOffset, image, pNext);</div>
+<div class="line"><a name="l19407"></a><span class="lineno">19407</span>&#160;}</div>
+<div class="line"><a name="l19408"></a><span class="lineno">19408</span>&#160; </div>
+<div class="line"><a name="l19409"></a><span class="lineno">19409</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(</div>
+<div class="line"><a name="l19410"></a><span class="lineno">19410</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19411"></a><span class="lineno">19411</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* pBufferCreateInfo,</div>
+<div class="line"><a name="l19412"></a><span class="lineno">19412</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div>
+<div class="line"><a name="l19413"></a><span class="lineno">19413</span>&#160;    VkBuffer* pBuffer,</div>
+<div class="line"><a name="l19414"></a><span class="lineno">19414</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
+<div class="line"><a name="l19415"></a><span class="lineno">19415</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
+<div class="line"><a name="l19416"></a><span class="lineno">19416</span>&#160;{</div>
+<div class="line"><a name="l19417"></a><span class="lineno">19417</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pBufferCreateInfo &amp;&amp; pAllocationCreateInfo &amp;&amp; pBuffer &amp;&amp; pAllocation);</div>
+<div class="line"><a name="l19418"></a><span class="lineno">19418</span>&#160; </div>
+<div class="line"><a name="l19419"></a><span class="lineno">19419</span>&#160;    <span class="keywordflow">if</span>(pBufferCreateInfo-&gt;size == 0)</div>
+<div class="line"><a name="l19420"></a><span class="lineno">19420</span>&#160;    {</div>
+<div class="line"><a name="l19421"></a><span class="lineno">19421</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
+<div class="line"><a name="l19422"></a><span class="lineno">19422</span>&#160;    }</div>
+<div class="line"><a name="l19423"></a><span class="lineno">19423</span>&#160;    <span class="keywordflow">if</span>((pBufferCreateInfo-&gt;usage &amp; VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_COPY) != 0 &amp;&amp;</div>
+<div class="line"><a name="l19424"></a><span class="lineno">19424</span>&#160;        !allocator-&gt;m_UseKhrBufferDeviceAddress)</div>
+<div class="line"><a name="l19425"></a><span class="lineno">19425</span>&#160;    {</div>
+<div class="line"><a name="l19426"></a><span class="lineno">19426</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Creating a buffer with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT is not valid if VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT was not used.&quot;</span>);</div>
+<div class="line"><a name="l19427"></a><span class="lineno">19427</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
+<div class="line"><a name="l19428"></a><span class="lineno">19428</span>&#160;    }</div>
+<div class="line"><a name="l19429"></a><span class="lineno">19429</span>&#160; </div>
+<div class="line"><a name="l19430"></a><span class="lineno">19430</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreateBuffer&quot;</span>);</div>
+<div class="line"><a name="l19431"></a><span class="lineno">19431</span>&#160; </div>
+<div class="line"><a name="l19432"></a><span class="lineno">19432</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19433"></a><span class="lineno">19433</span>&#160; </div>
+<div class="line"><a name="l19434"></a><span class="lineno">19434</span>&#160;    *pBuffer = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19435"></a><span class="lineno">19435</span>&#160;    *pAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19436"></a><span class="lineno">19436</span>&#160; </div>
+<div class="line"><a name="l19437"></a><span class="lineno">19437</span>&#160;    <span class="comment">// 1. Create VkBuffer.</span></div>
+<div class="line"><a name="l19438"></a><span class="lineno">19438</span>&#160;    VkResult res = (*allocator-&gt;GetVulkanFunctions().vkCreateBuffer)(</div>
+<div class="line"><a name="l19439"></a><span class="lineno">19439</span>&#160;        allocator-&gt;m_hDevice,</div>
+<div class="line"><a name="l19440"></a><span class="lineno">19440</span>&#160;        pBufferCreateInfo,</div>
+<div class="line"><a name="l19441"></a><span class="lineno">19441</span>&#160;        allocator-&gt;GetAllocationCallbacks(),</div>
+<div class="line"><a name="l19442"></a><span class="lineno">19442</span>&#160;        pBuffer);</div>
+<div class="line"><a name="l19443"></a><span class="lineno">19443</span>&#160;    <span class="keywordflow">if</span>(res &gt;= 0)</div>
+<div class="line"><a name="l19444"></a><span class="lineno">19444</span>&#160;    {</div>
+<div class="line"><a name="l19445"></a><span class="lineno">19445</span>&#160;        <span class="comment">// 2. vkGetBufferMemoryRequirements.</span></div>
+<div class="line"><a name="l19446"></a><span class="lineno">19446</span>&#160;        VkMemoryRequirements vkMemReq = {};</div>
+<div class="line"><a name="l19447"></a><span class="lineno">19447</span>&#160;        <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l19448"></a><span class="lineno">19448</span>&#160;        <span class="keywordtype">bool</span> prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l19449"></a><span class="lineno">19449</span>&#160;        allocator-&gt;GetBufferMemoryRequirements(*pBuffer, vkMemReq,</div>
+<div class="line"><a name="l19450"></a><span class="lineno">19450</span>&#160;            requiresDedicatedAllocation, prefersDedicatedAllocation);</div>
+<div class="line"><a name="l19451"></a><span class="lineno">19451</span>&#160; </div>
+<div class="line"><a name="l19452"></a><span class="lineno">19452</span>&#160;        <span class="comment">// 3. Allocate memory using allocator.</span></div>
+<div class="line"><a name="l19453"></a><span class="lineno">19453</span>&#160;        res = allocator-&gt;AllocateMemory(</div>
+<div class="line"><a name="l19454"></a><span class="lineno">19454</span>&#160;            vkMemReq,</div>
+<div class="line"><a name="l19455"></a><span class="lineno">19455</span>&#160;            requiresDedicatedAllocation,</div>
+<div class="line"><a name="l19456"></a><span class="lineno">19456</span>&#160;            prefersDedicatedAllocation,</div>
+<div class="line"><a name="l19457"></a><span class="lineno">19457</span>&#160;            *pBuffer, <span class="comment">// dedicatedBuffer</span></div>
+<div class="line"><a name="l19458"></a><span class="lineno">19458</span>&#160;            pBufferCreateInfo-&gt;usage, <span class="comment">// dedicatedBufferUsage</span></div>
+<div class="line"><a name="l19459"></a><span class="lineno">19459</span>&#160;            VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
+<div class="line"><a name="l19460"></a><span class="lineno">19460</span>&#160;            *pAllocationCreateInfo,</div>
+<div class="line"><a name="l19461"></a><span class="lineno">19461</span>&#160;            VMA_SUBALLOCATION_TYPE_BUFFER,</div>
+<div class="line"><a name="l19462"></a><span class="lineno">19462</span>&#160;            1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l19463"></a><span class="lineno">19463</span>&#160;            pAllocation);</div>
+<div class="line"><a name="l19464"></a><span class="lineno">19464</span>&#160; </div>
+<div class="line"><a name="l19465"></a><span class="lineno">19465</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19466"></a><span class="lineno">19466</span>&#160;        <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19467"></a><span class="lineno">19467</span>&#160;        {</div>
+<div class="line"><a name="l19468"></a><span class="lineno">19468</span>&#160;            allocator-&gt;GetRecorder()-&gt;RecordCreateBuffer(</div>
+<div class="line"><a name="l19469"></a><span class="lineno">19469</span>&#160;                allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l19470"></a><span class="lineno">19470</span>&#160;                *pBufferCreateInfo,</div>
+<div class="line"><a name="l19471"></a><span class="lineno">19471</span>&#160;                *pAllocationCreateInfo,</div>
+<div class="line"><a name="l19472"></a><span class="lineno">19472</span>&#160;                *pAllocation);</div>
+<div class="line"><a name="l19473"></a><span class="lineno">19473</span>&#160;        }</div>
+<div class="line"><a name="l19474"></a><span class="lineno">19474</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19475"></a><span class="lineno">19475</span>&#160; </div>
+<div class="line"><a name="l19476"></a><span class="lineno">19476</span>&#160;        <span class="keywordflow">if</span>(res &gt;= 0)</div>
+<div class="line"><a name="l19477"></a><span class="lineno">19477</span>&#160;        {</div>
+<div class="line"><a name="l19478"></a><span class="lineno">19478</span>&#160;            <span class="comment">// 3. Bind buffer with memory.</span></div>
+<div class="line"><a name="l19479"></a><span class="lineno">19479</span>&#160;            <span class="keywordflow">if</span>((pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">VMA_ALLOCATION_CREATE_DONT_BIND_BIT</a>) == 0)</div>
+<div class="line"><a name="l19480"></a><span class="lineno">19480</span>&#160;            {</div>
+<div class="line"><a name="l19481"></a><span class="lineno">19481</span>&#160;                res = allocator-&gt;BindBufferMemory(*pAllocation, 0, *pBuffer, VMA_NULL);</div>
+<div class="line"><a name="l19482"></a><span class="lineno">19482</span>&#160;            }</div>
+<div class="line"><a name="l19483"></a><span class="lineno">19483</span>&#160;            <span class="keywordflow">if</span>(res &gt;= 0)</div>
+<div class="line"><a name="l19484"></a><span class="lineno">19484</span>&#160;            {</div>
+<div class="line"><a name="l19485"></a><span class="lineno">19485</span>&#160;                <span class="comment">// All steps succeeded.</span></div>
+<div class="line"><a name="l19486"></a><span class="lineno">19486</span>&#160;<span class="preprocessor">                #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l19487"></a><span class="lineno">19487</span>&#160;                    (*pAllocation)-&gt;InitBufferImageUsage(pBufferCreateInfo-&gt;usage);</div>
+<div class="line"><a name="l19488"></a><span class="lineno">19488</span>&#160;<span class="preprocessor">                #endif</span></div>
+<div class="line"><a name="l19489"></a><span class="lineno">19489</span>&#160;                <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL)</div>
+<div class="line"><a name="l19490"></a><span class="lineno">19490</span>&#160;                {</div>
+<div class="line"><a name="l19491"></a><span class="lineno">19491</span>&#160;                    allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
+<div class="line"><a name="l19492"></a><span class="lineno">19492</span>&#160;                }</div>
+<div class="line"><a name="l19493"></a><span class="lineno">19493</span>&#160; </div>
+<div class="line"><a name="l19494"></a><span class="lineno">19494</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l19495"></a><span class="lineno">19495</span>&#160;            }</div>
+<div class="line"><a name="l19496"></a><span class="lineno">19496</span>&#160;            allocator-&gt;FreeMemory(</div>
+<div class="line"><a name="l19497"></a><span class="lineno">19497</span>&#160;                1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l19498"></a><span class="lineno">19498</span>&#160;                pAllocation);</div>
+<div class="line"><a name="l19499"></a><span class="lineno">19499</span>&#160;            *pAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19500"></a><span class="lineno">19500</span>&#160;            (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, *pBuffer, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l19501"></a><span class="lineno">19501</span>&#160;            *pBuffer = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19502"></a><span class="lineno">19502</span>&#160;            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19503"></a><span class="lineno">19503</span>&#160;        }</div>
+<div class="line"><a name="l19504"></a><span class="lineno">19504</span>&#160;        (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, *pBuffer, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l19505"></a><span class="lineno">19505</span>&#160;        *pBuffer = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19506"></a><span class="lineno">19506</span>&#160;        <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19507"></a><span class="lineno">19507</span>&#160;    }</div>
+<div class="line"><a name="l19508"></a><span class="lineno">19508</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19509"></a><span class="lineno">19509</span>&#160;}</div>
+<div class="line"><a name="l19510"></a><span class="lineno">19510</span>&#160; </div>
+<div class="line"><a name="l19511"></a><span class="lineno">19511</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834">vmaCreateBufferWithAlignment</a>(</div>
+<div class="line"><a name="l19512"></a><span class="lineno">19512</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19513"></a><span class="lineno">19513</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* pBufferCreateInfo,</div>
+<div class="line"><a name="l19514"></a><span class="lineno">19514</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div>
+<div class="line"><a name="l19515"></a><span class="lineno">19515</span>&#160;    VkDeviceSize minAlignment,</div>
+<div class="line"><a name="l19516"></a><span class="lineno">19516</span>&#160;    VkBuffer* pBuffer,</div>
+<div class="line"><a name="l19517"></a><span class="lineno">19517</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
+<div class="line"><a name="l19518"></a><span class="lineno">19518</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
+<div class="line"><a name="l19519"></a><span class="lineno">19519</span>&#160;{</div>
+<div class="line"><a name="l19520"></a><span class="lineno">19520</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pBufferCreateInfo &amp;&amp; pAllocationCreateInfo &amp;&amp; VmaIsPow2(minAlignment) &amp;&amp; pBuffer &amp;&amp; pAllocation);</div>
+<div class="line"><a name="l19521"></a><span class="lineno">19521</span>&#160; </div>
+<div class="line"><a name="l19522"></a><span class="lineno">19522</span>&#160;    <span class="keywordflow">if</span>(pBufferCreateInfo-&gt;size == 0)</div>
+<div class="line"><a name="l19523"></a><span class="lineno">19523</span>&#160;    {</div>
+<div class="line"><a name="l19524"></a><span class="lineno">19524</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
+<div class="line"><a name="l19525"></a><span class="lineno">19525</span>&#160;    }</div>
+<div class="line"><a name="l19526"></a><span class="lineno">19526</span>&#160;    <span class="keywordflow">if</span>((pBufferCreateInfo-&gt;usage &amp; VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_COPY) != 0 &amp;&amp;</div>
+<div class="line"><a name="l19527"></a><span class="lineno">19527</span>&#160;        !allocator-&gt;m_UseKhrBufferDeviceAddress)</div>
+<div class="line"><a name="l19528"></a><span class="lineno">19528</span>&#160;    {</div>
+<div class="line"><a name="l19529"></a><span class="lineno">19529</span>&#160;        VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Creating a buffer with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT is not valid if VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT was not used.&quot;</span>);</div>
+<div class="line"><a name="l19530"></a><span class="lineno">19530</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
+<div class="line"><a name="l19531"></a><span class="lineno">19531</span>&#160;    }</div>
+<div class="line"><a name="l19532"></a><span class="lineno">19532</span>&#160; </div>
+<div class="line"><a name="l19533"></a><span class="lineno">19533</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreateBufferWithAlignment&quot;</span>);</div>
+<div class="line"><a name="l19534"></a><span class="lineno">19534</span>&#160; </div>
+<div class="line"><a name="l19535"></a><span class="lineno">19535</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19536"></a><span class="lineno">19536</span>&#160; </div>
+<div class="line"><a name="l19537"></a><span class="lineno">19537</span>&#160;    *pBuffer = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19538"></a><span class="lineno">19538</span>&#160;    *pAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19539"></a><span class="lineno">19539</span>&#160; </div>
+<div class="line"><a name="l19540"></a><span class="lineno">19540</span>&#160;    <span class="comment">// 1. Create VkBuffer.</span></div>
+<div class="line"><a name="l19541"></a><span class="lineno">19541</span>&#160;    VkResult res = (*allocator-&gt;GetVulkanFunctions().vkCreateBuffer)(</div>
+<div class="line"><a name="l19542"></a><span class="lineno">19542</span>&#160;        allocator-&gt;m_hDevice,</div>
+<div class="line"><a name="l19543"></a><span class="lineno">19543</span>&#160;        pBufferCreateInfo,</div>
+<div class="line"><a name="l19544"></a><span class="lineno">19544</span>&#160;        allocator-&gt;GetAllocationCallbacks(),</div>
+<div class="line"><a name="l19545"></a><span class="lineno">19545</span>&#160;        pBuffer);</div>
+<div class="line"><a name="l19546"></a><span class="lineno">19546</span>&#160;    <span class="keywordflow">if</span>(res &gt;= 0)</div>
+<div class="line"><a name="l19547"></a><span class="lineno">19547</span>&#160;    {</div>
+<div class="line"><a name="l19548"></a><span class="lineno">19548</span>&#160;        <span class="comment">// 2. vkGetBufferMemoryRequirements.</span></div>
+<div class="line"><a name="l19549"></a><span class="lineno">19549</span>&#160;        VkMemoryRequirements vkMemReq = {};</div>
+<div class="line"><a name="l19550"></a><span class="lineno">19550</span>&#160;        <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l19551"></a><span class="lineno">19551</span>&#160;        <span class="keywordtype">bool</span> prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l19552"></a><span class="lineno">19552</span>&#160;        allocator-&gt;GetBufferMemoryRequirements(*pBuffer, vkMemReq,</div>
+<div class="line"><a name="l19553"></a><span class="lineno">19553</span>&#160;            requiresDedicatedAllocation, prefersDedicatedAllocation);</div>
+<div class="line"><a name="l19554"></a><span class="lineno">19554</span>&#160; </div>
+<div class="line"><a name="l19555"></a><span class="lineno">19555</span>&#160;        <span class="comment">// 2a. Include minAlignment</span></div>
+<div class="line"><a name="l19556"></a><span class="lineno">19556</span>&#160;        vkMemReq.alignment = VMA_MAX(vkMemReq.alignment, minAlignment);</div>
+<div class="line"><a name="l19557"></a><span class="lineno">19557</span>&#160; </div>
+<div class="line"><a name="l19558"></a><span class="lineno">19558</span>&#160;        <span class="comment">// 3. Allocate memory using allocator.</span></div>
+<div class="line"><a name="l19559"></a><span class="lineno">19559</span>&#160;        res = allocator-&gt;AllocateMemory(</div>
+<div class="line"><a name="l19560"></a><span class="lineno">19560</span>&#160;            vkMemReq,</div>
+<div class="line"><a name="l19561"></a><span class="lineno">19561</span>&#160;            requiresDedicatedAllocation,</div>
+<div class="line"><a name="l19562"></a><span class="lineno">19562</span>&#160;            prefersDedicatedAllocation,</div>
+<div class="line"><a name="l19563"></a><span class="lineno">19563</span>&#160;            *pBuffer, <span class="comment">// dedicatedBuffer</span></div>
+<div class="line"><a name="l19564"></a><span class="lineno">19564</span>&#160;            pBufferCreateInfo-&gt;usage, <span class="comment">// dedicatedBufferUsage</span></div>
+<div class="line"><a name="l19565"></a><span class="lineno">19565</span>&#160;            VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
+<div class="line"><a name="l19566"></a><span class="lineno">19566</span>&#160;            *pAllocationCreateInfo,</div>
+<div class="line"><a name="l19567"></a><span class="lineno">19567</span>&#160;            VMA_SUBALLOCATION_TYPE_BUFFER,</div>
+<div class="line"><a name="l19568"></a><span class="lineno">19568</span>&#160;            1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l19569"></a><span class="lineno">19569</span>&#160;            pAllocation);</div>
+<div class="line"><a name="l19570"></a><span class="lineno">19570</span>&#160; </div>
+<div class="line"><a name="l19571"></a><span class="lineno">19571</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19572"></a><span class="lineno">19572</span>&#160;        <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19573"></a><span class="lineno">19573</span>&#160;        {</div>
+<div class="line"><a name="l19574"></a><span class="lineno">19574</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Not implemented.&quot;</span>);</div>
+<div class="line"><a name="l19575"></a><span class="lineno">19575</span>&#160;        }</div>
+<div class="line"><a name="l19576"></a><span class="lineno">19576</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19577"></a><span class="lineno">19577</span>&#160; </div>
+<div class="line"><a name="l19578"></a><span class="lineno">19578</span>&#160;        <span class="keywordflow">if</span>(res &gt;= 0)</div>
+<div class="line"><a name="l19579"></a><span class="lineno">19579</span>&#160;        {</div>
+<div class="line"><a name="l19580"></a><span class="lineno">19580</span>&#160;            <span class="comment">// 3. Bind buffer with memory.</span></div>
+<div class="line"><a name="l19581"></a><span class="lineno">19581</span>&#160;            <span class="keywordflow">if</span>((pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">VMA_ALLOCATION_CREATE_DONT_BIND_BIT</a>) == 0)</div>
+<div class="line"><a name="l19582"></a><span class="lineno">19582</span>&#160;            {</div>
+<div class="line"><a name="l19583"></a><span class="lineno">19583</span>&#160;                res = allocator-&gt;BindBufferMemory(*pAllocation, 0, *pBuffer, VMA_NULL);</div>
+<div class="line"><a name="l19584"></a><span class="lineno">19584</span>&#160;            }</div>
+<div class="line"><a name="l19585"></a><span class="lineno">19585</span>&#160;            <span class="keywordflow">if</span>(res &gt;= 0)</div>
+<div class="line"><a name="l19586"></a><span class="lineno">19586</span>&#160;            {</div>
+<div class="line"><a name="l19587"></a><span class="lineno">19587</span>&#160;                <span class="comment">// All steps succeeded.</span></div>
+<div class="line"><a name="l19588"></a><span class="lineno">19588</span>&#160;<span class="preprocessor">                #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l19589"></a><span class="lineno">19589</span>&#160;                    (*pAllocation)-&gt;InitBufferImageUsage(pBufferCreateInfo-&gt;usage);</div>
+<div class="line"><a name="l19590"></a><span class="lineno">19590</span>&#160;<span class="preprocessor">                #endif</span></div>
+<div class="line"><a name="l19591"></a><span class="lineno">19591</span>&#160;                <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL)</div>
+<div class="line"><a name="l19592"></a><span class="lineno">19592</span>&#160;                {</div>
+<div class="line"><a name="l19593"></a><span class="lineno">19593</span>&#160;                    allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
+<div class="line"><a name="l19594"></a><span class="lineno">19594</span>&#160;                }</div>
+<div class="line"><a name="l19595"></a><span class="lineno">19595</span>&#160; </div>
+<div class="line"><a name="l19596"></a><span class="lineno">19596</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l19597"></a><span class="lineno">19597</span>&#160;            }</div>
+<div class="line"><a name="l19598"></a><span class="lineno">19598</span>&#160;            allocator-&gt;FreeMemory(</div>
+<div class="line"><a name="l19599"></a><span class="lineno">19599</span>&#160;                1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l19600"></a><span class="lineno">19600</span>&#160;                pAllocation);</div>
+<div class="line"><a name="l19601"></a><span class="lineno">19601</span>&#160;            *pAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19602"></a><span class="lineno">19602</span>&#160;            (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, *pBuffer, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l19603"></a><span class="lineno">19603</span>&#160;            *pBuffer = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19604"></a><span class="lineno">19604</span>&#160;            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19605"></a><span class="lineno">19605</span>&#160;        }</div>
+<div class="line"><a name="l19606"></a><span class="lineno">19606</span>&#160;        (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, *pBuffer, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l19607"></a><span class="lineno">19607</span>&#160;        *pBuffer = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19608"></a><span class="lineno">19608</span>&#160;        <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19609"></a><span class="lineno">19609</span>&#160;    }</div>
+<div class="line"><a name="l19610"></a><span class="lineno">19610</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19611"></a><span class="lineno">19611</span>&#160;}</div>
+<div class="line"><a name="l19612"></a><span class="lineno">19612</span>&#160; </div>
+<div class="line"><a name="l19613"></a><span class="lineno">19613</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a>(</div>
+<div class="line"><a name="l19614"></a><span class="lineno">19614</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19615"></a><span class="lineno">19615</span>&#160;    VkBuffer buffer,</div>
+<div class="line"><a name="l19616"></a><span class="lineno">19616</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l19617"></a><span class="lineno">19617</span>&#160;{</div>
+<div class="line"><a name="l19618"></a><span class="lineno">19618</span>&#160;    VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l19619"></a><span class="lineno">19619</span>&#160; </div>
+<div class="line"><a name="l19620"></a><span class="lineno">19620</span>&#160;    <span class="keywordflow">if</span>(buffer == VK_NULL_HANDLE &amp;&amp; allocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l19621"></a><span class="lineno">19621</span>&#160;    {</div>
+<div class="line"><a name="l19622"></a><span class="lineno">19622</span>&#160;        <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l19623"></a><span class="lineno">19623</span>&#160;    }</div>
+<div class="line"><a name="l19624"></a><span class="lineno">19624</span>&#160; </div>
+<div class="line"><a name="l19625"></a><span class="lineno">19625</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyBuffer&quot;</span>);</div>
+<div class="line"><a name="l19626"></a><span class="lineno">19626</span>&#160; </div>
+<div class="line"><a name="l19627"></a><span class="lineno">19627</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19628"></a><span class="lineno">19628</span>&#160; </div>
+<div class="line"><a name="l19629"></a><span class="lineno">19629</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19630"></a><span class="lineno">19630</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19631"></a><span class="lineno">19631</span>&#160;    {</div>
+<div class="line"><a name="l19632"></a><span class="lineno">19632</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordDestroyBuffer(</div>
+<div class="line"><a name="l19633"></a><span class="lineno">19633</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l19634"></a><span class="lineno">19634</span>&#160;            allocation);</div>
+<div class="line"><a name="l19635"></a><span class="lineno">19635</span>&#160;    }</div>
+<div class="line"><a name="l19636"></a><span class="lineno">19636</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19637"></a><span class="lineno">19637</span>&#160; </div>
+<div class="line"><a name="l19638"></a><span class="lineno">19638</span>&#160;    <span class="keywordflow">if</span>(buffer != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l19639"></a><span class="lineno">19639</span>&#160;    {</div>
+<div class="line"><a name="l19640"></a><span class="lineno">19640</span>&#160;        (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, buffer, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l19641"></a><span class="lineno">19641</span>&#160;    }</div>
+<div class="line"><a name="l19642"></a><span class="lineno">19642</span>&#160; </div>
+<div class="line"><a name="l19643"></a><span class="lineno">19643</span>&#160;    <span class="keywordflow">if</span>(allocation != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l19644"></a><span class="lineno">19644</span>&#160;    {</div>
+<div class="line"><a name="l19645"></a><span class="lineno">19645</span>&#160;        allocator-&gt;FreeMemory(</div>
+<div class="line"><a name="l19646"></a><span class="lineno">19646</span>&#160;            1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l19647"></a><span class="lineno">19647</span>&#160;            &amp;allocation);</div>
+<div class="line"><a name="l19648"></a><span class="lineno">19648</span>&#160;    }</div>
+<div class="line"><a name="l19649"></a><span class="lineno">19649</span>&#160;}</div>
+<div class="line"><a name="l19650"></a><span class="lineno">19650</span>&#160; </div>
+<div class="line"><a name="l19651"></a><span class="lineno">19651</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a>(</div>
+<div class="line"><a name="l19652"></a><span class="lineno">19652</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19653"></a><span class="lineno">19653</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo* pImageCreateInfo,</div>
+<div class="line"><a name="l19654"></a><span class="lineno">19654</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>* pAllocationCreateInfo,</div>
+<div class="line"><a name="l19655"></a><span class="lineno">19655</span>&#160;    VkImage* pImage,</div>
+<div class="line"><a name="l19656"></a><span class="lineno">19656</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
+<div class="line"><a name="l19657"></a><span class="lineno">19657</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
+<div class="line"><a name="l19658"></a><span class="lineno">19658</span>&#160;{</div>
+<div class="line"><a name="l19659"></a><span class="lineno">19659</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pImageCreateInfo &amp;&amp; pAllocationCreateInfo &amp;&amp; pImage &amp;&amp; pAllocation);</div>
+<div class="line"><a name="l19660"></a><span class="lineno">19660</span>&#160; </div>
+<div class="line"><a name="l19661"></a><span class="lineno">19661</span>&#160;    <span class="keywordflow">if</span>(pImageCreateInfo-&gt;extent.width == 0 ||</div>
+<div class="line"><a name="l19662"></a><span class="lineno">19662</span>&#160;        pImageCreateInfo-&gt;extent.height == 0 ||</div>
+<div class="line"><a name="l19663"></a><span class="lineno">19663</span>&#160;        pImageCreateInfo-&gt;extent.depth == 0 ||</div>
+<div class="line"><a name="l19664"></a><span class="lineno">19664</span>&#160;        pImageCreateInfo-&gt;mipLevels == 0 ||</div>
+<div class="line"><a name="l19665"></a><span class="lineno">19665</span>&#160;        pImageCreateInfo-&gt;arrayLayers == 0)</div>
+<div class="line"><a name="l19666"></a><span class="lineno">19666</span>&#160;    {</div>
+<div class="line"><a name="l19667"></a><span class="lineno">19667</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
+<div class="line"><a name="l19668"></a><span class="lineno">19668</span>&#160;    }</div>
+<div class="line"><a name="l19669"></a><span class="lineno">19669</span>&#160; </div>
+<div class="line"><a name="l19670"></a><span class="lineno">19670</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreateImage&quot;</span>);</div>
+<div class="line"><a name="l19671"></a><span class="lineno">19671</span>&#160; </div>
+<div class="line"><a name="l19672"></a><span class="lineno">19672</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19673"></a><span class="lineno">19673</span>&#160; </div>
+<div class="line"><a name="l19674"></a><span class="lineno">19674</span>&#160;    *pImage = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19675"></a><span class="lineno">19675</span>&#160;    *pAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19676"></a><span class="lineno">19676</span>&#160; </div>
+<div class="line"><a name="l19677"></a><span class="lineno">19677</span>&#160;    <span class="comment">// 1. Create VkImage.</span></div>
+<div class="line"><a name="l19678"></a><span class="lineno">19678</span>&#160;    VkResult res = (*allocator-&gt;GetVulkanFunctions().vkCreateImage)(</div>
+<div class="line"><a name="l19679"></a><span class="lineno">19679</span>&#160;        allocator-&gt;m_hDevice,</div>
+<div class="line"><a name="l19680"></a><span class="lineno">19680</span>&#160;        pImageCreateInfo,</div>
+<div class="line"><a name="l19681"></a><span class="lineno">19681</span>&#160;        allocator-&gt;GetAllocationCallbacks(),</div>
+<div class="line"><a name="l19682"></a><span class="lineno">19682</span>&#160;        pImage);</div>
+<div class="line"><a name="l19683"></a><span class="lineno">19683</span>&#160;    <span class="keywordflow">if</span>(res &gt;= 0)</div>
+<div class="line"><a name="l19684"></a><span class="lineno">19684</span>&#160;    {</div>
+<div class="line"><a name="l19685"></a><span class="lineno">19685</span>&#160;        VmaSuballocationType suballocType = pImageCreateInfo-&gt;tiling == VK_IMAGE_TILING_OPTIMAL ?</div>
+<div class="line"><a name="l19686"></a><span class="lineno">19686</span>&#160;            VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL :</div>
+<div class="line"><a name="l19687"></a><span class="lineno">19687</span>&#160;            VMA_SUBALLOCATION_TYPE_IMAGE_LINEAR;</div>
+<div class="line"><a name="l19688"></a><span class="lineno">19688</span>&#160; </div>
+<div class="line"><a name="l19689"></a><span class="lineno">19689</span>&#160;        <span class="comment">// 2. Allocate memory using allocator.</span></div>
+<div class="line"><a name="l19690"></a><span class="lineno">19690</span>&#160;        VkMemoryRequirements vkMemReq = {};</div>
+<div class="line"><a name="l19691"></a><span class="lineno">19691</span>&#160;        <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l19692"></a><span class="lineno">19692</span>&#160;        <span class="keywordtype">bool</span> prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l19693"></a><span class="lineno">19693</span>&#160;        allocator-&gt;GetImageMemoryRequirements(*pImage, vkMemReq,</div>
+<div class="line"><a name="l19694"></a><span class="lineno">19694</span>&#160;            requiresDedicatedAllocation, prefersDedicatedAllocation);</div>
+<div class="line"><a name="l19695"></a><span class="lineno">19695</span>&#160; </div>
+<div class="line"><a name="l19696"></a><span class="lineno">19696</span>&#160;        res = allocator-&gt;AllocateMemory(</div>
+<div class="line"><a name="l19697"></a><span class="lineno">19697</span>&#160;            vkMemReq,</div>
+<div class="line"><a name="l19698"></a><span class="lineno">19698</span>&#160;            requiresDedicatedAllocation,</div>
+<div class="line"><a name="l19699"></a><span class="lineno">19699</span>&#160;            prefersDedicatedAllocation,</div>
+<div class="line"><a name="l19700"></a><span class="lineno">19700</span>&#160;            VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
+<div class="line"><a name="l19701"></a><span class="lineno">19701</span>&#160;            UINT32_MAX, <span class="comment">// dedicatedBufferUsage</span></div>
+<div class="line"><a name="l19702"></a><span class="lineno">19702</span>&#160;            *pImage, <span class="comment">// dedicatedImage</span></div>
+<div class="line"><a name="l19703"></a><span class="lineno">19703</span>&#160;            *pAllocationCreateInfo,</div>
+<div class="line"><a name="l19704"></a><span class="lineno">19704</span>&#160;            suballocType,</div>
+<div class="line"><a name="l19705"></a><span class="lineno">19705</span>&#160;            1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l19706"></a><span class="lineno">19706</span>&#160;            pAllocation);</div>
+<div class="line"><a name="l19707"></a><span class="lineno">19707</span>&#160; </div>
+<div class="line"><a name="l19708"></a><span class="lineno">19708</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19709"></a><span class="lineno">19709</span>&#160;        <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19710"></a><span class="lineno">19710</span>&#160;        {</div>
+<div class="line"><a name="l19711"></a><span class="lineno">19711</span>&#160;            allocator-&gt;GetRecorder()-&gt;RecordCreateImage(</div>
+<div class="line"><a name="l19712"></a><span class="lineno">19712</span>&#160;                allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l19713"></a><span class="lineno">19713</span>&#160;                *pImageCreateInfo,</div>
+<div class="line"><a name="l19714"></a><span class="lineno">19714</span>&#160;                *pAllocationCreateInfo,</div>
+<div class="line"><a name="l19715"></a><span class="lineno">19715</span>&#160;                *pAllocation);</div>
+<div class="line"><a name="l19716"></a><span class="lineno">19716</span>&#160;        }</div>
+<div class="line"><a name="l19717"></a><span class="lineno">19717</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19718"></a><span class="lineno">19718</span>&#160; </div>
+<div class="line"><a name="l19719"></a><span class="lineno">19719</span>&#160;        <span class="keywordflow">if</span>(res &gt;= 0)</div>
+<div class="line"><a name="l19720"></a><span class="lineno">19720</span>&#160;        {</div>
+<div class="line"><a name="l19721"></a><span class="lineno">19721</span>&#160;            <span class="comment">// 3. Bind image with memory.</span></div>
+<div class="line"><a name="l19722"></a><span class="lineno">19722</span>&#160;            <span class="keywordflow">if</span>((pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">VMA_ALLOCATION_CREATE_DONT_BIND_BIT</a>) == 0)</div>
+<div class="line"><a name="l19723"></a><span class="lineno">19723</span>&#160;            {</div>
+<div class="line"><a name="l19724"></a><span class="lineno">19724</span>&#160;                res = allocator-&gt;BindImageMemory(*pAllocation, 0, *pImage, VMA_NULL);</div>
+<div class="line"><a name="l19725"></a><span class="lineno">19725</span>&#160;            }</div>
+<div class="line"><a name="l19726"></a><span class="lineno">19726</span>&#160;            <span class="keywordflow">if</span>(res &gt;= 0)</div>
+<div class="line"><a name="l19727"></a><span class="lineno">19727</span>&#160;            {</div>
+<div class="line"><a name="l19728"></a><span class="lineno">19728</span>&#160;                <span class="comment">// All steps succeeded.</span></div>
+<div class="line"><a name="l19729"></a><span class="lineno">19729</span>&#160;<span class="preprocessor">                #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l19730"></a><span class="lineno">19730</span>&#160;                    (*pAllocation)-&gt;InitBufferImageUsage(pImageCreateInfo-&gt;usage);</div>
+<div class="line"><a name="l19731"></a><span class="lineno">19731</span>&#160;<span class="preprocessor">                #endif</span></div>
+<div class="line"><a name="l19732"></a><span class="lineno">19732</span>&#160;                <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL)</div>
+<div class="line"><a name="l19733"></a><span class="lineno">19733</span>&#160;                {</div>
+<div class="line"><a name="l19734"></a><span class="lineno">19734</span>&#160;                    allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
+<div class="line"><a name="l19735"></a><span class="lineno">19735</span>&#160;                }</div>
+<div class="line"><a name="l19736"></a><span class="lineno">19736</span>&#160; </div>
+<div class="line"><a name="l19737"></a><span class="lineno">19737</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l19738"></a><span class="lineno">19738</span>&#160;            }</div>
+<div class="line"><a name="l19739"></a><span class="lineno">19739</span>&#160;            allocator-&gt;FreeMemory(</div>
+<div class="line"><a name="l19740"></a><span class="lineno">19740</span>&#160;                1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l19741"></a><span class="lineno">19741</span>&#160;                pAllocation);</div>
+<div class="line"><a name="l19742"></a><span class="lineno">19742</span>&#160;            *pAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19743"></a><span class="lineno">19743</span>&#160;            (*allocator-&gt;GetVulkanFunctions().vkDestroyImage)(allocator-&gt;m_hDevice, *pImage, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l19744"></a><span class="lineno">19744</span>&#160;            *pImage = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19745"></a><span class="lineno">19745</span>&#160;            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19746"></a><span class="lineno">19746</span>&#160;        }</div>
+<div class="line"><a name="l19747"></a><span class="lineno">19747</span>&#160;        (*allocator-&gt;GetVulkanFunctions().vkDestroyImage)(allocator-&gt;m_hDevice, *pImage, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l19748"></a><span class="lineno">19748</span>&#160;        *pImage = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l19749"></a><span class="lineno">19749</span>&#160;        <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19750"></a><span class="lineno">19750</span>&#160;    }</div>
+<div class="line"><a name="l19751"></a><span class="lineno">19751</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l19752"></a><span class="lineno">19752</span>&#160;}</div>
+<div class="line"><a name="l19753"></a><span class="lineno">19753</span>&#160; </div>
+<div class="line"><a name="l19754"></a><span class="lineno">19754</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e">vmaDestroyImage</a>(</div>
+<div class="line"><a name="l19755"></a><span class="lineno">19755</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l19756"></a><span class="lineno">19756</span>&#160;    VkImage image,</div>
+<div class="line"><a name="l19757"></a><span class="lineno">19757</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l19758"></a><span class="lineno">19758</span>&#160;{</div>
+<div class="line"><a name="l19759"></a><span class="lineno">19759</span>&#160;    VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l19760"></a><span class="lineno">19760</span>&#160; </div>
+<div class="line"><a name="l19761"></a><span class="lineno">19761</span>&#160;    <span class="keywordflow">if</span>(image == VK_NULL_HANDLE &amp;&amp; allocation == VK_NULL_HANDLE)</div>
+<div class="line"><a name="l19762"></a><span class="lineno">19762</span>&#160;    {</div>
+<div class="line"><a name="l19763"></a><span class="lineno">19763</span>&#160;        <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l19764"></a><span class="lineno">19764</span>&#160;    }</div>
+<div class="line"><a name="l19765"></a><span class="lineno">19765</span>&#160; </div>
+<div class="line"><a name="l19766"></a><span class="lineno">19766</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyImage&quot;</span>);</div>
+<div class="line"><a name="l19767"></a><span class="lineno">19767</span>&#160; </div>
+<div class="line"><a name="l19768"></a><span class="lineno">19768</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l19769"></a><span class="lineno">19769</span>&#160; </div>
+<div class="line"><a name="l19770"></a><span class="lineno">19770</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l19771"></a><span class="lineno">19771</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l19772"></a><span class="lineno">19772</span>&#160;    {</div>
+<div class="line"><a name="l19773"></a><span class="lineno">19773</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordDestroyImage(</div>
+<div class="line"><a name="l19774"></a><span class="lineno">19774</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l19775"></a><span class="lineno">19775</span>&#160;            allocation);</div>
+<div class="line"><a name="l19776"></a><span class="lineno">19776</span>&#160;    }</div>
+<div class="line"><a name="l19777"></a><span class="lineno">19777</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l19778"></a><span class="lineno">19778</span>&#160; </div>
+<div class="line"><a name="l19779"></a><span class="lineno">19779</span>&#160;    <span class="keywordflow">if</span>(image != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l19780"></a><span class="lineno">19780</span>&#160;    {</div>
+<div class="line"><a name="l19781"></a><span class="lineno">19781</span>&#160;        (*allocator-&gt;GetVulkanFunctions().vkDestroyImage)(allocator-&gt;m_hDevice, image, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l19782"></a><span class="lineno">19782</span>&#160;    }</div>
+<div class="line"><a name="l19783"></a><span class="lineno">19783</span>&#160;    <span class="keywordflow">if</span>(allocation != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l19784"></a><span class="lineno">19784</span>&#160;    {</div>
+<div class="line"><a name="l19785"></a><span class="lineno">19785</span>&#160;        allocator-&gt;FreeMemory(</div>
+<div class="line"><a name="l19786"></a><span class="lineno">19786</span>&#160;            1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l19787"></a><span class="lineno">19787</span>&#160;            &amp;allocation);</div>
+<div class="line"><a name="l19788"></a><span class="lineno">19788</span>&#160;    }</div>
+<div class="line"><a name="l19789"></a><span class="lineno">19789</span>&#160;}</div>
+<div class="line"><a name="l19790"></a><span class="lineno">19790</span>&#160; </div>
+<div class="line"><a name="l19791"></a><span class="lineno">19791</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// #ifdef VMA_IMPLEMENTATION</span></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2897</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a3bf940c0271d85d6ba32a4d820075055"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">VmaAllocationCreateInfo::memoryTypeBits</a></div><div class="ttdeci">uint32_t memoryTypeBits</div><div class="ttdoc">Bitmask containing one bit set for every memory type acceptable for this allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2923</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a6272c0555cfd1fe28bff1afeb6190150"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">VmaAllocationCreateInfo::pool</a></div><div class="ttdeci">VmaPool pool</div><div class="ttdoc">Pool that this allocation should be created in.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2929</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a7fe8d81a1ad10b2a2faacacee5b15d6d"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">VmaAllocationCreateInfo::preferredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags preferredFlags</div><div class="ttdoc">Flags that preferably should be set in a memory type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2915</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a8259e85c272683434f4abb4ddddffe19"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">VmaAllocationCreateInfo::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Custom general-purpose pointer that will be stored in VmaAllocation, can be read as VmaAllocationInfo...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2936</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a9166390303ff42d783305bc31c2b6b90"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">VmaAllocationCreateInfo::requiredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags requiredFlags</div><div class="ttdoc">Flags that must be set in a Memory Type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2910</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a983d39e1a2e63649d78a960aa2fdd0f7"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7">VmaAllocationCreateInfo::priority</a></div><div class="ttdeci">float priority</div><div class="ttdoc">A floating-point value between 0 and 1, indicating the priority of the allocation relative to other m...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2943</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2905</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2899</div></div>
 <div class="ttc" id="astruct_vma_allocation_html"><div class="ttname"><a href="struct_vma_allocation.html">VmaAllocation</a></div><div class="ttdoc">Represents single memory allocation.</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3267</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html_a4a3c732388dbdc7a23f9365b00825268"><div class="ttname"><a href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">VmaAllocationInfo::offset</a></div><div class="ttdeci">VkDeviceSize offset</div><div class="ttdoc">Offset in VkDeviceMemory object to the beginning of this allocation, in bytes. (deviceMemory,...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3291</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html_a5eeffbe2d2f30f53370ff14aefbadbe2"><div class="ttname"><a href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">VmaAllocationInfo::pMappedData</a></div><div class="ttdeci">void * pMappedData</div><div class="ttdoc">Pointer to the beginning of this allocation as mapped data.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3311</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html_a7f6b0aa58c135e488e6b40a388dad9d5"><div class="ttname"><a href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">VmaAllocationInfo::memoryType</a></div><div class="ttdeci">uint32_t memoryType</div><div class="ttdoc">Memory type index that this allocation was allocated from.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3272</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html_aac76d113a6a5ccbb09fea00fb25fd18f"><div class="ttname"><a href="struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f">VmaAllocationInfo::size</a></div><div class="ttdeci">VkDeviceSize size</div><div class="ttdoc">Size of this allocation, in bytes.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3302</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html_adc507656149c04de7ed95d0042ba2a13"><div class="ttname"><a href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">VmaAllocationInfo::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vma...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3316</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html_ae0bfb7dfdf79a76ffefc9a94677a2f67"><div class="ttname"><a href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67">VmaAllocationInfo::deviceMemory</a></div><div class="ttdeci">VkDeviceMemory deviceMemory</div><div class="ttdoc">Handle to Vulkan memory object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3281</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html"><div class="ttname"><a href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a></div><div class="ttdoc">Description of a Allocator to be created.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2422</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_a08230f04ae6ccf8a78150a9e829a7156"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156">VmaAllocatorCreateInfo::physicalDevice</a></div><div class="ttdeci">VkPhysicalDevice physicalDevice</div><div class="ttdoc">Vulkan physical device.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2427</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_a21ea188dd212b8171cb9ecbed4a2a3a7"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a21ea188dd212b8171cb9ecbed4a2a3a7">VmaAllocatorCreateInfo::frameInUseCount</a></div><div class="ttdeci">uint32_t frameInUseCount</div><div class="ttdoc">Maximum number of additional frames that are in use at the same time as current frame.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2453</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_a31c192aa6cbffa33279f6d9f0c47c44b"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b">VmaAllocatorCreateInfo::pHeapSizeLimit</a></div><div class="ttdeci">const VkDeviceSize * pHeapSizeLimit</div><div class="ttdoc">Either null or a pointer to an array of limits on maximum number of bytes that can be allocated out o...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2478</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_a392ea2ecbaff93f91a7c49f735ad4346"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">VmaAllocatorCreateInfo::flags</a></div><div class="ttdeci">VmaAllocatorCreateFlags flags</div><div class="ttdoc">Flags for created allocator. Use VmaAllocatorCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2424</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_a3dc197be3227da7338b1643f70db36bd"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd">VmaAllocatorCreateInfo::pVulkanFunctions</a></div><div class="ttdeci">const VmaVulkanFunctions * pVulkanFunctions</div><div class="ttdoc">Pointers to Vulkan functions. Can be null.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2484</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_a6e409087e3be55400d0e4ccbe43c608d"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d">VmaAllocatorCreateInfo::pAllocationCallbacks</a></div><div class="ttdeci">const VkAllocationCallbacks * pAllocationCallbacks</div><div class="ttdoc">Custom CPU memory allocation callbacks. Optional.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2436</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_a70dd42e29b1df1d1b9b61532ae0b370b"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a70dd42e29b1df1d1b9b61532ae0b370b">VmaAllocatorCreateInfo::instance</a></div><div class="ttdeci">VkInstance instance</div><div class="ttdoc">Handle to Vulkan instance object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2496</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_a8e4714298e3121cdd8b214a1ae7a637a"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a">VmaAllocatorCreateInfo::preferredLargeHeapBlockSize</a></div><div class="ttdeci">VkDeviceSize preferredLargeHeapBlockSize</div><div class="ttdoc">Preferred size of a single VkDeviceMemory block to be allocated from large heaps &gt; 1 GiB....</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2433</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_ace2aa4877b16a42b0b7673d4e26000ee"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee">VmaAllocatorCreateInfo::pRecordSettings</a></div><div class="ttdeci">const VmaRecordSettings * pRecordSettings</div><div class="ttdoc">Parameters for recording of VMA calls. Can be null.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2491</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_ad924ddd77b04039c88d0c09b0ffcd500"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500">VmaAllocatorCreateInfo::device</a></div><div class="ttdeci">VkDevice device</div><div class="ttdoc">Vulkan device.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2430</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_ae0ffc55139b54520a6bb704b29ffc285"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">VmaAllocatorCreateInfo::vulkanApiVersion</a></div><div class="ttdeci">uint32_t vulkanApiVersion</div><div class="ttdoc">Optional. The highest version of Vulkan that the application is designed to use.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2505</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_ae8f0db05e5cb4c43d7713bf4a49a736b"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ae8f0db05e5cb4c43d7713bf4a49a736b">VmaAllocatorCreateInfo::pTypeExternalMemoryHandleTypes</a></div><div class="ttdeci">const VkExternalMemoryHandleTypeFlagsKHR * pTypeExternalMemoryHandleTypes</div><div class="ttdoc">Either null or a pointer to an array of external memory handle types for each Vulkan memory type.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2516</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_af1380969b5e1ea4c3184a877892d260e"><div class="ttname"><a href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e">VmaAllocatorCreateInfo::pDeviceMemoryCallbacks</a></div><div class="ttdeci">const VmaDeviceMemoryCallbacks * pDeviceMemoryCallbacks</div><div class="ttdoc">Informative callbacks for vkAllocateMemory, vkFreeMemory. Optional.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2439</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3264</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html_a4a3c732388dbdc7a23f9365b00825268"><div class="ttname"><a href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">VmaAllocationInfo::offset</a></div><div class="ttdeci">VkDeviceSize offset</div><div class="ttdoc">Offset in VkDeviceMemory object to the beginning of this allocation, in bytes. (deviceMemory,...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3288</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html_a5eeffbe2d2f30f53370ff14aefbadbe2"><div class="ttname"><a href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">VmaAllocationInfo::pMappedData</a></div><div class="ttdeci">void * pMappedData</div><div class="ttdoc">Pointer to the beginning of this allocation as mapped data.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3308</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html_a7f6b0aa58c135e488e6b40a388dad9d5"><div class="ttname"><a href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">VmaAllocationInfo::memoryType</a></div><div class="ttdeci">uint32_t memoryType</div><div class="ttdoc">Memory type index that this allocation was allocated from.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3269</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html_aac76d113a6a5ccbb09fea00fb25fd18f"><div class="ttname"><a href="struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f">VmaAllocationInfo::size</a></div><div class="ttdeci">VkDeviceSize size</div><div class="ttdoc">Size of this allocation, in bytes.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3299</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html_adc507656149c04de7ed95d0042ba2a13"><div class="ttname"><a href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">VmaAllocationInfo::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vma...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3313</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html_ae0bfb7dfdf79a76ffefc9a94677a2f67"><div class="ttname"><a href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67">VmaAllocationInfo::deviceMemory</a></div><div class="ttdeci">VkDeviceMemory deviceMemory</div><div class="ttdoc">Handle to Vulkan memory object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3278</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html"><div class="ttname"><a href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a></div><div class="ttdoc">Description of a Allocator to be created.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2419</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_a08230f04ae6ccf8a78150a9e829a7156"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156">VmaAllocatorCreateInfo::physicalDevice</a></div><div class="ttdeci">VkPhysicalDevice physicalDevice</div><div class="ttdoc">Vulkan physical device.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2424</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_a21ea188dd212b8171cb9ecbed4a2a3a7"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a21ea188dd212b8171cb9ecbed4a2a3a7">VmaAllocatorCreateInfo::frameInUseCount</a></div><div class="ttdeci">uint32_t frameInUseCount</div><div class="ttdoc">Maximum number of additional frames that are in use at the same time as current frame.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2450</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_a31c192aa6cbffa33279f6d9f0c47c44b"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b">VmaAllocatorCreateInfo::pHeapSizeLimit</a></div><div class="ttdeci">const VkDeviceSize * pHeapSizeLimit</div><div class="ttdoc">Either null or a pointer to an array of limits on maximum number of bytes that can be allocated out o...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2475</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_a392ea2ecbaff93f91a7c49f735ad4346"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">VmaAllocatorCreateInfo::flags</a></div><div class="ttdeci">VmaAllocatorCreateFlags flags</div><div class="ttdoc">Flags for created allocator. Use VmaAllocatorCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2421</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_a3dc197be3227da7338b1643f70db36bd"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd">VmaAllocatorCreateInfo::pVulkanFunctions</a></div><div class="ttdeci">const VmaVulkanFunctions * pVulkanFunctions</div><div class="ttdoc">Pointers to Vulkan functions. Can be null.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2481</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_a6e409087e3be55400d0e4ccbe43c608d"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d">VmaAllocatorCreateInfo::pAllocationCallbacks</a></div><div class="ttdeci">const VkAllocationCallbacks * pAllocationCallbacks</div><div class="ttdoc">Custom CPU memory allocation callbacks. Optional.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2433</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_a70dd42e29b1df1d1b9b61532ae0b370b"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a70dd42e29b1df1d1b9b61532ae0b370b">VmaAllocatorCreateInfo::instance</a></div><div class="ttdeci">VkInstance instance</div><div class="ttdoc">Handle to Vulkan instance object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2493</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_a8e4714298e3121cdd8b214a1ae7a637a"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a">VmaAllocatorCreateInfo::preferredLargeHeapBlockSize</a></div><div class="ttdeci">VkDeviceSize preferredLargeHeapBlockSize</div><div class="ttdoc">Preferred size of a single VkDeviceMemory block to be allocated from large heaps &gt; 1 GiB....</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2430</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_ace2aa4877b16a42b0b7673d4e26000ee"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ace2aa4877b16a42b0b7673d4e26000ee">VmaAllocatorCreateInfo::pRecordSettings</a></div><div class="ttdeci">const VmaRecordSettings * pRecordSettings</div><div class="ttdoc">Parameters for recording of VMA calls. Can be null.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2488</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_ad924ddd77b04039c88d0c09b0ffcd500"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500">VmaAllocatorCreateInfo::device</a></div><div class="ttdeci">VkDevice device</div><div class="ttdoc">Vulkan device.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2427</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_ae0ffc55139b54520a6bb704b29ffc285"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">VmaAllocatorCreateInfo::vulkanApiVersion</a></div><div class="ttdeci">uint32_t vulkanApiVersion</div><div class="ttdoc">Optional. The highest version of Vulkan that the application is designed to use.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2502</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_ae8f0db05e5cb4c43d7713bf4a49a736b"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ae8f0db05e5cb4c43d7713bf4a49a736b">VmaAllocatorCreateInfo::pTypeExternalMemoryHandleTypes</a></div><div class="ttdeci">const VkExternalMemoryHandleTypeFlagsKHR * pTypeExternalMemoryHandleTypes</div><div class="ttdoc">Either null or a pointer to an array of external memory handle types for each Vulkan memory type.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2513</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_af1380969b5e1ea4c3184a877892d260e"><div class="ttname"><a href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e">VmaAllocatorCreateInfo::pDeviceMemoryCallbacks</a></div><div class="ttdeci">const VmaDeviceMemoryCallbacks * pDeviceMemoryCallbacks</div><div class="ttdoc">Informative callbacks for vkAllocateMemory, vkFreeMemory. Optional.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2436</div></div>
 <div class="ttc" id="astruct_vma_allocator_html"><div class="ttname"><a href="struct_vma_allocator.html">VmaAllocator</a></div><div class="ttdoc">Represents main object of this library initialized.</div></div>
-<div class="ttc" id="astruct_vma_allocator_info_html"><div class="ttname"><a href="struct_vma_allocator_info.html">VmaAllocatorInfo</a></div><div class="ttdoc">Information about existing VmaAllocator object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2532</div></div>
-<div class="ttc" id="astruct_vma_allocator_info_html_a012b4c485bf3b0ea8921352c5ee0c357"><div class="ttname"><a href="struct_vma_allocator_info.html#a012b4c485bf3b0ea8921352c5ee0c357">VmaAllocatorInfo::device</a></div><div class="ttdeci">VkDevice device</div><div class="ttdoc">Handle to Vulkan device object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2547</div></div>
-<div class="ttc" id="astruct_vma_allocator_info_html_a2ed6a4d2d3fea039d66a13f15d0ce5fe"><div class="ttname"><a href="struct_vma_allocator_info.html#a2ed6a4d2d3fea039d66a13f15d0ce5fe">VmaAllocatorInfo::instance</a></div><div class="ttdeci">VkInstance instance</div><div class="ttdoc">Handle to Vulkan instance object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2537</div></div>
-<div class="ttc" id="astruct_vma_allocator_info_html_aba2b703f96e51d567717e1fb2935b47a"><div class="ttname"><a href="struct_vma_allocator_info.html#aba2b703f96e51d567717e1fb2935b47a">VmaAllocatorInfo::physicalDevice</a></div><div class="ttdeci">VkPhysicalDevice physicalDevice</div><div class="ttdoc">Handle to Vulkan physical device object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2542</div></div>
-<div class="ttc" id="astruct_vma_budget_html"><div class="ttname"><a href="struct_vma_budget.html">VmaBudget</a></div><div class="ttdoc">Statistics of current memory usage and available budget, in bytes, for specific memory heap.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2638</div></div>
-<div class="ttc" id="astruct_vma_budget_html_a58b492901baab685f466199124e514a0"><div class="ttname"><a href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">VmaBudget::blockBytes</a></div><div class="ttdeci">VkDeviceSize blockBytes</div><div class="ttdoc">Sum size of all VkDeviceMemory blocks allocated from particular heap, in bytes.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2641</div></div>
-<div class="ttc" id="astruct_vma_budget_html_a7e2a6583ebd63e194951c542563804d8"><div class="ttname"><a href="struct_vma_budget.html#a7e2a6583ebd63e194951c542563804d8">VmaBudget::allocationBytes</a></div><div class="ttdeci">VkDeviceSize allocationBytes</div><div class="ttdoc">Sum size of all allocations created in particular heap, in bytes.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2652</div></div>
-<div class="ttc" id="astruct_vma_budget_html_a84dd1ecca8b0110259eb206dbadb11f6"><div class="ttname"><a href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">VmaBudget::usage</a></div><div class="ttdeci">VkDeviceSize usage</div><div class="ttdoc">Estimated current memory usage of the program, in bytes.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2662</div></div>
-<div class="ttc" id="astruct_vma_budget_html_ab82e1d1754c2d210d0bdf90220bc6cdd"><div class="ttname"><a href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">VmaBudget::budget</a></div><div class="ttdeci">VkDeviceSize budget</div><div class="ttdoc">Estimated amount of memory available to the program, in bytes.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2673</div></div>
+<div class="ttc" id="astruct_vma_allocator_info_html"><div class="ttname"><a href="struct_vma_allocator_info.html">VmaAllocatorInfo</a></div><div class="ttdoc">Information about existing VmaAllocator object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2529</div></div>
+<div class="ttc" id="astruct_vma_allocator_info_html_a012b4c485bf3b0ea8921352c5ee0c357"><div class="ttname"><a href="struct_vma_allocator_info.html#a012b4c485bf3b0ea8921352c5ee0c357">VmaAllocatorInfo::device</a></div><div class="ttdeci">VkDevice device</div><div class="ttdoc">Handle to Vulkan device object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2544</div></div>
+<div class="ttc" id="astruct_vma_allocator_info_html_a2ed6a4d2d3fea039d66a13f15d0ce5fe"><div class="ttname"><a href="struct_vma_allocator_info.html#a2ed6a4d2d3fea039d66a13f15d0ce5fe">VmaAllocatorInfo::instance</a></div><div class="ttdeci">VkInstance instance</div><div class="ttdoc">Handle to Vulkan instance object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2534</div></div>
+<div class="ttc" id="astruct_vma_allocator_info_html_aba2b703f96e51d567717e1fb2935b47a"><div class="ttname"><a href="struct_vma_allocator_info.html#aba2b703f96e51d567717e1fb2935b47a">VmaAllocatorInfo::physicalDevice</a></div><div class="ttdeci">VkPhysicalDevice physicalDevice</div><div class="ttdoc">Handle to Vulkan physical device object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2539</div></div>
+<div class="ttc" id="astruct_vma_budget_html"><div class="ttname"><a href="struct_vma_budget.html">VmaBudget</a></div><div class="ttdoc">Statistics of current memory usage and available budget, in bytes, for specific memory heap.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2635</div></div>
+<div class="ttc" id="astruct_vma_budget_html_a58b492901baab685f466199124e514a0"><div class="ttname"><a href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">VmaBudget::blockBytes</a></div><div class="ttdeci">VkDeviceSize blockBytes</div><div class="ttdoc">Sum size of all VkDeviceMemory blocks allocated from particular heap, in bytes.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2638</div></div>
+<div class="ttc" id="astruct_vma_budget_html_a7e2a6583ebd63e194951c542563804d8"><div class="ttname"><a href="struct_vma_budget.html#a7e2a6583ebd63e194951c542563804d8">VmaBudget::allocationBytes</a></div><div class="ttdeci">VkDeviceSize allocationBytes</div><div class="ttdoc">Sum size of all allocations created in particular heap, in bytes.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2649</div></div>
+<div class="ttc" id="astruct_vma_budget_html_a84dd1ecca8b0110259eb206dbadb11f6"><div class="ttname"><a href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">VmaBudget::usage</a></div><div class="ttdeci">VkDeviceSize usage</div><div class="ttdoc">Estimated current memory usage of the program, in bytes.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2659</div></div>
+<div class="ttc" id="astruct_vma_budget_html_ab82e1d1754c2d210d0bdf90220bc6cdd"><div class="ttname"><a href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">VmaBudget::budget</a></div><div class="ttdeci">VkDeviceSize budget</div><div class="ttdoc">Estimated amount of memory available to the program, in bytes.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2670</div></div>
 <div class="ttc" id="astruct_vma_defragmentation_context_html"><div class="ttname"><a href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a></div><div class="ttdoc">Represents Opaque object that represents started defragmentation process.</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html"><div class="ttname"><a href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a></div><div class="ttdoc">Parameters for defragmentation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3666</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a3c9c6aa5c97d5670f8e362b3a6f3029b"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b">VmaDefragmentationInfo2::pPools</a></div><div class="ttdeci">const VmaPool * pPools</div><div class="ttdoc">Either null or pointer to array of pools to be defragmented.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3706</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a3cf86ab32c1da779b4923d301a3056ba"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">VmaDefragmentationInfo2::allocationCount</a></div><div class="ttdeci">uint32_t allocationCount</div><div class="ttdoc">Number of allocations in pAllocations array.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3672</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a40d53d33e71ba0b66f844ed63c05a3f6"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6">VmaDefragmentationInfo2::maxGpuAllocationsToMove</a></div><div class="ttdeci">uint32_t maxGpuAllocationsToMove</div><div class="ttdoc">Maximum number of allocations that can be moved to a different place using transfers on GPU side,...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3726</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a4ddbc898d0afe1518f863a3763628f08"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08">VmaDefragmentationInfo2::maxGpuBytesToMove</a></div><div class="ttdeci">VkDeviceSize maxGpuBytesToMove</div><div class="ttdoc">Maximum total numbers of bytes that can be copied while moving allocations to different places using ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3721</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a53e844ee5633e229cf6daf14b2d9fff9"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">VmaDefragmentationInfo2::flags</a></div><div class="ttdeci">VmaDefragmentationFlags flags</div><div class="ttdoc">Reserved for future use. Should be 0.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3669</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a76d51a644dc7f5405d0cdd0025ecd0cc"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">VmaDefragmentationInfo2::pAllocationsChanged</a></div><div class="ttdeci">VkBool32 * pAllocationsChanged</div><div class="ttdoc">Optional, output. Pointer to array that will be filled with information whether the allocation at cer...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3687</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a7e70aa2a1081d849dcc7829b19d3ec9d"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">VmaDefragmentationInfo2::poolCount</a></div><div class="ttdeci">uint32_t poolCount</div><div class="ttdoc">Numer of pools in pPools array.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3690</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a7f71f39590c5316771493d2333f9c1bd"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">VmaDefragmentationInfo2::commandBuffer</a></div><div class="ttdeci">VkCommandBuffer commandBuffer</div><div class="ttdoc">Optional. Command buffer where GPU copy commands will be posted.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3735</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a94c2c7223d52878445a8cccce396b671"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">VmaDefragmentationInfo2::maxCpuAllocationsToMove</a></div><div class="ttdeci">uint32_t maxCpuAllocationsToMove</div><div class="ttdoc">Maximum number of allocations that can be moved to a different place using transfers on CPU side,...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3716</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_ab6d288f29d028156cf73542d630a2e32"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">VmaDefragmentationInfo2::pAllocations</a></div><div class="ttdeci">const VmaAllocation * pAllocations</div><div class="ttdoc">Pointer to array of allocations that can be defragmented.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3681</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_af78e1ea40c22d85137b65f6b384a4d0a"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">VmaDefragmentationInfo2::maxCpuBytesToMove</a></div><div class="ttdeci">VkDeviceSize maxCpuBytesToMove</div><div class="ttdoc">Maximum total numbers of bytes that can be copied while moving allocations to different places using ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3711</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info_html"><div class="ttname"><a href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a></div><div class="ttdoc">Deprecated. Optional configuration parameters to be passed to function vmaDefragment().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3757</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info_html_aa7c7304e13c71f604c907196c4e28fbc"><div class="ttname"><a href="struct_vma_defragmentation_info.html#aa7c7304e13c71f604c907196c4e28fbc">VmaDefragmentationInfo::maxAllocationsToMove</a></div><div class="ttdeci">uint32_t maxAllocationsToMove</div><div class="ttdoc">Maximum number of allocations that can be moved to different place.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3767</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info_html_acb311c940a777270e67e1b81c5ab6a1d"><div class="ttname"><a href="struct_vma_defragmentation_info.html#acb311c940a777270e67e1b81c5ab6a1d">VmaDefragmentationInfo::maxBytesToMove</a></div><div class="ttdeci">VkDeviceSize maxBytesToMove</div><div class="ttdoc">Maximum total numbers of bytes that can be copied while moving allocations to different places.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3762</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_pass_info_html"><div class="ttname"><a href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a></div><div class="ttdoc">Parameters for incremental defragmentation steps.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3748</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_pass_info_html_ac1086e657ba995f8d1f4e49b83dcfb6c"><div class="ttname"><a href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c">VmaDefragmentationPassInfo::moveCount</a></div><div class="ttdeci">uint32_t moveCount</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3749</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_pass_info_html_acbd42d4a3357999da130a95cd99a3792"><div class="ttname"><a href="struct_vma_defragmentation_pass_info.html#acbd42d4a3357999da130a95cd99a3792">VmaDefragmentationPassInfo::pMoves</a></div><div class="ttdeci">VmaDefragmentationPassMoveInfo * pMoves</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3750</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_pass_move_info_html"><div class="ttname"><a href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3738</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_pass_move_info_html_a06eb0c8690aa0d3478a036753492e769"><div class="ttname"><a href="struct_vma_defragmentation_pass_move_info.html#a06eb0c8690aa0d3478a036753492e769">VmaDefragmentationPassMoveInfo::memory</a></div><div class="ttdeci">VkDeviceMemory memory</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3740</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_pass_move_info_html_a8ab4508bc03625b0653c880576be96c6"><div class="ttname"><a href="struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6">VmaDefragmentationPassMoveInfo::offset</a></div><div class="ttdeci">VkDeviceSize offset</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3741</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_pass_move_info_html_ae885c861c2dd8d622e6c19e281d035cc"><div class="ttname"><a href="struct_vma_defragmentation_pass_move_info.html#ae885c861c2dd8d622e6c19e281d035cc">VmaDefragmentationPassMoveInfo::allocation</a></div><div class="ttdeci">VmaAllocation allocation</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3739</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_stats_html"><div class="ttname"><a href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a></div><div class="ttdoc">Statistics returned by function vmaDefragment().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3771</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_stats_html_a0113f1877904a5d1ee8f409216ff276b"><div class="ttname"><a href="struct_vma_defragmentation_stats.html#a0113f1877904a5d1ee8f409216ff276b">VmaDefragmentationStats::deviceMemoryBlocksFreed</a></div><div class="ttdeci">uint32_t deviceMemoryBlocksFreed</div><div class="ttdoc">Number of empty VkDeviceMemory objects that have been released to the system.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3779</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_stats_html_a36f9d5df2a10ba2a36b16e126d60572d"><div class="ttname"><a href="struct_vma_defragmentation_stats.html#a36f9d5df2a10ba2a36b16e126d60572d">VmaDefragmentationStats::bytesMoved</a></div><div class="ttdeci">VkDeviceSize bytesMoved</div><div class="ttdoc">Total number of bytes that have been copied while moving allocations to different places.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3773</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_stats_html_ab0cb9ac0dbc106c77e384ea676422f28"><div class="ttname"><a href="struct_vma_defragmentation_stats.html#ab0cb9ac0dbc106c77e384ea676422f28">VmaDefragmentationStats::bytesFreed</a></div><div class="ttdeci">VkDeviceSize bytesFreed</div><div class="ttdoc">Total number of bytes that have been released to the system by freeing empty VkDeviceMemory objects.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3775</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_stats_html_aefeabf130022008eadd75999478af3f9"><div class="ttname"><a href="struct_vma_defragmentation_stats.html#aefeabf130022008eadd75999478af3f9">VmaDefragmentationStats::allocationsMoved</a></div><div class="ttdeci">uint32_t allocationsMoved</div><div class="ttdoc">Number of allocations that have been moved to different places.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3777</div></div>
-<div class="ttc" id="astruct_vma_device_memory_callbacks_html"><div class="ttname"><a href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a></div><div class="ttdoc">Set of callbacks that the library will call for vkAllocateMemory and vkFreeMemory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2231</div></div>
-<div class="ttc" id="astruct_vma_device_memory_callbacks_html_a24052de0937ddd54015a2df0363903c6"><div class="ttname"><a href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6">VmaDeviceMemoryCallbacks::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Optional, can be null.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2237</div></div>
-<div class="ttc" id="astruct_vma_device_memory_callbacks_html_a4f17f7b255101e733b44d5633aceabfb"><div class="ttname"><a href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">VmaDeviceMemoryCallbacks::pfnAllocate</a></div><div class="ttdeci">PFN_vmaAllocateDeviceMemoryFunction pfnAllocate</div><div class="ttdoc">Optional, can be null.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2233</div></div>
-<div class="ttc" id="astruct_vma_device_memory_callbacks_html_abe8a3328bbc916f6f712fdb6b299444c"><div class="ttname"><a href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">VmaDeviceMemoryCallbacks::pfnFree</a></div><div class="ttdeci">PFN_vmaFreeDeviceMemoryFunction pfnFree</div><div class="ttdoc">Optional, can be null.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2235</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html"><div class="ttname"><a href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a></div><div class="ttdoc">Describes parameter of created VmaPool.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3068</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html_a16e686c688f6725f119ebf6e24ab5274"><div class="ttname"><a href="struct_vma_pool_create_info.html#a16e686c688f6725f119ebf6e24ab5274">VmaPoolCreateInfo::priority</a></div><div class="ttdeci">float priority</div><div class="ttdoc">A floating-point value between 0 and 1, indicating the priority of the allocations in this pool relat...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3116</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html_a596fa76b685d3f1f688f84a709a5b319"><div class="ttname"><a href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">VmaPoolCreateInfo::memoryTypeIndex</a></div><div class="ttdeci">uint32_t memoryTypeIndex</div><div class="ttdoc">Vulkan memory type index to allocate this pool from.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3071</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html_a8405139f63d078340ae74513a59f5446"><div class="ttname"><a href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">VmaPoolCreateInfo::flags</a></div><div class="ttdeci">VmaPoolCreateFlags flags</div><div class="ttdoc">Use combination of VmaPoolCreateFlagBits.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3074</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html_a9437e43ffbb644dbbf7fc4e50cfad6aa"><div class="ttname"><a href="struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa">VmaPoolCreateInfo::frameInUseCount</a></div><div class="ttdeci">uint32_t frameInUseCount</div><div class="ttdoc">Maximum number of additional frames that are in use at the same time as current frame.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3110</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html_aa4265160536cdb9be821b7686c16c676"><div class="ttname"><a href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676">VmaPoolCreateInfo::blockSize</a></div><div class="ttdeci">VkDeviceSize blockSize</div><div class="ttdoc">Size of a single VkDeviceMemory block to be allocated as part of this pool, in bytes....</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3083</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html_ad8006fb803185c0a699d30f3e9a865ae"><div class="ttname"><a href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae">VmaPoolCreateInfo::minBlockCount</a></div><div class="ttdeci">size_t minBlockCount</div><div class="ttdoc">Minimum number of blocks to be always allocated in this pool, even if they stay empty.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3088</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html_ade3eca546f0c6ab4e8fbf20eb6d854cb"><div class="ttname"><a href="struct_vma_pool_create_info.html#ade3eca546f0c6ab4e8fbf20eb6d854cb">VmaPoolCreateInfo::minAllocationAlignment</a></div><div class="ttdeci">VkDeviceSize minAllocationAlignment</div><div class="ttdoc">Additional minimum alignment to be used for all allocations created from this pool....</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3123</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html_ae41142f2834fcdc82baa4883c187b75c"><div class="ttname"><a href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">VmaPoolCreateInfo::maxBlockCount</a></div><div class="ttdeci">size_t maxBlockCount</div><div class="ttdoc">Maximum number of blocks that can be allocated in this pool. Optional.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3096</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html_af0f8c58f51a2a7a0a389dc79565044d7"><div class="ttname"><a href="struct_vma_pool_create_info.html#af0f8c58f51a2a7a0a389dc79565044d7">VmaPoolCreateInfo::pMemoryAllocateNext</a></div><div class="ttdeci">void * pMemoryAllocateNext</div><div class="ttdoc">Additional pNext chain to be attached to VkMemoryAllocateInfo used for every allocation made by this ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3133</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html"><div class="ttname"><a href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a></div><div class="ttdoc">Parameters for defragmentation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3663</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a3c9c6aa5c97d5670f8e362b3a6f3029b"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b">VmaDefragmentationInfo2::pPools</a></div><div class="ttdeci">const VmaPool * pPools</div><div class="ttdoc">Either null or pointer to array of pools to be defragmented.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3703</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a3cf86ab32c1da779b4923d301a3056ba"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">VmaDefragmentationInfo2::allocationCount</a></div><div class="ttdeci">uint32_t allocationCount</div><div class="ttdoc">Number of allocations in pAllocations array.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3669</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a40d53d33e71ba0b66f844ed63c05a3f6"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6">VmaDefragmentationInfo2::maxGpuAllocationsToMove</a></div><div class="ttdeci">uint32_t maxGpuAllocationsToMove</div><div class="ttdoc">Maximum number of allocations that can be moved to a different place using transfers on GPU side,...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3723</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a4ddbc898d0afe1518f863a3763628f08"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08">VmaDefragmentationInfo2::maxGpuBytesToMove</a></div><div class="ttdeci">VkDeviceSize maxGpuBytesToMove</div><div class="ttdoc">Maximum total numbers of bytes that can be copied while moving allocations to different places using ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3718</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a53e844ee5633e229cf6daf14b2d9fff9"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">VmaDefragmentationInfo2::flags</a></div><div class="ttdeci">VmaDefragmentationFlags flags</div><div class="ttdoc">Reserved for future use. Should be 0.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3666</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a76d51a644dc7f5405d0cdd0025ecd0cc"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">VmaDefragmentationInfo2::pAllocationsChanged</a></div><div class="ttdeci">VkBool32 * pAllocationsChanged</div><div class="ttdoc">Optional, output. Pointer to array that will be filled with information whether the allocation at cer...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3684</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a7e70aa2a1081d849dcc7829b19d3ec9d"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d">VmaDefragmentationInfo2::poolCount</a></div><div class="ttdeci">uint32_t poolCount</div><div class="ttdoc">Numer of pools in pPools array.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3687</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a7f71f39590c5316771493d2333f9c1bd"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">VmaDefragmentationInfo2::commandBuffer</a></div><div class="ttdeci">VkCommandBuffer commandBuffer</div><div class="ttdoc">Optional. Command buffer where GPU copy commands will be posted.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3732</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a94c2c7223d52878445a8cccce396b671"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">VmaDefragmentationInfo2::maxCpuAllocationsToMove</a></div><div class="ttdeci">uint32_t maxCpuAllocationsToMove</div><div class="ttdoc">Maximum number of allocations that can be moved to a different place using transfers on CPU side,...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3713</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_ab6d288f29d028156cf73542d630a2e32"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">VmaDefragmentationInfo2::pAllocations</a></div><div class="ttdeci">const VmaAllocation * pAllocations</div><div class="ttdoc">Pointer to array of allocations that can be defragmented.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3678</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_af78e1ea40c22d85137b65f6b384a4d0a"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">VmaDefragmentationInfo2::maxCpuBytesToMove</a></div><div class="ttdeci">VkDeviceSize maxCpuBytesToMove</div><div class="ttdoc">Maximum total numbers of bytes that can be copied while moving allocations to different places using ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3708</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info_html"><div class="ttname"><a href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a></div><div class="ttdoc">Deprecated. Optional configuration parameters to be passed to function vmaDefragment().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3754</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info_html_aa7c7304e13c71f604c907196c4e28fbc"><div class="ttname"><a href="struct_vma_defragmentation_info.html#aa7c7304e13c71f604c907196c4e28fbc">VmaDefragmentationInfo::maxAllocationsToMove</a></div><div class="ttdeci">uint32_t maxAllocationsToMove</div><div class="ttdoc">Maximum number of allocations that can be moved to different place.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3764</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info_html_acb311c940a777270e67e1b81c5ab6a1d"><div class="ttname"><a href="struct_vma_defragmentation_info.html#acb311c940a777270e67e1b81c5ab6a1d">VmaDefragmentationInfo::maxBytesToMove</a></div><div class="ttdeci">VkDeviceSize maxBytesToMove</div><div class="ttdoc">Maximum total numbers of bytes that can be copied while moving allocations to different places.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3759</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_pass_info_html"><div class="ttname"><a href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a></div><div class="ttdoc">Parameters for incremental defragmentation steps.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3745</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_pass_info_html_ac1086e657ba995f8d1f4e49b83dcfb6c"><div class="ttname"><a href="struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c">VmaDefragmentationPassInfo::moveCount</a></div><div class="ttdeci">uint32_t moveCount</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3746</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_pass_info_html_acbd42d4a3357999da130a95cd99a3792"><div class="ttname"><a href="struct_vma_defragmentation_pass_info.html#acbd42d4a3357999da130a95cd99a3792">VmaDefragmentationPassInfo::pMoves</a></div><div class="ttdeci">VmaDefragmentationPassMoveInfo * pMoves</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3747</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_pass_move_info_html"><div class="ttname"><a href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3735</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_pass_move_info_html_a06eb0c8690aa0d3478a036753492e769"><div class="ttname"><a href="struct_vma_defragmentation_pass_move_info.html#a06eb0c8690aa0d3478a036753492e769">VmaDefragmentationPassMoveInfo::memory</a></div><div class="ttdeci">VkDeviceMemory memory</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3737</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_pass_move_info_html_a8ab4508bc03625b0653c880576be96c6"><div class="ttname"><a href="struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6">VmaDefragmentationPassMoveInfo::offset</a></div><div class="ttdeci">VkDeviceSize offset</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3738</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_pass_move_info_html_ae885c861c2dd8d622e6c19e281d035cc"><div class="ttname"><a href="struct_vma_defragmentation_pass_move_info.html#ae885c861c2dd8d622e6c19e281d035cc">VmaDefragmentationPassMoveInfo::allocation</a></div><div class="ttdeci">VmaAllocation allocation</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3736</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_stats_html"><div class="ttname"><a href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a></div><div class="ttdoc">Statistics returned by function vmaDefragment().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3768</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_stats_html_a0113f1877904a5d1ee8f409216ff276b"><div class="ttname"><a href="struct_vma_defragmentation_stats.html#a0113f1877904a5d1ee8f409216ff276b">VmaDefragmentationStats::deviceMemoryBlocksFreed</a></div><div class="ttdeci">uint32_t deviceMemoryBlocksFreed</div><div class="ttdoc">Number of empty VkDeviceMemory objects that have been released to the system.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3776</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_stats_html_a36f9d5df2a10ba2a36b16e126d60572d"><div class="ttname"><a href="struct_vma_defragmentation_stats.html#a36f9d5df2a10ba2a36b16e126d60572d">VmaDefragmentationStats::bytesMoved</a></div><div class="ttdeci">VkDeviceSize bytesMoved</div><div class="ttdoc">Total number of bytes that have been copied while moving allocations to different places.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3770</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_stats_html_ab0cb9ac0dbc106c77e384ea676422f28"><div class="ttname"><a href="struct_vma_defragmentation_stats.html#ab0cb9ac0dbc106c77e384ea676422f28">VmaDefragmentationStats::bytesFreed</a></div><div class="ttdeci">VkDeviceSize bytesFreed</div><div class="ttdoc">Total number of bytes that have been released to the system by freeing empty VkDeviceMemory objects.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3772</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_stats_html_aefeabf130022008eadd75999478af3f9"><div class="ttname"><a href="struct_vma_defragmentation_stats.html#aefeabf130022008eadd75999478af3f9">VmaDefragmentationStats::allocationsMoved</a></div><div class="ttdeci">uint32_t allocationsMoved</div><div class="ttdoc">Number of allocations that have been moved to different places.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3774</div></div>
+<div class="ttc" id="astruct_vma_device_memory_callbacks_html"><div class="ttname"><a href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a></div><div class="ttdoc">Set of callbacks that the library will call for vkAllocateMemory and vkFreeMemory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2228</div></div>
+<div class="ttc" id="astruct_vma_device_memory_callbacks_html_a24052de0937ddd54015a2df0363903c6"><div class="ttname"><a href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6">VmaDeviceMemoryCallbacks::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Optional, can be null.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2234</div></div>
+<div class="ttc" id="astruct_vma_device_memory_callbacks_html_a4f17f7b255101e733b44d5633aceabfb"><div class="ttname"><a href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">VmaDeviceMemoryCallbacks::pfnAllocate</a></div><div class="ttdeci">PFN_vmaAllocateDeviceMemoryFunction pfnAllocate</div><div class="ttdoc">Optional, can be null.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2230</div></div>
+<div class="ttc" id="astruct_vma_device_memory_callbacks_html_abe8a3328bbc916f6f712fdb6b299444c"><div class="ttname"><a href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">VmaDeviceMemoryCallbacks::pfnFree</a></div><div class="ttdeci">PFN_vmaFreeDeviceMemoryFunction pfnFree</div><div class="ttdoc">Optional, can be null.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2232</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html"><div class="ttname"><a href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a></div><div class="ttdoc">Describes parameter of created VmaPool.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3065</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html_a16e686c688f6725f119ebf6e24ab5274"><div class="ttname"><a href="struct_vma_pool_create_info.html#a16e686c688f6725f119ebf6e24ab5274">VmaPoolCreateInfo::priority</a></div><div class="ttdeci">float priority</div><div class="ttdoc">A floating-point value between 0 and 1, indicating the priority of the allocations in this pool relat...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3113</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html_a596fa76b685d3f1f688f84a709a5b319"><div class="ttname"><a href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">VmaPoolCreateInfo::memoryTypeIndex</a></div><div class="ttdeci">uint32_t memoryTypeIndex</div><div class="ttdoc">Vulkan memory type index to allocate this pool from.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3068</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html_a8405139f63d078340ae74513a59f5446"><div class="ttname"><a href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">VmaPoolCreateInfo::flags</a></div><div class="ttdeci">VmaPoolCreateFlags flags</div><div class="ttdoc">Use combination of VmaPoolCreateFlagBits.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3071</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html_a9437e43ffbb644dbbf7fc4e50cfad6aa"><div class="ttname"><a href="struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa">VmaPoolCreateInfo::frameInUseCount</a></div><div class="ttdeci">uint32_t frameInUseCount</div><div class="ttdoc">Maximum number of additional frames that are in use at the same time as current frame.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3107</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html_aa4265160536cdb9be821b7686c16c676"><div class="ttname"><a href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676">VmaPoolCreateInfo::blockSize</a></div><div class="ttdeci">VkDeviceSize blockSize</div><div class="ttdoc">Size of a single VkDeviceMemory block to be allocated as part of this pool, in bytes....</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3080</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html_ad8006fb803185c0a699d30f3e9a865ae"><div class="ttname"><a href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae">VmaPoolCreateInfo::minBlockCount</a></div><div class="ttdeci">size_t minBlockCount</div><div class="ttdoc">Minimum number of blocks to be always allocated in this pool, even if they stay empty.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3085</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html_ade3eca546f0c6ab4e8fbf20eb6d854cb"><div class="ttname"><a href="struct_vma_pool_create_info.html#ade3eca546f0c6ab4e8fbf20eb6d854cb">VmaPoolCreateInfo::minAllocationAlignment</a></div><div class="ttdeci">VkDeviceSize minAllocationAlignment</div><div class="ttdoc">Additional minimum alignment to be used for all allocations created from this pool....</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3120</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html_ae41142f2834fcdc82baa4883c187b75c"><div class="ttname"><a href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">VmaPoolCreateInfo::maxBlockCount</a></div><div class="ttdeci">size_t maxBlockCount</div><div class="ttdoc">Maximum number of blocks that can be allocated in this pool. Optional.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3093</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html_af0f8c58f51a2a7a0a389dc79565044d7"><div class="ttname"><a href="struct_vma_pool_create_info.html#af0f8c58f51a2a7a0a389dc79565044d7">VmaPoolCreateInfo::pMemoryAllocateNext</a></div><div class="ttdeci">void * pMemoryAllocateNext</div><div class="ttdoc">Additional pNext chain to be attached to VkMemoryAllocateInfo used for every allocation made by this ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3130</div></div>
 <div class="ttc" id="astruct_vma_pool_html"><div class="ttname"><a href="struct_vma_pool.html">VmaPool</a></div><div class="ttdoc">Represents custom memory pool.</div></div>
-<div class="ttc" id="astruct_vma_pool_stats_html"><div class="ttname"><a href="struct_vma_pool_stats.html">VmaPoolStats</a></div><div class="ttdoc">Describes parameter of existing VmaPool.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3138</div></div>
-<div class="ttc" id="astruct_vma_pool_stats_html_a326807b2de2b0931cee4ed9a5f2e420c"><div class="ttname"><a href="struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c">VmaPoolStats::size</a></div><div class="ttdeci">VkDeviceSize size</div><div class="ttdoc">Total amount of VkDeviceMemory allocated from Vulkan for this pool, in bytes.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3141</div></div>
-<div class="ttc" id="astruct_vma_pool_stats_html_aa0b5cb45cef6f18571cefb03b9a230e7"><div class="ttname"><a href="struct_vma_pool_stats.html#aa0b5cb45cef6f18571cefb03b9a230e7">VmaPoolStats::blockCount</a></div><div class="ttdeci">size_t blockCount</div><div class="ttdoc">Number of VkDeviceMemory blocks allocated for this pool.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3160</div></div>
-<div class="ttc" id="astruct_vma_pool_stats_html_ab4c8f52dd42ab01998f60f0b6acc722b"><div class="ttname"><a href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">VmaPoolStats::unusedRangeSizeMax</a></div><div class="ttdeci">VkDeviceSize unusedRangeSizeMax</div><div class="ttdoc">Size of the largest continuous free memory region available for new allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3157</div></div>
-<div class="ttc" id="astruct_vma_pool_stats_html_ad1924eb54fffa45e9e0e65670c8fe5eb"><div class="ttname"><a href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">VmaPoolStats::allocationCount</a></div><div class="ttdeci">size_t allocationCount</div><div class="ttdoc">Number of VmaAllocation objects created from this pool that were not destroyed or lost.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3147</div></div>
-<div class="ttc" id="astruct_vma_pool_stats_html_ad7c54874724fce7b06aba526202d82a8"><div class="ttname"><a href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">VmaPoolStats::unusedSize</a></div><div class="ttdeci">VkDeviceSize unusedSize</div><div class="ttdoc">Total number of bytes in the pool not used by any VmaAllocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3144</div></div>
-<div class="ttc" id="astruct_vma_pool_stats_html_ae4f3546ffa4d1e598b64d8e6134854f4"><div class="ttname"><a href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">VmaPoolStats::unusedRangeCount</a></div><div class="ttdeci">size_t unusedRangeCount</div><div class="ttdoc">Number of continuous memory ranges in the pool not used by any VmaAllocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3150</div></div>
-<div class="ttc" id="astruct_vma_record_settings_html"><div class="ttname"><a href="struct_vma_record_settings.html">VmaRecordSettings</a></div><div class="ttdoc">Parameters for recording calls to VMA functions. To be used in VmaAllocatorCreateInfo::pRecordSetting...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2407</div></div>
-<div class="ttc" id="astruct_vma_record_settings_html_a6cb1fdbf6bcb610b68f2010dd629e89d"><div class="ttname"><a href="struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d">VmaRecordSettings::pFilePath</a></div><div class="ttdeci">const char * pFilePath</div><div class="ttdoc">Path to the file that should be written by the recording.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2417</div></div>
-<div class="ttc" id="astruct_vma_record_settings_html_ad8fdcc92119ae7a8c08c1a564c01d63a"><div class="ttname"><a href="struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a">VmaRecordSettings::flags</a></div><div class="ttdeci">VmaRecordFlags flags</div><div class="ttdoc">Flags for recording. Use VmaRecordFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2409</div></div>
-<div class="ttc" id="astruct_vma_stat_info_html"><div class="ttname"><a href="struct_vma_stat_info.html">VmaStatInfo</a></div><div class="ttdoc">Calculated statistics of memory usage in entire allocator.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2599</div></div>
-<div class="ttc" id="astruct_vma_stat_info_html_a1081a039964e566c672e7a2347f9e599"><div class="ttname"><a href="struct_vma_stat_info.html#a1081a039964e566c672e7a2347f9e599">VmaStatInfo::allocationSizeAvg</a></div><div class="ttdeci">VkDeviceSize allocationSizeAvg</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2610</div></div>
-<div class="ttc" id="astruct_vma_stat_info_html_a17e9733a5ecd76287d4db6e66f71f50c"><div class="ttname"><a href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">VmaStatInfo::allocationSizeMax</a></div><div class="ttdeci">VkDeviceSize allocationSizeMax</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2610</div></div>
-<div class="ttc" id="astruct_vma_stat_info_html_a1859d290aca2cd582d8dc25922092669"><div class="ttname"><a href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">VmaStatInfo::unusedBytes</a></div><div class="ttdeci">VkDeviceSize unusedBytes</div><div class="ttdoc">Total number of bytes occupied by unused ranges.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2609</div></div>
-<div class="ttc" id="astruct_vma_stat_info_html_a2f9b3452af90c9768a30b7fb6ae194fc"><div class="ttname"><a href="struct_vma_stat_info.html#a2f9b3452af90c9768a30b7fb6ae194fc">VmaStatInfo::unusedRangeSizeAvg</a></div><div class="ttdeci">VkDeviceSize unusedRangeSizeAvg</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2611</div></div>
-<div class="ttc" id="astruct_vma_stat_info_html_a537741e4d5cdddc1c0ab95ec650afaff"><div class="ttname"><a href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">VmaStatInfo::allocationCount</a></div><div class="ttdeci">uint32_t allocationCount</div><div class="ttdoc">Number of VmaAllocation allocation objects allocated.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2603</div></div>
-<div class="ttc" id="astruct_vma_stat_info_html_a5ba1a2476c4d39b10f7e2f7ebbb72ac4"><div class="ttname"><a href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">VmaStatInfo::unusedRangeSizeMax</a></div><div class="ttdeci">VkDeviceSize unusedRangeSizeMax</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2611</div></div>
-<div class="ttc" id="astruct_vma_stat_info_html_ab0c6c73837e5a70c749fbd4f6064895a"><div class="ttname"><a href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">VmaStatInfo::usedBytes</a></div><div class="ttdeci">VkDeviceSize usedBytes</div><div class="ttdoc">Total number of bytes occupied by all allocations.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2607</div></div>
-<div class="ttc" id="astruct_vma_stat_info_html_abc4bb7cd611900778464c56e50c970a4"><div class="ttname"><a href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">VmaStatInfo::blockCount</a></div><div class="ttdeci">uint32_t blockCount</div><div class="ttdoc">Number of VkDeviceMemory Vulkan memory blocks allocated.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2601</div></div>
-<div class="ttc" id="astruct_vma_stat_info_html_ade8b40bd3139c04aabd2fc538a356fea"><div class="ttname"><a href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">VmaStatInfo::allocationSizeMin</a></div><div class="ttdeci">VkDeviceSize allocationSizeMin</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2610</div></div>
-<div class="ttc" id="astruct_vma_stat_info_html_ae06129c771bfebfd6468a7f4276502a9"><div class="ttname"><a href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">VmaStatInfo::unusedRangeCount</a></div><div class="ttdeci">uint32_t unusedRangeCount</div><div class="ttdoc">Number of free ranges of memory between allocations.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2605</div></div>
-<div class="ttc" id="astruct_vma_stat_info_html_aedeba931324f16589cd2416c0d2dd0d4"><div class="ttname"><a href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">VmaStatInfo::unusedRangeSizeMin</a></div><div class="ttdeci">VkDeviceSize unusedRangeSizeMin</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2611</div></div>
-<div class="ttc" id="astruct_vma_stats_html"><div class="ttname"><a href="struct_vma_stats.html">VmaStats</a></div><div class="ttdoc">General statistics from current state of Allocator.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2616</div></div>
-<div class="ttc" id="astruct_vma_stats_html_a0e6611508c29a187f0fd14ff1a0329c0"><div class="ttname"><a href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">VmaStats::memoryHeap</a></div><div class="ttdeci">VmaStatInfo memoryHeap[VK_MAX_MEMORY_HEAPS]</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2618</div></div>
-<div class="ttc" id="astruct_vma_stats_html_a13e3caf754be79352c42408756309331"><div class="ttname"><a href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">VmaStats::memoryType</a></div><div class="ttdeci">VmaStatInfo memoryType[VK_MAX_MEMORY_TYPES]</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2617</div></div>
-<div class="ttc" id="astruct_vma_stats_html_a2e8f5b3353f2fefef3c27f29e245a1f9"><div class="ttname"><a href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">VmaStats::total</a></div><div class="ttdeci">VmaStatInfo total</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2619</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html"><div class="ttname"><a href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a></div><div class="ttdoc">Pointers to some Vulkan functions - a subset used by the library.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2361</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_a1338d96a128a5ade648b8d934907c637"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a1338d96a128a5ade648b8d934907c637">VmaVulkanFunctions::vkBindImageMemory</a></div><div class="ttdeci">PFN_vkBindImageMemory vkBindImageMemory</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2371</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_a23ebe70be515b9b5010a1d691200e325"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a23ebe70be515b9b5010a1d691200e325">VmaVulkanFunctions::vkCreateImage</a></div><div class="ttdeci">PFN_vkCreateImage vkCreateImage</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2376</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_a2943bf99dfd784a0e8f599d987e22e6c"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a2943bf99dfd784a0e8f599d987e22e6c">VmaVulkanFunctions::vkAllocateMemory</a></div><div class="ttdeci">PFN_vkAllocateMemory vkAllocateMemory</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2364</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_a33c322f4c4ad2810f8a9c97a277572f9"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a33c322f4c4ad2810f8a9c97a277572f9">VmaVulkanFunctions::vkFlushMappedMemoryRanges</a></div><div class="ttdeci">PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2368</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_a475f6f49f8debe4d10800592606d53f4"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a475f6f49f8debe4d10800592606d53f4">VmaVulkanFunctions::vkGetImageMemoryRequirements</a></div><div class="ttdeci">PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2373</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_a4c658701778564d62034255b5dda91b4"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a4c658701778564d62034255b5dda91b4">VmaVulkanFunctions::vkFreeMemory</a></div><div class="ttdeci">PFN_vkFreeMemory vkFreeMemory</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2365</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_a5b92901df89a4194b0d12f6071d4d143"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a5b92901df89a4194b0d12f6071d4d143">VmaVulkanFunctions::vkGetBufferMemoryRequirements</a></div><div class="ttdeci">PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2372</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_a5c1093bc32386a8060c37c9f282078a1"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a5c1093bc32386a8060c37c9f282078a1">VmaVulkanFunctions::vkInvalidateMappedMemoryRanges</a></div><div class="ttdeci">PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2369</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_a60d25c33bba06bb8592e6875cbaa9830"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a60d25c33bba06bb8592e6875cbaa9830">VmaVulkanFunctions::vkGetPhysicalDeviceMemoryProperties</a></div><div class="ttdeci">PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2363</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_a77b7a74082823e865dd6546623468f96"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a77b7a74082823e865dd6546623468f96">VmaVulkanFunctions::vkGetPhysicalDeviceProperties</a></div><div class="ttdeci">PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2362</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_a7e054606faddb07f0e8556f3ed317d45"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a7e054606faddb07f0e8556f3ed317d45">VmaVulkanFunctions::vkDestroyBuffer</a></div><div class="ttdeci">PFN_vkDestroyBuffer vkDestroyBuffer</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2375</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_a90b898227039b1dcb3520f6e91f09ffa"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a90b898227039b1dcb3520f6e91f09ffa">VmaVulkanFunctions::vkDestroyImage</a></div><div class="ttdeci">PFN_vkDestroyImage vkDestroyImage</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2377</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_a94fc4f3a605d9880bb3c0ba2c2fc80b2"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a94fc4f3a605d9880bb3c0ba2c2fc80b2">VmaVulkanFunctions::vkBindBufferMemory</a></div><div class="ttdeci">PFN_vkBindBufferMemory vkBindBufferMemory</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2370</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_ab5c1f38dea3a2cf00dc9eb4f57218c49"><div class="ttname"><a href="struct_vma_vulkan_functions.html#ab5c1f38dea3a2cf00dc9eb4f57218c49">VmaVulkanFunctions::vkMapMemory</a></div><div class="ttdeci">PFN_vkMapMemory vkMapMemory</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2366</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_acc798589736f0becb317fc2196c1d8b9"><div class="ttname"><a href="struct_vma_vulkan_functions.html#acc798589736f0becb317fc2196c1d8b9">VmaVulkanFunctions::vkUnmapMemory</a></div><div class="ttdeci">PFN_vkUnmapMemory vkUnmapMemory</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2367</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_ae5c0db8c89a3b82593dc16aa6a49fa3a"><div class="ttname"><a href="struct_vma_vulkan_functions.html#ae5c0db8c89a3b82593dc16aa6a49fa3a">VmaVulkanFunctions::vkCmdCopyBuffer</a></div><div class="ttdeci">PFN_vkCmdCopyBuffer vkCmdCopyBuffer</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2378</div></div>
-<div class="ttc" id="astruct_vma_vulkan_functions_html_ae8084315a25006271a2edfc3a447519f"><div class="ttname"><a href="struct_vma_vulkan_functions.html#ae8084315a25006271a2edfc3a447519f">VmaVulkanFunctions::vkCreateBuffer</a></div><div class="ttdeci">PFN_vkCreateBuffer vkCreateBuffer</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2374</div></div>
+<div class="ttc" id="astruct_vma_pool_stats_html"><div class="ttname"><a href="struct_vma_pool_stats.html">VmaPoolStats</a></div><div class="ttdoc">Describes parameter of existing VmaPool.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3135</div></div>
+<div class="ttc" id="astruct_vma_pool_stats_html_a326807b2de2b0931cee4ed9a5f2e420c"><div class="ttname"><a href="struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c">VmaPoolStats::size</a></div><div class="ttdeci">VkDeviceSize size</div><div class="ttdoc">Total amount of VkDeviceMemory allocated from Vulkan for this pool, in bytes.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3138</div></div>
+<div class="ttc" id="astruct_vma_pool_stats_html_aa0b5cb45cef6f18571cefb03b9a230e7"><div class="ttname"><a href="struct_vma_pool_stats.html#aa0b5cb45cef6f18571cefb03b9a230e7">VmaPoolStats::blockCount</a></div><div class="ttdeci">size_t blockCount</div><div class="ttdoc">Number of VkDeviceMemory blocks allocated for this pool.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3157</div></div>
+<div class="ttc" id="astruct_vma_pool_stats_html_ab4c8f52dd42ab01998f60f0b6acc722b"><div class="ttname"><a href="struct_vma_pool_stats.html#ab4c8f52dd42ab01998f60f0b6acc722b">VmaPoolStats::unusedRangeSizeMax</a></div><div class="ttdeci">VkDeviceSize unusedRangeSizeMax</div><div class="ttdoc">Size of the largest continuous free memory region available for new allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3154</div></div>
+<div class="ttc" id="astruct_vma_pool_stats_html_ad1924eb54fffa45e9e0e65670c8fe5eb"><div class="ttname"><a href="struct_vma_pool_stats.html#ad1924eb54fffa45e9e0e65670c8fe5eb">VmaPoolStats::allocationCount</a></div><div class="ttdeci">size_t allocationCount</div><div class="ttdoc">Number of VmaAllocation objects created from this pool that were not destroyed or lost.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3144</div></div>
+<div class="ttc" id="astruct_vma_pool_stats_html_ad7c54874724fce7b06aba526202d82a8"><div class="ttname"><a href="struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8">VmaPoolStats::unusedSize</a></div><div class="ttdeci">VkDeviceSize unusedSize</div><div class="ttdoc">Total number of bytes in the pool not used by any VmaAllocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3141</div></div>
+<div class="ttc" id="astruct_vma_pool_stats_html_ae4f3546ffa4d1e598b64d8e6134854f4"><div class="ttname"><a href="struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4">VmaPoolStats::unusedRangeCount</a></div><div class="ttdeci">size_t unusedRangeCount</div><div class="ttdoc">Number of continuous memory ranges in the pool not used by any VmaAllocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3147</div></div>
+<div class="ttc" id="astruct_vma_record_settings_html"><div class="ttname"><a href="struct_vma_record_settings.html">VmaRecordSettings</a></div><div class="ttdoc">Parameters for recording calls to VMA functions. To be used in VmaAllocatorCreateInfo::pRecordSetting...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2404</div></div>
+<div class="ttc" id="astruct_vma_record_settings_html_a6cb1fdbf6bcb610b68f2010dd629e89d"><div class="ttname"><a href="struct_vma_record_settings.html#a6cb1fdbf6bcb610b68f2010dd629e89d">VmaRecordSettings::pFilePath</a></div><div class="ttdeci">const char * pFilePath</div><div class="ttdoc">Path to the file that should be written by the recording.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2414</div></div>
+<div class="ttc" id="astruct_vma_record_settings_html_ad8fdcc92119ae7a8c08c1a564c01d63a"><div class="ttname"><a href="struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a">VmaRecordSettings::flags</a></div><div class="ttdeci">VmaRecordFlags flags</div><div class="ttdoc">Flags for recording. Use VmaRecordFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2406</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html"><div class="ttname"><a href="struct_vma_stat_info.html">VmaStatInfo</a></div><div class="ttdoc">Calculated statistics of memory usage in entire allocator.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2596</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html_a1081a039964e566c672e7a2347f9e599"><div class="ttname"><a href="struct_vma_stat_info.html#a1081a039964e566c672e7a2347f9e599">VmaStatInfo::allocationSizeAvg</a></div><div class="ttdeci">VkDeviceSize allocationSizeAvg</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2607</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html_a17e9733a5ecd76287d4db6e66f71f50c"><div class="ttname"><a href="struct_vma_stat_info.html#a17e9733a5ecd76287d4db6e66f71f50c">VmaStatInfo::allocationSizeMax</a></div><div class="ttdeci">VkDeviceSize allocationSizeMax</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2607</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html_a1859d290aca2cd582d8dc25922092669"><div class="ttname"><a href="struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669">VmaStatInfo::unusedBytes</a></div><div class="ttdeci">VkDeviceSize unusedBytes</div><div class="ttdoc">Total number of bytes occupied by unused ranges.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2606</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html_a2f9b3452af90c9768a30b7fb6ae194fc"><div class="ttname"><a href="struct_vma_stat_info.html#a2f9b3452af90c9768a30b7fb6ae194fc">VmaStatInfo::unusedRangeSizeAvg</a></div><div class="ttdeci">VkDeviceSize unusedRangeSizeAvg</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2608</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html_a537741e4d5cdddc1c0ab95ec650afaff"><div class="ttname"><a href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">VmaStatInfo::allocationCount</a></div><div class="ttdeci">uint32_t allocationCount</div><div class="ttdoc">Number of VmaAllocation allocation objects allocated.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2600</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html_a5ba1a2476c4d39b10f7e2f7ebbb72ac4"><div class="ttname"><a href="struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4">VmaStatInfo::unusedRangeSizeMax</a></div><div class="ttdeci">VkDeviceSize unusedRangeSizeMax</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2608</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html_ab0c6c73837e5a70c749fbd4f6064895a"><div class="ttname"><a href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">VmaStatInfo::usedBytes</a></div><div class="ttdeci">VkDeviceSize usedBytes</div><div class="ttdoc">Total number of bytes occupied by all allocations.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2604</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html_abc4bb7cd611900778464c56e50c970a4"><div class="ttname"><a href="struct_vma_stat_info.html#abc4bb7cd611900778464c56e50c970a4">VmaStatInfo::blockCount</a></div><div class="ttdeci">uint32_t blockCount</div><div class="ttdoc">Number of VkDeviceMemory Vulkan memory blocks allocated.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2598</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html_ade8b40bd3139c04aabd2fc538a356fea"><div class="ttname"><a href="struct_vma_stat_info.html#ade8b40bd3139c04aabd2fc538a356fea">VmaStatInfo::allocationSizeMin</a></div><div class="ttdeci">VkDeviceSize allocationSizeMin</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2607</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html_ae06129c771bfebfd6468a7f4276502a9"><div class="ttname"><a href="struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9">VmaStatInfo::unusedRangeCount</a></div><div class="ttdeci">uint32_t unusedRangeCount</div><div class="ttdoc">Number of free ranges of memory between allocations.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2602</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html_aedeba931324f16589cd2416c0d2dd0d4"><div class="ttname"><a href="struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4">VmaStatInfo::unusedRangeSizeMin</a></div><div class="ttdeci">VkDeviceSize unusedRangeSizeMin</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2608</div></div>
+<div class="ttc" id="astruct_vma_stats_html"><div class="ttname"><a href="struct_vma_stats.html">VmaStats</a></div><div class="ttdoc">General statistics from current state of Allocator.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2613</div></div>
+<div class="ttc" id="astruct_vma_stats_html_a0e6611508c29a187f0fd14ff1a0329c0"><div class="ttname"><a href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">VmaStats::memoryHeap</a></div><div class="ttdeci">VmaStatInfo memoryHeap[VK_MAX_MEMORY_HEAPS]</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2615</div></div>
+<div class="ttc" id="astruct_vma_stats_html_a13e3caf754be79352c42408756309331"><div class="ttname"><a href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">VmaStats::memoryType</a></div><div class="ttdeci">VmaStatInfo memoryType[VK_MAX_MEMORY_TYPES]</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2614</div></div>
+<div class="ttc" id="astruct_vma_stats_html_a2e8f5b3353f2fefef3c27f29e245a1f9"><div class="ttname"><a href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">VmaStats::total</a></div><div class="ttdeci">VmaStatInfo total</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2616</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html"><div class="ttname"><a href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a></div><div class="ttdoc">Pointers to some Vulkan functions - a subset used by the library.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2358</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_a1338d96a128a5ade648b8d934907c637"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a1338d96a128a5ade648b8d934907c637">VmaVulkanFunctions::vkBindImageMemory</a></div><div class="ttdeci">PFN_vkBindImageMemory vkBindImageMemory</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2368</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_a23ebe70be515b9b5010a1d691200e325"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a23ebe70be515b9b5010a1d691200e325">VmaVulkanFunctions::vkCreateImage</a></div><div class="ttdeci">PFN_vkCreateImage vkCreateImage</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2373</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_a2943bf99dfd784a0e8f599d987e22e6c"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a2943bf99dfd784a0e8f599d987e22e6c">VmaVulkanFunctions::vkAllocateMemory</a></div><div class="ttdeci">PFN_vkAllocateMemory vkAllocateMemory</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2361</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_a33c322f4c4ad2810f8a9c97a277572f9"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a33c322f4c4ad2810f8a9c97a277572f9">VmaVulkanFunctions::vkFlushMappedMemoryRanges</a></div><div class="ttdeci">PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2365</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_a475f6f49f8debe4d10800592606d53f4"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a475f6f49f8debe4d10800592606d53f4">VmaVulkanFunctions::vkGetImageMemoryRequirements</a></div><div class="ttdeci">PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2370</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_a4c658701778564d62034255b5dda91b4"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a4c658701778564d62034255b5dda91b4">VmaVulkanFunctions::vkFreeMemory</a></div><div class="ttdeci">PFN_vkFreeMemory vkFreeMemory</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2362</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_a5b92901df89a4194b0d12f6071d4d143"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a5b92901df89a4194b0d12f6071d4d143">VmaVulkanFunctions::vkGetBufferMemoryRequirements</a></div><div class="ttdeci">PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2369</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_a5c1093bc32386a8060c37c9f282078a1"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a5c1093bc32386a8060c37c9f282078a1">VmaVulkanFunctions::vkInvalidateMappedMemoryRanges</a></div><div class="ttdeci">PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2366</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_a60d25c33bba06bb8592e6875cbaa9830"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a60d25c33bba06bb8592e6875cbaa9830">VmaVulkanFunctions::vkGetPhysicalDeviceMemoryProperties</a></div><div class="ttdeci">PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2360</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_a77b7a74082823e865dd6546623468f96"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a77b7a74082823e865dd6546623468f96">VmaVulkanFunctions::vkGetPhysicalDeviceProperties</a></div><div class="ttdeci">PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2359</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_a7e054606faddb07f0e8556f3ed317d45"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a7e054606faddb07f0e8556f3ed317d45">VmaVulkanFunctions::vkDestroyBuffer</a></div><div class="ttdeci">PFN_vkDestroyBuffer vkDestroyBuffer</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2372</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_a90b898227039b1dcb3520f6e91f09ffa"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a90b898227039b1dcb3520f6e91f09ffa">VmaVulkanFunctions::vkDestroyImage</a></div><div class="ttdeci">PFN_vkDestroyImage vkDestroyImage</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2374</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_a94fc4f3a605d9880bb3c0ba2c2fc80b2"><div class="ttname"><a href="struct_vma_vulkan_functions.html#a94fc4f3a605d9880bb3c0ba2c2fc80b2">VmaVulkanFunctions::vkBindBufferMemory</a></div><div class="ttdeci">PFN_vkBindBufferMemory vkBindBufferMemory</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2367</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_ab5c1f38dea3a2cf00dc9eb4f57218c49"><div class="ttname"><a href="struct_vma_vulkan_functions.html#ab5c1f38dea3a2cf00dc9eb4f57218c49">VmaVulkanFunctions::vkMapMemory</a></div><div class="ttdeci">PFN_vkMapMemory vkMapMemory</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2363</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_acc798589736f0becb317fc2196c1d8b9"><div class="ttname"><a href="struct_vma_vulkan_functions.html#acc798589736f0becb317fc2196c1d8b9">VmaVulkanFunctions::vkUnmapMemory</a></div><div class="ttdeci">PFN_vkUnmapMemory vkUnmapMemory</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2364</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_ae5c0db8c89a3b82593dc16aa6a49fa3a"><div class="ttname"><a href="struct_vma_vulkan_functions.html#ae5c0db8c89a3b82593dc16aa6a49fa3a">VmaVulkanFunctions::vkCmdCopyBuffer</a></div><div class="ttdeci">PFN_vkCmdCopyBuffer vkCmdCopyBuffer</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2375</div></div>
+<div class="ttc" id="astruct_vma_vulkan_functions_html_ae8084315a25006271a2edfc3a447519f"><div class="ttname"><a href="struct_vma_vulkan_functions.html#ae8084315a25006271a2edfc3a447519f">VmaVulkanFunctions::vkCreateBuffer</a></div><div class="ttdeci">PFN_vkCreateBuffer vkCreateBuffer</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2371</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a02a94f25679275851a53e82eacbcfc73"><div class="ttname"><a href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a></div><div class="ttdeci">VkResult vmaCreateImage(VmaAllocator allocator, const VkImageCreateInfo *pImageCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkImage *pImage, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">Function similar to vmaCreateBuffer().</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a088da83d8eaf3ce9056d9ea0b981d472"><div class="ttname"><a href="vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472">vmaFindMemoryTypeIndexForImageInfo</a></div><div class="ttdeci">VkResult vmaFindMemoryTypeIndexForImageInfo(VmaAllocator allocator, const VkImageCreateInfo *pImageCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, uint32_t *pMemoryTypeIndex)</div><div class="ttdoc">Helps to find memoryTypeIndex, given VkImageCreateInfo and VmaAllocationCreateInfo.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a0d9f4e4ba5bf9aab1f1c746387753d77"><div class="ttname"><a href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a></div><div class="ttdeci">void vmaDestroyBuffer(VmaAllocator allocator, VkBuffer buffer, VmaAllocation allocation)</div><div class="ttdoc">Destroys Vulkan buffer and frees allocated memory.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a0faa3f9e5fb233d29d1e00390650febb"><div class="ttname"><a href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb">vmaAllocateMemoryForImage</a></div><div class="ttdeci">VkResult vmaAllocateMemoryForImage(VmaAllocator allocator, VkImage image, const VmaAllocationCreateInfo *pCreateInfo, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">Function similar to vmaAllocateMemoryForBuffer().</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a1017aa83489c0eee8d2163d2bf253f67"><div class="ttname"><a href="vk__mem__alloc_8h.html#a1017aa83489c0eee8d2163d2bf253f67">VmaPoolCreateInfo</a></div><div class="ttdeci">struct VmaPoolCreateInfo VmaPoolCreateInfo</div><div class="ttdoc">Describes parameter of created VmaPool.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a154ccaaf53dc2c36378f80f0c4f3679b"><div class="ttname"><a href="vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b">PFN_vmaFreeDeviceMemoryFunction</a></div><div class="ttdeci">void(VKAPI_PTR * PFN_vmaFreeDeviceMemoryFunction)(VmaAllocator allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData)</div><div class="ttdoc">Callback function called before vkFreeMemory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2217</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a154ccaaf53dc2c36378f80f0c4f3679b"><div class="ttname"><a href="vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b">PFN_vmaFreeDeviceMemoryFunction</a></div><div class="ttdeci">void(VKAPI_PTR * PFN_vmaFreeDeviceMemoryFunction)(VmaAllocator allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData)</div><div class="ttdoc">Callback function called before vkFreeMemory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2214</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a16e21c877101493fce582664cd8754fc"><div class="ttname"><a href="vk__mem__alloc_8h.html#a16e21c877101493fce582664cd8754fc">VmaRecordSettings</a></div><div class="ttdeci">struct VmaRecordSettings VmaRecordSettings</div><div class="ttdoc">Parameters for recording calls to VMA functions. To be used in VmaAllocatorCreateInfo::pRecordSetting...</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a1988031b0223fdbd564250fa1edd942c"><div class="ttname"><a href="vk__mem__alloc_8h.html#a1988031b0223fdbd564250fa1edd942c">VmaAllocatorInfo</a></div><div class="ttdeci">struct VmaAllocatorInfo VmaAllocatorInfo</div><div class="ttdoc">Information about existing VmaAllocator object.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a1b9ffa538bed905af55c747cc48963bd"><div class="ttname"><a href="vk__mem__alloc_8h.html#a1b9ffa538bed905af55c747cc48963bd">vmaEndDefragmentationPass</a></div><div class="ttdeci">VkResult vmaEndDefragmentationPass(VmaAllocator allocator, VmaDefragmentationContext context)</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a1cf7774606721026a68aabe3af2e5b50"><div class="ttname"><a href="vk__mem__alloc_8h.html#a1cf7774606721026a68aabe3af2e5b50">VmaAllocationInfo</a></div><div class="ttdeci">struct VmaAllocationInfo VmaAllocationInfo</div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a1f0c126759fc96ccb6e2d23c101d770c"><div class="ttname"><a href="vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c">VMA_RECORDING_ENABLED</a></div><div class="ttdeci">#define VMA_RECORDING_ENABLED</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2029</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a1f0c126759fc96ccb6e2d23c101d770c"><div class="ttname"><a href="vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c">VMA_RECORDING_ENABLED</a></div><div class="ttdeci">#define VMA_RECORDING_ENABLED</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2026</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a200692051ddb34240248234f5f4c17bb"><div class="ttname"><a href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a></div><div class="ttdeci">VkResult vmaCreateAllocator(const VmaAllocatorCreateInfo *pCreateInfo, VmaAllocator *pAllocator)</div><div class="ttdoc">Creates Allocator object.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a21813b2efdf3836767a9058cd8a94034"><div class="ttname"><a href="vk__mem__alloc_8h.html#a21813b2efdf3836767a9058cd8a94034">VmaStats</a></div><div class="ttdeci">struct VmaStats VmaStats</div><div class="ttdoc">General statistics from current state of Allocator.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a2770e325ea42e087c1b91fdf46d0292a"><div class="ttname"><a href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a></div><div class="ttdeci">VkFlags VmaPoolCreateFlags</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3064</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a2770e325ea42e087c1b91fdf46d0292a"><div class="ttname"><a href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a></div><div class="ttdeci">VkFlags VmaPoolCreateFlags</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3061</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a2bf47f96bf92bed2a49461bd9af3acfa"><div class="ttname"><a href="vk__mem__alloc_8h.html#a2bf47f96bf92bed2a49461bd9af3acfa">VmaDefragmentationInfo</a></div><div class="ttdeci">struct VmaDefragmentationInfo VmaDefragmentationInfo</div><div class="ttdoc">Deprecated. Optional configuration parameters to be passed to function vmaDefragment().</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a30c37c1eec6025f397be41644f48490f"><div class="ttname"><a href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f">vmaFlushAllocation</a></div><div class="ttdeci">VkResult vmaFlushAllocation(VmaAllocator allocator, VmaAllocation allocation, VkDeviceSize offset, VkDeviceSize size)</div><div class="ttdoc">Flushes memory of given allocation.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a3104eb30d8122c84dd8541063f145288"><div class="ttname"><a href="vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288">vmaFreeStatsString</a></div><div class="ttdeci">void vmaFreeStatsString(VmaAllocator allocator, char *pStatsString)</div></div>
@@ -16683,57 +16685,57 @@
 <div class="ttc" id="avk__mem__alloc_8h_html_a43d8ba9673c846f049089a5029d5c73a"><div class="ttname"><a href="vk__mem__alloc_8h.html#a43d8ba9673c846f049089a5029d5c73a">vmaTouchAllocation</a></div><div class="ttdeci">VkBool32 vmaTouchAllocation(VmaAllocator allocator, VmaAllocation allocation)</div><div class="ttdoc">Returns VK_TRUE if allocation is not lost and atomically marks it as used in current frame.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a4759a2d9f99c19ba7627553c847132f1"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4759a2d9f99c19ba7627553c847132f1">VmaPoolStats</a></div><div class="ttdeci">struct VmaPoolStats VmaPoolStats</div><div class="ttdoc">Describes parameter of existing VmaPool.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a49329a7f030dafcf82f7b73334c22e98"><div class="ttname"><a href="vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98">vmaCheckCorruption</a></div><div class="ttdeci">VkResult vmaCheckCorruption(VmaAllocator allocator, uint32_t memoryTypeBits)</div><div class="ttdoc">Checks magic number in margins around all allocations in given memory types (in both default and cust...</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4dd2c44642312a147a4e93373a6e64d2"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2">VmaRecordFlagBits</a></div><div class="ttdeci">VmaRecordFlagBits</div><div class="ttdoc">Flags to be used in VmaRecordSettings::flags.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2393</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e">VMA_RECORD_FLAG_BITS_MAX_ENUM</a></div><div class="ttdeci">@ VMA_RECORD_FLAG_BITS_MAX_ENUM</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2401</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7">VMA_RECORD_FLUSH_AFTER_CALL_BIT</a></div><div class="ttdeci">@ VMA_RECORD_FLUSH_AFTER_CALL_BIT</div><div class="ttdoc">Enables flush after recording every function call.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2399</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7c"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a></div><div class="ttdeci">VmaAllocatorCreateFlagBits</div><div class="ttdoc">Flags for created VmaAllocator.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2241</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2316</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</div><div class="ttdoc">Allocator and all objects created from it will not be synchronized internally, so you must guarantee ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2246</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2298</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2334</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2286</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</div><div class="ttdoc">Enables usage of VK_KHR_dedicated_allocation extension.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2271</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c">VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2353</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2351</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a5225e5e11f8376f6a31a1791f3d6e817"><div class="ttname"><a href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a></div><div class="ttdeci">VkFlags VmaAllocationCreateFlags</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2897</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a4dd2c44642312a147a4e93373a6e64d2"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2">VmaRecordFlagBits</a></div><div class="ttdeci">VmaRecordFlagBits</div><div class="ttdoc">Flags to be used in VmaRecordSettings::flags.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2390</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e">VMA_RECORD_FLAG_BITS_MAX_ENUM</a></div><div class="ttdeci">@ VMA_RECORD_FLAG_BITS_MAX_ENUM</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2398</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7">VMA_RECORD_FLUSH_AFTER_CALL_BIT</a></div><div class="ttdeci">@ VMA_RECORD_FLUSH_AFTER_CALL_BIT</div><div class="ttdoc">Enables flush after recording every function call.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2396</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7c"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a></div><div class="ttdeci">VmaAllocatorCreateFlagBits</div><div class="ttdoc">Flags for created VmaAllocator.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2238</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2313</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</div><div class="ttdoc">Allocator and all objects created from it will not be synchronized internally, so you must guarantee ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2243</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2295</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2331</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2283</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</div><div class="ttdoc">Enables usage of VK_KHR_dedicated_allocation extension.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2268</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c">VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2350</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2348</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a5225e5e11f8376f6a31a1791f3d6e817"><div class="ttname"><a href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a></div><div class="ttdeci">VkFlags VmaAllocationCreateFlags</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2894</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a5485779c8f1948238fc4e92232fa65e1"><div class="ttname"><a href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1">vmaDestroyPool</a></div><div class="ttdeci">void vmaDestroyPool(VmaAllocator allocator, VmaPool pool)</div><div class="ttdoc">Destroys VmaPool object and frees Vulkan device memory.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a5c8770ded7c59c8caac6de0c2cb00b50"><div class="ttname"><a href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50">vmaCreatePool</a></div><div class="ttdeci">VkResult vmaCreatePool(VmaAllocator allocator, const VmaPoolCreateInfo *pCreateInfo, VmaPool *pPool)</div><div class="ttdoc">Allocates Vulkan device memory and creates VmaPool object.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a5fea5518972ae9094b1526cbcb19b05f"><div class="ttname"><a href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a></div><div class="ttdeci">void vmaFreeMemory(VmaAllocator allocator, const VmaAllocation allocation)</div><div class="ttdoc">Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a6552a65b71d16f378c6994b3ceaef50c"><div class="ttname"><a href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a></div><div class="ttdeci">VmaDefragmentationFlagBits</div><div class="ttdoc">Flags to be used in vmaDefragmentationBegin(). None at the moment. Reserved for future use.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3656</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33"><div class="ttname"><a href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a></div><div class="ttdeci">@ VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3657</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97"><div class="ttname"><a href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97">VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM</a></div><div class="ttdeci">@ VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3658</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a6552a65b71d16f378c6994b3ceaef50c"><div class="ttname"><a href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a></div><div class="ttdeci">VmaDefragmentationFlagBits</div><div class="ttdoc">Flags to be used in vmaDefragmentationBegin(). None at the moment. Reserved for future use.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3653</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33"><div class="ttname"><a href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a></div><div class="ttdeci">@ VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3654</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97"><div class="ttname"><a href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97">VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM</a></div><div class="ttdeci">@ VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3655</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a6b0929b914b60cf2d45cac4bf3547470"><div class="ttname"><a href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a></div><div class="ttdeci">VkResult vmaBindBufferMemory(VmaAllocator allocator, VmaAllocation allocation, VkBuffer buffer)</div><div class="ttdoc">Binds buffer to allocation.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a72aebd522242d56abea67b4f47f6549e"><div class="ttname"><a href="vk__mem__alloc_8h.html#a72aebd522242d56abea67b4f47f6549e">VmaDefragmentationPassInfo</a></div><div class="ttdeci">struct VmaDefragmentationPassInfo VmaDefragmentationPassInfo</div><div class="ttdoc">Parameters for incremental defragmentation steps.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a736bd6cbda886f36c891727e73bd4024"><div class="ttname"><a href="vk__mem__alloc_8h.html#a736bd6cbda886f36c891727e73bd4024">vmaMakePoolAllocationsLost</a></div><div class="ttdeci">void vmaMakePoolAllocationsLost(VmaAllocator allocator, VmaPool pool, size_t *pLostAllocationCount)</div><div class="ttdoc">Marks all allocations in given pool as lost if they are not used in current frame or VmaPoolCreateInf...</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a77692d3c8770ea8882d573206bd27b2b"><div class="ttname"><a href="vk__mem__alloc_8h.html#a77692d3c8770ea8882d573206bd27b2b">VmaDeviceMemoryCallbacks</a></div><div class="ttdeci">struct VmaDeviceMemoryCallbacks VmaDeviceMemoryCallbacks</div><div class="ttdoc">Set of callbacks that the library will call for vkAllocateMemory and vkFreeMemory.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a7e1ed85f7799600b03ad51a77acc21f3"><div class="ttname"><a href="vk__mem__alloc_8h.html#a7e1ed85f7799600b03ad51a77acc21f3">PFN_vmaAllocateDeviceMemoryFunction</a></div><div class="ttdeci">void(VKAPI_PTR * PFN_vmaAllocateDeviceMemoryFunction)(VmaAllocator allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData)</div><div class="ttdoc">Callback function called after successful vkAllocateMemory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2210</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a7e1ed85f7799600b03ad51a77acc21f3"><div class="ttname"><a href="vk__mem__alloc_8h.html#a7e1ed85f7799600b03ad51a77acc21f3">PFN_vmaAllocateDeviceMemoryFunction</a></div><div class="ttdeci">void(VKAPI_PTR * PFN_vmaAllocateDeviceMemoryFunction)(VmaAllocator allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData)</div><div class="ttdoc">Callback function called after successful vkAllocateMemory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2207</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a7fdf64415b6c3d83c454f28d2c53df7b"><div class="ttname"><a href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer</a></div><div class="ttdeci">VkResult vmaAllocateMemoryForBuffer(VmaAllocator allocator, VkBuffer buffer, const VmaAllocationCreateInfo *pCreateInfo, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a834b1e4aef395c0a1d56a28e69a4a17e"><div class="ttname"><a href="vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e">vmaFreeMemoryPages</a></div><div class="ttdeci">void vmaFreeMemoryPages(VmaAllocator allocator, size_t allocationCount, const VmaAllocation *pAllocations)</div><div class="ttdoc">Frees memory and destroys multiple allocations.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a86dd08aba8633bfa4ad0df2e76481d8b"><div class="ttname"><a href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a></div><div class="ttdeci">void vmaGetAllocationInfo(VmaAllocator allocator, VmaAllocation allocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">Returns current information about specified allocation and atomically marks it as used in current fra...</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a8701444752eb5de4464adb5a2b514bca"><div class="ttname"><a href="vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca">vmaGetMemoryTypeProperties</a></div><div class="ttdeci">void vmaGetMemoryTypeProperties(VmaAllocator allocator, uint32_t memoryTypeIndex, VkMemoryPropertyFlags *pFlags)</div><div class="ttdoc">Given Memory Type Index, returns Property Flags of this memory type.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a8774e20e91e245aae959ba63efa15dd2"><div class="ttname"><a href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a></div><div class="ttdeci">VkResult vmaDefragmentationEnd(VmaAllocator allocator, VmaDefragmentationContext context)</div><div class="ttdoc">Ends defragmentation process.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a88a77cef37e5d3c4fc9eb328885d048d"><div class="ttname"><a href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a></div><div class="ttdeci">VkFlags VmaDefragmentationFlags</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3660</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a88a77cef37e5d3c4fc9eb328885d048d"><div class="ttname"><a href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a></div><div class="ttdeci">VkFlags VmaDefragmentationFlags</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3657</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a927c944f45e0f2941182abb6f608e64a"><div class="ttname"><a href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a">vmaBindBufferMemory2</a></div><div class="ttdeci">VkResult vmaBindBufferMemory2(VmaAllocator allocator, VmaAllocation allocation, VkDeviceSize allocationLocalOffset, VkBuffer buffer, const void *pNext)</div><div class="ttdoc">Binds buffer to allocation with additional parameters.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a9a7c45f9c863695d98c83fa5ac940fe7"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a></div><div class="ttdeci">VmaPoolCreateFlagBits</div><div class="ttdoc">Flags to be passed as VmaPoolCreateInfo::flags.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3008</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a></div><div class="ttdeci">@ VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</div><div class="ttdoc">Enables alternative, linear allocation algorithm in this pool.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3043</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec">VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM</a></div><div class="ttdeci">@ VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3062</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a></div><div class="ttdeci">@ VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</div><div class="ttdoc">Enables alternative, buddy allocation algorithm in this pool.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3054</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT</a></div><div class="ttdeci">@ VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT</div><div class="ttdoc">Use this flag if you always allocate only buffers and linear images or only optimal images out of thi...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3026</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c">VMA_POOL_CREATE_ALGORITHM_MASK</a></div><div class="ttdeci">@ VMA_POOL_CREATE_ALGORITHM_MASK</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3058</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a9a7c45f9c863695d98c83fa5ac940fe7"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a></div><div class="ttdeci">VmaPoolCreateFlagBits</div><div class="ttdoc">Flags to be passed as VmaPoolCreateInfo::flags.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3005</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a></div><div class="ttdeci">@ VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</div><div class="ttdoc">Enables alternative, linear allocation algorithm in this pool.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3040</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec">VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM</a></div><div class="ttdeci">@ VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3059</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a></div><div class="ttdeci">@ VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</div><div class="ttdoc">Enables alternative, buddy allocation algorithm in this pool.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3051</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT</a></div><div class="ttdeci">@ VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT</div><div class="ttdoc">Use this flag if you always allocate only buffers and linear images or only optimal images out of thi...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3023</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c">VMA_POOL_CREATE_ALGORITHM_MASK</a></div><div class="ttdeci">@ VMA_POOL_CREATE_ALGORITHM_MASK</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:3055</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a9bc268595cb33f6ec4d519cfce81ff45"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a></div><div class="ttdeci">void vmaUnmapMemory(VmaAllocator allocator, VmaAllocation allocation)</div><div class="ttdoc">Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a9f0f8f56db5f7f57fe4454f465142dac"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac">vmaDefragment</a></div><div class="ttdeci">VkResult vmaDefragment(VmaAllocator allocator, const VmaAllocation *pAllocations, size_t allocationCount, VkBool32 *pAllocationsChanged, const VmaDefragmentationInfo *pDefragmentationInfo, VmaDefragmentationStats *pDefragmentationStats)</div><div class="ttdoc">Deprecated. Compacts memory by moving allocations.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_aa06a690013a0d01e60894ac378083834"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834">vmaCreateBufferWithAlignment</a></div><div class="ttdeci">VkResult vmaCreateBufferWithAlignment(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkDeviceSize minAlignment, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">Creates a buffer with additional minimum alignment.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_aa078667e71b1ef24e87a6a30d128381d"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa078667e71b1ef24e87a6a30d128381d">VmaBudget</a></div><div class="ttdeci">struct VmaBudget VmaBudget</div><div class="ttdoc">Statistics of current memory usage and available budget, in bytes, for specific memory heap.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_aa4fee7eb5253377599ef4fd38c93c2a0"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0">vmaBuildStatsString</a></div><div class="ttdeci">void vmaBuildStatsString(VmaAllocator allocator, char **ppStatsString, VkBool32 detailedMap)</div><div class="ttdoc">Builds and returns statistics as string in JSON format.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cc"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a></div><div class="ttdeci">VmaMemoryUsage</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2721</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e">VMA_MEMORY_USAGE_MAX_ENUM</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_MAX_ENUM</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2784</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_CPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2752</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500">VMA_MEMORY_USAGE_CPU_COPY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_CPU_COPY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2774</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_TO_CPU</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2768</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2782</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_CPU_TO_GPU</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2759</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2742</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_UNKNOWN</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2725</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cc"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a></div><div class="ttdeci">VmaMemoryUsage</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2718</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e">VMA_MEMORY_USAGE_MAX_ENUM</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_MAX_ENUM</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2781</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_CPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2749</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500">VMA_MEMORY_USAGE_CPU_COPY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_CPU_COPY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2771</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_TO_CPU</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2765</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2779</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_CPU_TO_GPU</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2756</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2739</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_UNKNOWN</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2722</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_aa8251ee81b0045a443e35b8e8aa021bc"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc">vmaBindImageMemory2</a></div><div class="ttdeci">VkResult vmaBindImageMemory2(VmaAllocator allocator, VmaAllocation allocation, VkDeviceSize allocationLocalOffset, VkImage image, const void *pNext)</div><div class="ttdoc">Binds image to allocation with additional parameters.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_aa8d164061c88f22fb1fd3c8f3534bc1d"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d">vmaDestroyAllocator</a></div><div class="ttdeci">void vmaDestroyAllocator(VmaAllocator allocator)</div><div class="ttdoc">Destroys allocator object.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_aaa8412919139ef413a4215ac6a290fae"><div class="ttname"><a href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae">vmaInvalidateAllocation</a></div><div class="ttdeci">VkResult vmaInvalidateAllocation(VmaAllocator allocator, VmaAllocation allocation, VkDeviceSize offset, VkDeviceSize size)</div><div class="ttdoc">Invalidates memory of given allocation.</div></div>
@@ -16745,31 +16747,31 @@
 <div class="ttc" id="avk__mem__alloc_8h_html_ac0f01545b6262f7d4d128fc8f8e5c77b"><div class="ttname"><a href="vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b">vmaBeginDefragmentationPass</a></div><div class="ttdeci">VkResult vmaBeginDefragmentationPass(VmaAllocator allocator, VmaDefragmentationContext context, VmaDefragmentationPassInfo *pInfo)</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ac3dd00da721875ed99fa8a881922bdfc"><div class="ttname"><a href="vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc">vmaFlushAllocations</a></div><div class="ttdeci">VkResult vmaFlushAllocations(VmaAllocator allocator, uint32_t allocationCount, const VmaAllocation *allocations, const VkDeviceSize *offsets, const VkDeviceSize *sizes)</div><div class="ttdoc">Flushes memory of given set of allocations.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_acfe6863e160722c2c1bbcf7573fddc4d"><div class="ttname"><a href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a></div><div class="ttdeci">VkFlags VmaAllocatorCreateFlags</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2355</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_acfe6863e160722c2c1bbcf7573fddc4d"><div class="ttname"><a href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a></div><div class="ttdeci">VkFlags VmaAllocatorCreateFlags</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2352</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ad37e82e492b3de38fc3f4cffd9ad0ae1"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1">vmaAllocateMemoryPages</a></div><div class="ttdeci">VkResult vmaAllocateMemoryPages(VmaAllocator allocator, const VkMemoryRequirements *pVkMemoryRequirements, const VmaAllocationCreateInfo *pCreateInfo, size_t allocationCount, VmaAllocation *pAllocations, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">General purpose memory allocation for multiple allocation objects at once.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ad535935619c7a549bf837e1bb0068f89"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89">vmaCheckPoolCorruption</a></div><div class="ttdeci">VkResult vmaCheckPoolCorruption(VmaAllocator allocator, VmaPool pool)</div><div class="ttdoc">Checks magic number in margins around all allocations in given memory pool in search for corruptions.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ad5bd1243512d099706de88168992f069"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069">vmaMapMemory</a></div><div class="ttdeci">VkResult vmaMapMemory(VmaAllocator allocator, VmaAllocation allocation, void **ppData)</div><div class="ttdoc">Maps memory represented by given allocation and returns pointer to it.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ad6799e8e2b1527abfc84d33bc44aeaf5"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad6799e8e2b1527abfc84d33bc44aeaf5">VmaDefragmentationPassMoveInfo</a></div><div class="ttdeci">struct VmaDefragmentationPassMoveInfo VmaDefragmentationPassMoveInfo</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ad6daeffaa670ce6d11a203a6224c9937"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad6daeffaa670ce6d11a203a6224c9937">VmaDefragmentationInfo2</a></div><div class="ttdeci">struct VmaDefragmentationInfo2 VmaDefragmentationInfo2</div><div class="ttdoc">Parameters for defragmentation.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ad94034192259c2e34a4d1c5e27810403"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad94034192259c2e34a4d1c5e27810403">VmaDefragmentationStats</a></div><div class="ttdeci">struct VmaDefragmentationStats VmaDefragmentationStats</div><div class="ttdoc">Statistics returned by function vmaDefragment().</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a></div><div class="ttdeci">VmaAllocationCreateFlagBits</div><div class="ttdoc">Flags to be passed as VmaAllocationCreateInfo::flags.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2788</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2883</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_MAPPED_BIT</div><div class="ttdoc">Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2819</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">VMA_ALLOCATION_CREATE_DONT_BIND_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_DONT_BIND_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2856</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2876</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</div><div class="ttdoc">Set this flag if the allocation should have its own memory block.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2795</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2850</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2">VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2832</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706">VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2886</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2839</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2865</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</div><div class="ttdoc">Set this flag to only try to allocate from existing VkDeviceMemory blocks and never create new such b...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2806</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2880</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e">VMA_ALLOCATION_CREATE_STRATEGY_MASK</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_STRATEGY_MASK</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2890</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2845</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2860</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2869</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882">VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2895</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a></div><div class="ttdeci">VmaAllocationCreateFlagBits</div><div class="ttdoc">Flags to be passed as VmaAllocationCreateInfo::flags.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2785</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2880</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_MAPPED_BIT</div><div class="ttdoc">Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2816</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">VMA_ALLOCATION_CREATE_DONT_BIND_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_DONT_BIND_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2853</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2873</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</div><div class="ttdoc">Set this flag if the allocation should have its own memory block.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2792</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2847</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2">VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2829</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706">VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2883</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e">VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2836</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2862</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</div><div class="ttdoc">Set this flag to only try to allocate from existing VkDeviceMemory blocks and never create new such b...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2803</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2877</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e">VMA_ALLOCATION_CREATE_STRATEGY_MASK</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_STRATEGY_MASK</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2887</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2842</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2857</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2866</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882">VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2892</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_adbae3a0b4ab078024462fc85c37f3b58"><div class="ttname"><a href="vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58">vmaSetPoolName</a></div><div class="ttdeci">void vmaSetPoolName(VmaAllocator allocator, VmaPool pool, const char *pName)</div><div class="ttdoc">Sets name of a custom pool.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ade56bf8dc9f5a5eaddf5f119ed525236"><div class="ttname"><a href="vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236">vmaSetCurrentFrameIndex</a></div><div class="ttdeci">void vmaSetCurrentFrameIndex(VmaAllocator allocator, uint32_t frameIndex)</div><div class="ttdoc">Sets index of the current frame.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_ae50d2cb3b4a3bfd4dd40987234e50e7e"><div class="ttname"><a href="vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e">vmaDestroyImage</a></div><div class="ttdeci">void vmaDestroyImage(VmaAllocator allocator, VkImage image, VmaAllocation allocation)</div><div class="ttdoc">Destroys Vulkan image and frees allocated memory.</div></div>
@@ -16781,7 +16783,7 @@
 <div class="ttc" id="avk__mem__alloc_8h_html_aecabf7b6e91ea87d0316fa0a9e014fe0"><div class="ttname"><a href="vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0">vmaGetPhysicalDeviceProperties</a></div><div class="ttdeci">void vmaGetPhysicalDeviceProperties(VmaAllocator allocator, const VkPhysicalDeviceProperties **ppPhysicalDeviceProperties)</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_aef15a94b58fbcb0fe706d5720e84a74a"><div class="ttname"><a href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a></div><div class="ttdeci">VkResult vmaFindMemoryTypeIndex(VmaAllocator allocator, uint32_t memoryTypeBits, const VmaAllocationCreateInfo *pAllocationCreateInfo, uint32_t *pMemoryTypeIndex)</div><div class="ttdoc">Helps to find memoryTypeIndex, given memoryTypeBits and VmaAllocationCreateInfo.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_af09b4e4eafdbee812e8d73ddf960f030"><div class="ttname"><a href="vk__mem__alloc_8h.html#af09b4e4eafdbee812e8d73ddf960f030">vmaGetPoolName</a></div><div class="ttdeci">void vmaGetPoolName(VmaAllocator allocator, VmaPool pool, const char **ppName)</div><div class="ttdoc">Retrieves name of a custom pool.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_af3929a1a4547c592fc0b0e55ef452828"><div class="ttname"><a href="vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828">VmaRecordFlags</a></div><div class="ttdeci">VkFlags VmaRecordFlags</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2403</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_af3929a1a4547c592fc0b0e55ef452828"><div class="ttname"><a href="vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828">VmaRecordFlags</a></div><div class="ttdeci">VkFlags VmaRecordFlags</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2400</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_af9147d31ffc11d62fc187bde283ed14f"><div class="ttname"><a href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f">vmaSetAllocationUserData</a></div><div class="ttdeci">void vmaSetAllocationUserData(VmaAllocator allocator, VmaAllocation allocation, void *pUserData)</div><div class="ttdoc">Sets pUserData in given allocation to new value.</div></div>
 <div class="ttc" id="avk__mem__alloc_8h_html_afa02231a791b37255720d566a52683e7"><div class="ttname"><a href="vk__mem__alloc_8h.html#afa02231a791b37255720d566a52683e7">vmaGetAllocatorInfo</a></div><div class="ttdeci">void vmaGetAllocatorInfo(VmaAllocator allocator, VmaAllocatorInfo *pAllocatorInfo)</div><div class="ttdoc">Returns information about existing VmaAllocator object - handle to Vulkan device etc.</div></div>
 </div><!-- fragment --></div><!-- contents -->
diff --git a/docs/html/vk_khr_dedicated_allocation.html b/docs/html/vk_khr_dedicated_allocation.html
index a5e9410..309f0c5 100644
--- a/docs/html/vk_khr_dedicated_allocation.html
+++ b/docs/html/vk_khr_dedicated_allocation.html
@@ -82,7 +82,7 @@
 <div class="line"> </div>
 <div class="line"><a class="code" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a>(&amp;allocatorInfo, &amp;allocator);</div>
 <div class="ttc" id="avk__mem__alloc_8h_html_a200692051ddb34240248234f5f4c17bb"><div class="ttname"><a href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a></div><div class="ttdeci">VkResult vmaCreateAllocator(const VmaAllocatorCreateInfo *pCreateInfo, VmaAllocator *pAllocator)</div><div class="ttdoc">Creates Allocator object.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</div><div class="ttdoc">Enables usage of VK_KHR_dedicated_allocation extension.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2271</div></div>
+<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</div><div class="ttdoc">Enables usage of VK_KHR_dedicated_allocation extension.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:2268</div></div>
 </div><!-- fragment --><p>That's all. The extension will be automatically used whenever you create a buffer using <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a> or image using <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>.</p>
 <p>When using the extension together with Vulkan Validation Layer, you will receive warnings like this: </p><pre class="fragment">vkBindBufferMemory(): Binding memory to buffer 0x33 but vkGetBufferMemoryRequirements() has not been called on that buffer.
 </pre><p> It is OK, you should just ignore it. It happens because you use function <code>vkGetBufferMemoryRequirements2KHR()</code> instead of standard <code>vkGetBufferMemoryRequirements()</code>, while the validation layer seems to be unaware of it.</p>
diff --git a/include/vk_mem_alloc.h b/include/vk_mem_alloc.h
index dbaeee9..d951e09 100644
--- a/include/vk_mem_alloc.h
+++ b/include/vk_mem_alloc.h
@@ -1987,32 +1987,29 @@
 

 Features deliberately excluded from the scope of this library:

 

-- Data transfer. Uploading (streaming) and downloading data of buffers and images

+- **Data transfer.** Uploading (streaming) and downloading data of buffers and images

   between CPU and GPU memory and related synchronization is responsibility of the user.

   Defining some "texture" object that would automatically stream its data from a

   staging copy in CPU memory to GPU memory would rather be a feature of another,

   higher-level library implemented on top of VMA.

-- Allocations for imported/exported external memory. They tend to require

-  explicit memory type index and dedicated allocation anyway, so they don't

-  interact with main features of this library. Such special purpose allocations

-  should be made manually, using `vkCreateBuffer()` and `vkAllocateMemory()`.

-- Sub-allocation of parts of one large buffer. Although recommended as a good practice,

-  it is the user's responsibility to implement such logic on top of VMA.

-- Recreation of buffers and images. Although the library has functions for

+- **Recreation of buffers and images.** Although the library has functions for

   buffer and image creation (vmaCreateBuffer(), vmaCreateImage()), you need to

   recreate these objects yourself after defragmentation. That's because the big

   structures `VkBufferCreateInfo`, `VkImageCreateInfo` are not stored in

   #VmaAllocation object.

-- Handling CPU memory allocation failures. When dynamically creating small C++

+- **Handling CPU memory allocation failures.** When dynamically creating small C++

   objects in CPU memory (not Vulkan memory), allocation failures are not checked

   and handled gracefully, because that would complicate code significantly and

   is usually not needed in desktop PC applications anyway.

   Success of an allocation is just checked with an assert.

-- Code free of any compiler warnings. Maintaining the library to compile and

+- **Code free of any compiler warnings.** Maintaining the library to compile and

   work correctly on so many different platforms is hard enough. Being free of

   any warnings, on any version of any compiler, is simply not feasible.

-- This is a C++ library with C interface.

-  Bindings or ports to any other programming languages are welcomed as external projects and

+  There are many preprocessor macros that make some variables unused, function parameters unreferenced,

+  or conditional expressions constant in some configurations.

+  The code of this library should not be bigger or more complicated just to silence these warnings.

+  It is recommended to disable such warnings instead.

+- This is a C++ library with C interface. **Bindings or ports to any other programming languages** are welcome as external projects but

   are not going to be included into this repository.

 

 */

@@ -9563,7 +9560,6 @@
         m_Suballocations.size() - (size_t)m_FreeCount, // allocationCount

         m_FreeCount); // unusedRangeCount

 

-    size_t i = 0;

     for(const auto& suballoc : m_Suballocations)

     {

         if(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE)