Publish version 2.3.0 final

Updated version number. Regenerated Release binaries and Doxygen documentation.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7d69f97..87ad08d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,4 @@
-# 2.3.0-alpha.1 (2019-11-25)

+# 2.3.0 (2019-12-04)

 

 Major release after a year of development in "master" branch and feature branches. Notable new features: supporting Vulkan 1.1, supporting query for memory budget.

 

diff --git a/bin/VmaReplay_Release_vs2019.exe b/bin/VmaReplay_Release_vs2019.exe
index afb2137..59552c5 100644
--- a/bin/VmaReplay_Release_vs2019.exe
+++ b/bin/VmaReplay_Release_vs2019.exe
Binary files differ
diff --git a/bin/VulkanSample_Release_vs2019.exe b/bin/VulkanSample_Release_vs2019.exe
index 31fe0d3..4940505 100644
--- a/bin/VulkanSample_Release_vs2019.exe
+++ b/bin/VulkanSample_Release_vs2019.exe
Binary files differ
diff --git a/docs/html/index.html b/docs/html/index.html
index 0ff700a..bbfb810 100644
--- a/docs/html/index.html
+++ b/docs/html/index.html
@@ -65,7 +65,7 @@
 <div class="title">Vulkan Memory Allocator </div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="textblock"><p><b>Version 2.3.0-alpha.1</b> (2019-11-25)</p>
+<div class="textblock"><p><b>Version 2.3.0</b> (2019-12-04)</p>
 <p>Copyright (c) 2017-2019 Advanced Micro Devices, Inc. All rights reserved. <br  />
 License: MIT</p>
 <p>Documentation of all members: <a class="el" href="vk__mem__alloc_8h.html">vk_mem_alloc.h</a></p>
diff --git a/docs/html/vk__mem__alloc_8h_source.html b/docs/html/vk__mem__alloc_8h_source.html
index 4c50d1c..ec5240e 100644
--- a/docs/html/vk__mem__alloc_8h_source.html
+++ b/docs/html/vk__mem__alloc_8h_source.html
@@ -3455,7 +3455,7 @@
 <div class="line"><a name="l06278"></a><span class="lineno"> 6278</span>&#160; </div>
 <div class="line"><a name="l06279"></a><span class="lineno"> 6279</span>&#160;    <span class="keywordtype">void</span> GetPoolStats(<a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>* pStats);</div>
 <div class="line"><a name="l06280"></a><span class="lineno"> 6280</span>&#160; </div>
-<div class="line"><a name="l06281"></a><span class="lineno"> 6281</span>&#160;    <span class="keywordtype">bool</span> IsEmpty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_Blocks.empty(); }</div>
+<div class="line"><a name="l06281"></a><span class="lineno"> 6281</span>&#160;    <span class="keywordtype">bool</span> IsEmpty();</div>
 <div class="line"><a name="l06282"></a><span class="lineno"> 6282</span>&#160;    <span class="keywordtype">bool</span> IsCorruptionDetectionEnabled() <span class="keyword">const</span>;</div>
 <div class="line"><a name="l06283"></a><span class="lineno"> 6283</span>&#160; </div>
 <div class="line"><a name="l06284"></a><span class="lineno"> 6284</span>&#160;    VkResult Allocate(</div>
@@ -8994,5927 +8994,5933 @@
 <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; </div>
-<div class="line"><a name="l11830"></a><span class="lineno">11830</span>&#160;<span class="keywordtype">bool</span> VmaBlockVector::IsCorruptionDetectionEnabled()<span class="keyword"> const</span></div>
-<div class="line"><a name="l11831"></a><span class="lineno">11831</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l11832"></a><span class="lineno">11832</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="l11833"></a><span class="lineno">11833</span>&#160;    <span class="keywordflow">return</span> (VMA_DEBUG_DETECT_CORRUPTION != 0) &amp;&amp;</div>
-<div class="line"><a name="l11834"></a><span class="lineno">11834</span>&#160;        (VMA_DEBUG_MARGIN &gt; 0) &amp;&amp;</div>
-<div class="line"><a name="l11835"></a><span class="lineno">11835</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="l11836"></a><span class="lineno">11836</span>&#160;        (m_hAllocator-&gt;m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags &amp; requiredMemFlags) == requiredMemFlags;</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; </div>
-<div class="line"><a name="l11839"></a><span class="lineno">11839</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="l11840"></a><span class="lineno">11840</span>&#160; </div>
-<div class="line"><a name="l11841"></a><span class="lineno">11841</span>&#160;VkResult VmaBlockVector::Allocate(</div>
-<div class="line"><a name="l11842"></a><span class="lineno">11842</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l11843"></a><span class="lineno">11843</span>&#160;    VkDeviceSize size,</div>
-<div class="line"><a name="l11844"></a><span class="lineno">11844</span>&#160;    VkDeviceSize alignment,</div>
-<div class="line"><a name="l11845"></a><span class="lineno">11845</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="l11846"></a><span class="lineno">11846</span>&#160;    VmaSuballocationType suballocType,</div>
-<div class="line"><a name="l11847"></a><span class="lineno">11847</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l11848"></a><span class="lineno">11848</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</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;    <span class="keywordtype">size_t</span> allocIndex;</div>
-<div class="line"><a name="l11851"></a><span class="lineno">11851</span>&#160;    VkResult res = VK_SUCCESS;</div>
-<div class="line"><a name="l11852"></a><span class="lineno">11852</span>&#160; </div>
-<div class="line"><a name="l11853"></a><span class="lineno">11853</span>&#160;    <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</div>
-<div class="line"><a name="l11854"></a><span class="lineno">11854</span>&#160;    {</div>
-<div class="line"><a name="l11855"></a><span class="lineno">11855</span>&#160;        size = VmaAlignUp&lt;VkDeviceSize&gt;(size, <span class="keyword">sizeof</span>(VMA_CORRUPTION_DETECTION_MAGIC_VALUE));</div>
-<div class="line"><a name="l11856"></a><span class="lineno">11856</span>&#160;        alignment = VmaAlignUp&lt;VkDeviceSize&gt;(alignment, <span class="keyword">sizeof</span>(VMA_CORRUPTION_DETECTION_MAGIC_VALUE));</div>
-<div class="line"><a name="l11857"></a><span class="lineno">11857</span>&#160;    }</div>
+<div class="line"><a name="l11830"></a><span class="lineno">11830</span>&#160;<span class="keywordtype">bool</span> VmaBlockVector::IsEmpty()</div>
+<div class="line"><a name="l11831"></a><span class="lineno">11831</span>&#160;{</div>
+<div class="line"><a name="l11832"></a><span class="lineno">11832</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l11833"></a><span class="lineno">11833</span>&#160;    <span class="keywordflow">return</span> m_Blocks.empty();</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; </div>
+<div class="line"><a name="l11836"></a><span class="lineno">11836</span>&#160;<span class="keywordtype">bool</span> VmaBlockVector::IsCorruptionDetectionEnabled()<span class="keyword"> const</span></div>
+<div class="line"><a name="l11837"></a><span class="lineno">11837</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l11838"></a><span class="lineno">11838</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="l11839"></a><span class="lineno">11839</span>&#160;    <span class="keywordflow">return</span> (VMA_DEBUG_DETECT_CORRUPTION != 0) &amp;&amp;</div>
+<div class="line"><a name="l11840"></a><span class="lineno">11840</span>&#160;        (VMA_DEBUG_MARGIN &gt; 0) &amp;&amp;</div>
+<div class="line"><a name="l11841"></a><span class="lineno">11841</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="l11842"></a><span class="lineno">11842</span>&#160;        (m_hAllocator-&gt;m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags &amp; requiredMemFlags) == requiredMemFlags;</div>
+<div class="line"><a name="l11843"></a><span class="lineno">11843</span>&#160;}</div>
+<div class="line"><a name="l11844"></a><span class="lineno">11844</span>&#160; </div>
+<div class="line"><a name="l11845"></a><span class="lineno">11845</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="l11846"></a><span class="lineno">11846</span>&#160; </div>
+<div class="line"><a name="l11847"></a><span class="lineno">11847</span>&#160;VkResult VmaBlockVector::Allocate(</div>
+<div class="line"><a name="l11848"></a><span class="lineno">11848</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l11849"></a><span class="lineno">11849</span>&#160;    VkDeviceSize size,</div>
+<div class="line"><a name="l11850"></a><span class="lineno">11850</span>&#160;    VkDeviceSize alignment,</div>
+<div class="line"><a name="l11851"></a><span class="lineno">11851</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="l11852"></a><span class="lineno">11852</span>&#160;    VmaSuballocationType suballocType,</div>
+<div class="line"><a name="l11853"></a><span class="lineno">11853</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l11854"></a><span class="lineno">11854</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</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;    <span class="keywordtype">size_t</span> allocIndex;</div>
+<div class="line"><a name="l11857"></a><span class="lineno">11857</span>&#160;    VkResult res = VK_SUCCESS;</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;    {</div>
-<div class="line"><a name="l11860"></a><span class="lineno">11860</span>&#160;        VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l11861"></a><span class="lineno">11861</span>&#160;        <span class="keywordflow">for</span>(allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</div>
-<div class="line"><a name="l11862"></a><span class="lineno">11862</span>&#160;        {</div>
-<div class="line"><a name="l11863"></a><span class="lineno">11863</span>&#160;            res = AllocatePage(</div>
-<div class="line"><a name="l11864"></a><span class="lineno">11864</span>&#160;                currentFrameIndex,</div>
-<div class="line"><a name="l11865"></a><span class="lineno">11865</span>&#160;                size,</div>
-<div class="line"><a name="l11866"></a><span class="lineno">11866</span>&#160;                alignment,</div>
-<div class="line"><a name="l11867"></a><span class="lineno">11867</span>&#160;                createInfo,</div>
-<div class="line"><a name="l11868"></a><span class="lineno">11868</span>&#160;                suballocType,</div>
-<div class="line"><a name="l11869"></a><span class="lineno">11869</span>&#160;                pAllocations + allocIndex);</div>
-<div class="line"><a name="l11870"></a><span class="lineno">11870</span>&#160;            <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l11871"></a><span class="lineno">11871</span>&#160;            {</div>
-<div class="line"><a name="l11872"></a><span class="lineno">11872</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11873"></a><span class="lineno">11873</span>&#160;            }</div>
-<div class="line"><a name="l11874"></a><span class="lineno">11874</span>&#160;        }</div>
-<div class="line"><a name="l11875"></a><span class="lineno">11875</span>&#160;    }</div>
-<div class="line"><a name="l11876"></a><span class="lineno">11876</span>&#160; </div>
-<div class="line"><a name="l11877"></a><span class="lineno">11877</span>&#160;    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l11878"></a><span class="lineno">11878</span>&#160;    {</div>
-<div class="line"><a name="l11879"></a><span class="lineno">11879</span>&#160;        <span class="comment">// Free all already created allocations.</span></div>
-<div class="line"><a name="l11880"></a><span class="lineno">11880</span>&#160;        <span class="keywordflow">while</span>(allocIndex--)</div>
-<div class="line"><a name="l11881"></a><span class="lineno">11881</span>&#160;        {</div>
-<div class="line"><a name="l11882"></a><span class="lineno">11882</span>&#160;            Free(pAllocations[allocIndex]);</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;        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="l11885"></a><span class="lineno">11885</span>&#160;    }</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">return</span> res;</div>
-<div class="line"><a name="l11888"></a><span class="lineno">11888</span>&#160;}</div>
-<div class="line"><a name="l11889"></a><span class="lineno">11889</span>&#160; </div>
-<div class="line"><a name="l11890"></a><span class="lineno">11890</span>&#160;VkResult VmaBlockVector::AllocatePage(</div>
-<div class="line"><a name="l11891"></a><span class="lineno">11891</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l11892"></a><span class="lineno">11892</span>&#160;    VkDeviceSize size,</div>
-<div class="line"><a name="l11893"></a><span class="lineno">11893</span>&#160;    VkDeviceSize alignment,</div>
-<div class="line"><a name="l11894"></a><span class="lineno">11894</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="l11895"></a><span class="lineno">11895</span>&#160;    VmaSuballocationType suballocType,</div>
-<div class="line"><a name="l11896"></a><span class="lineno">11896</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</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;    <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="l11899"></a><span class="lineno">11899</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="l11900"></a><span class="lineno">11900</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="l11901"></a><span class="lineno">11901</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="l11902"></a><span class="lineno">11902</span>&#160;    </div>
-<div class="line"><a name="l11903"></a><span class="lineno">11903</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> withinBudget = (createInfo.<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="l11904"></a><span class="lineno">11904</span>&#160;    VkDeviceSize freeMemory;</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="keyword">const</span> uint32_t heapIndex = m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);</div>
-<div class="line"><a name="l11907"></a><span class="lineno">11907</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> heapBudget = {};</div>
-<div class="line"><a name="l11908"></a><span class="lineno">11908</span>&#160;        m_hAllocator-&gt;GetBudget(&amp;heapBudget, heapIndex, 1);</div>
-<div class="line"><a name="l11909"></a><span class="lineno">11909</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="l11910"></a><span class="lineno">11910</span>&#160;    }</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;    <span class="keyword">const</span> <span class="keywordtype">bool</span> canFallbackToDedicated = !IsCustomPool();</div>
-<div class="line"><a name="l11913"></a><span class="lineno">11913</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> canCreateNewBlock =</div>
-<div class="line"><a name="l11914"></a><span class="lineno">11914</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="l11915"></a><span class="lineno">11915</span>&#160;        (m_Blocks.size() &lt; m_MaxBlockCount) &amp;&amp;</div>
-<div class="line"><a name="l11916"></a><span class="lineno">11916</span>&#160;        (freeMemory &gt;= size || !canFallbackToDedicated);</div>
-<div class="line"><a name="l11917"></a><span class="lineno">11917</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="l11918"></a><span class="lineno">11918</span>&#160; </div>
-<div class="line"><a name="l11919"></a><span class="lineno">11919</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="l11920"></a><span class="lineno">11920</span>&#160;    <span class="comment">// Which in turn is available only when maxBlockCount = 1.</span></div>
-<div class="line"><a name="l11921"></a><span class="lineno">11921</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="l11922"></a><span class="lineno">11922</span>&#160;    {</div>
-<div class="line"><a name="l11923"></a><span class="lineno">11923</span>&#160;        canMakeOtherLost = <span class="keyword">false</span>;</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; </div>
-<div class="line"><a name="l11926"></a><span class="lineno">11926</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="l11927"></a><span class="lineno">11927</span>&#160;    <span class="keywordflow">if</span>(isUpperAddress &amp;&amp;</div>
-<div class="line"><a name="l11928"></a><span class="lineno">11928</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="l11929"></a><span class="lineno">11929</span>&#160;    {</div>
-<div class="line"><a name="l11930"></a><span class="lineno">11930</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</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">// Validate strategy.</span></div>
-<div class="line"><a name="l11934"></a><span class="lineno">11934</span>&#160;    <span class="keywordflow">switch</span>(strategy)</div>
+<div class="line"><a name="l11859"></a><span class="lineno">11859</span>&#160;    <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</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;        size = VmaAlignUp&lt;VkDeviceSize&gt;(size, <span class="keyword">sizeof</span>(VMA_CORRUPTION_DETECTION_MAGIC_VALUE));</div>
+<div class="line"><a name="l11862"></a><span class="lineno">11862</span>&#160;        alignment = VmaAlignUp&lt;VkDeviceSize&gt;(alignment, <span class="keyword">sizeof</span>(VMA_CORRUPTION_DETECTION_MAGIC_VALUE));</div>
+<div class="line"><a name="l11863"></a><span class="lineno">11863</span>&#160;    }</div>
+<div class="line"><a name="l11864"></a><span class="lineno">11864</span>&#160; </div>
+<div class="line"><a name="l11865"></a><span class="lineno">11865</span>&#160;    {</div>
+<div class="line"><a name="l11866"></a><span class="lineno">11866</span>&#160;        VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l11867"></a><span class="lineno">11867</span>&#160;        <span class="keywordflow">for</span>(allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</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;            res = AllocatePage(</div>
+<div class="line"><a name="l11870"></a><span class="lineno">11870</span>&#160;                currentFrameIndex,</div>
+<div class="line"><a name="l11871"></a><span class="lineno">11871</span>&#160;                size,</div>
+<div class="line"><a name="l11872"></a><span class="lineno">11872</span>&#160;                alignment,</div>
+<div class="line"><a name="l11873"></a><span class="lineno">11873</span>&#160;                createInfo,</div>
+<div class="line"><a name="l11874"></a><span class="lineno">11874</span>&#160;                suballocType,</div>
+<div class="line"><a name="l11875"></a><span class="lineno">11875</span>&#160;                pAllocations + allocIndex);</div>
+<div class="line"><a name="l11876"></a><span class="lineno">11876</span>&#160;            <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l11877"></a><span class="lineno">11877</span>&#160;            {</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;            }</div>
+<div class="line"><a name="l11880"></a><span class="lineno">11880</span>&#160;        }</div>
+<div class="line"><a name="l11881"></a><span class="lineno">11881</span>&#160;    }</div>
+<div class="line"><a name="l11882"></a><span class="lineno">11882</span>&#160; </div>
+<div class="line"><a name="l11883"></a><span class="lineno">11883</span>&#160;    <span class="keywordflow">if</span>(res != VK_SUCCESS)</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;        <span class="comment">// Free all already created allocations.</span></div>
+<div class="line"><a name="l11886"></a><span class="lineno">11886</span>&#160;        <span class="keywordflow">while</span>(allocIndex--)</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;            Free(pAllocations[allocIndex]);</div>
+<div class="line"><a name="l11889"></a><span class="lineno">11889</span>&#160;        }</div>
+<div class="line"><a name="l11890"></a><span class="lineno">11890</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="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;    <span class="keywordflow">return</span> res;</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;VkResult VmaBlockVector::AllocatePage(</div>
+<div class="line"><a name="l11897"></a><span class="lineno">11897</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l11898"></a><span class="lineno">11898</span>&#160;    VkDeviceSize size,</div>
+<div class="line"><a name="l11899"></a><span class="lineno">11899</span>&#160;    VkDeviceSize alignment,</div>
+<div class="line"><a name="l11900"></a><span class="lineno">11900</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="l11901"></a><span class="lineno">11901</span>&#160;    VmaSuballocationType suballocType,</div>
+<div class="line"><a name="l11902"></a><span class="lineno">11902</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
+<div class="line"><a name="l11903"></a><span class="lineno">11903</span>&#160;{</div>
+<div class="line"><a name="l11904"></a><span class="lineno">11904</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="l11905"></a><span class="lineno">11905</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="l11906"></a><span class="lineno">11906</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="l11907"></a><span class="lineno">11907</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="l11908"></a><span class="lineno">11908</span>&#160;    </div>
+<div class="line"><a name="l11909"></a><span class="lineno">11909</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> withinBudget = (createInfo.<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="l11910"></a><span class="lineno">11910</span>&#160;    VkDeviceSize freeMemory;</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;        <span class="keyword">const</span> uint32_t heapIndex = m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);</div>
+<div class="line"><a name="l11913"></a><span class="lineno">11913</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> heapBudget = {};</div>
+<div class="line"><a name="l11914"></a><span class="lineno">11914</span>&#160;        m_hAllocator-&gt;GetBudget(&amp;heapBudget, heapIndex, 1);</div>
+<div class="line"><a name="l11915"></a><span class="lineno">11915</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="l11916"></a><span class="lineno">11916</span>&#160;    }</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;    <span class="keyword">const</span> <span class="keywordtype">bool</span> canFallbackToDedicated = !IsCustomPool();</div>
+<div class="line"><a name="l11919"></a><span class="lineno">11919</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> canCreateNewBlock =</div>
+<div class="line"><a name="l11920"></a><span class="lineno">11920</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="l11921"></a><span class="lineno">11921</span>&#160;        (m_Blocks.size() &lt; m_MaxBlockCount) &amp;&amp;</div>
+<div class="line"><a name="l11922"></a><span class="lineno">11922</span>&#160;        (freeMemory &gt;= size || !canFallbackToDedicated);</div>
+<div class="line"><a name="l11923"></a><span class="lineno">11923</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="l11924"></a><span class="lineno">11924</span>&#160; </div>
+<div class="line"><a name="l11925"></a><span class="lineno">11925</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="l11926"></a><span class="lineno">11926</span>&#160;    <span class="comment">// Which in turn is available only when maxBlockCount = 1.</span></div>
+<div class="line"><a name="l11927"></a><span class="lineno">11927</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="l11928"></a><span class="lineno">11928</span>&#160;    {</div>
+<div class="line"><a name="l11929"></a><span class="lineno">11929</span>&#160;        canMakeOtherLost = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l11930"></a><span class="lineno">11930</span>&#160;    }</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;    <span class="comment">// Upper address can only be used with linear allocator and within single memory block.</span></div>
+<div class="line"><a name="l11933"></a><span class="lineno">11933</span>&#160;    <span class="keywordflow">if</span>(isUpperAddress &amp;&amp;</div>
+<div class="line"><a name="l11934"></a><span class="lineno">11934</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="l11935"></a><span class="lineno">11935</span>&#160;    {</div>
-<div class="line"><a name="l11936"></a><span class="lineno">11936</span>&#160;    <span class="keywordflow">case</span> 0:</div>
-<div class="line"><a name="l11937"></a><span class="lineno">11937</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="l11938"></a><span class="lineno">11938</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11939"></a><span class="lineno">11939</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="l11940"></a><span class="lineno">11940</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="l11941"></a><span class="lineno">11941</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="l11942"></a><span class="lineno">11942</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l11943"></a><span class="lineno">11943</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l11944"></a><span class="lineno">11944</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</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">// Early reject: requested allocation size is larger that maximum block size for this block vector.</span></div>
-<div class="line"><a name="l11948"></a><span class="lineno">11948</span>&#160;    <span class="keywordflow">if</span>(size + 2 * VMA_DEBUG_MARGIN &gt; m_PreferredBlockSize)</div>
-<div class="line"><a name="l11949"></a><span class="lineno">11949</span>&#160;    {</div>
-<div class="line"><a name="l11950"></a><span class="lineno">11950</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l11936"></a><span class="lineno">11936</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</div>
+<div class="line"><a name="l11937"></a><span class="lineno">11937</span>&#160;    }</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;    <span class="comment">// Validate strategy.</span></div>
+<div class="line"><a name="l11940"></a><span class="lineno">11940</span>&#160;    <span class="keywordflow">switch</span>(strategy)</div>
+<div class="line"><a name="l11941"></a><span class="lineno">11941</span>&#160;    {</div>
+<div class="line"><a name="l11942"></a><span class="lineno">11942</span>&#160;    <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l11943"></a><span class="lineno">11943</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="l11944"></a><span class="lineno">11944</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11945"></a><span class="lineno">11945</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="l11946"></a><span class="lineno">11946</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="l11947"></a><span class="lineno">11947</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="l11948"></a><span class="lineno">11948</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l11949"></a><span class="lineno">11949</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l11950"></a><span class="lineno">11950</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</div>
 <div class="line"><a name="l11951"></a><span class="lineno">11951</span>&#160;    }</div>
 <div class="line"><a name="l11952"></a><span class="lineno">11952</span>&#160; </div>
-<div class="line"><a name="l11953"></a><span class="lineno">11953</span>&#160;    <span class="comment">/*</span></div>
-<div class="line"><a name="l11954"></a><span class="lineno">11954</span>&#160;<span class="comment">    Under certain condition, this whole section can be skipped for optimization, so</span></div>
-<div class="line"><a name="l11955"></a><span class="lineno">11955</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="l11956"></a><span class="lineno">11956</span>&#160;<span class="comment">    e.g. for custom pools with linear algorithm.</span></div>
-<div class="line"><a name="l11957"></a><span class="lineno">11957</span>&#160;<span class="comment">    */</span></div>
-<div class="line"><a name="l11958"></a><span class="lineno">11958</span>&#160;    <span class="keywordflow">if</span>(!canMakeOtherLost || canCreateNewBlock)</div>
-<div class="line"><a name="l11959"></a><span class="lineno">11959</span>&#160;    {</div>
-<div class="line"><a name="l11960"></a><span class="lineno">11960</span>&#160;        <span class="comment">// 1. Search existing allocations. Try to allocate without making other allocations lost.</span></div>
-<div class="line"><a name="l11961"></a><span class="lineno">11961</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="l11962"></a><span class="lineno">11962</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="l11963"></a><span class="lineno">11963</span>&#160; </div>
-<div class="line"><a name="l11964"></a><span class="lineno">11964</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="l11965"></a><span class="lineno">11965</span>&#160;        {</div>
-<div class="line"><a name="l11966"></a><span class="lineno">11966</span>&#160;            <span class="comment">// Use only last block.</span></div>
-<div class="line"><a name="l11967"></a><span class="lineno">11967</span>&#160;            <span class="keywordflow">if</span>(!m_Blocks.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;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks.back();</div>
-<div class="line"><a name="l11970"></a><span class="lineno">11970</span>&#160;                VMA_ASSERT(pCurrBlock);</div>
-<div class="line"><a name="l11971"></a><span class="lineno">11971</span>&#160;                VkResult res = AllocateFromBlock(</div>
-<div class="line"><a name="l11972"></a><span class="lineno">11972</span>&#160;                    pCurrBlock,</div>
-<div class="line"><a name="l11973"></a><span class="lineno">11973</span>&#160;                    currentFrameIndex,</div>
-<div class="line"><a name="l11974"></a><span class="lineno">11974</span>&#160;                    size,</div>
-<div class="line"><a name="l11975"></a><span class="lineno">11975</span>&#160;                    alignment,</div>
-<div class="line"><a name="l11976"></a><span class="lineno">11976</span>&#160;                    allocFlagsCopy,</div>
-<div class="line"><a name="l11977"></a><span class="lineno">11977</span>&#160;                    createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
-<div class="line"><a name="l11978"></a><span class="lineno">11978</span>&#160;                    suballocType,</div>
-<div class="line"><a name="l11979"></a><span class="lineno">11979</span>&#160;                    strategy,</div>
-<div class="line"><a name="l11980"></a><span class="lineno">11980</span>&#160;                    pAllocation);</div>
-<div class="line"><a name="l11981"></a><span class="lineno">11981</span>&#160;                <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l11982"></a><span class="lineno">11982</span>&#160;                {</div>
-<div class="line"><a name="l11983"></a><span class="lineno">11983</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="l11984"></a><span class="lineno">11984</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</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;        <span class="keywordflow">else</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;            <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="l11991"></a><span class="lineno">11991</span>&#160;            {</div>
-<div class="line"><a name="l11992"></a><span class="lineno">11992</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="l11993"></a><span class="lineno">11993</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="l11994"></a><span class="lineno">11994</span>&#160;                {</div>
-<div class="line"><a name="l11995"></a><span class="lineno">11995</span>&#160;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l11996"></a><span class="lineno">11996</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
-<div class="line"><a name="l11997"></a><span class="lineno">11997</span>&#160;                    VkResult res = AllocateFromBlock(</div>
-<div class="line"><a name="l11998"></a><span class="lineno">11998</span>&#160;                        pCurrBlock,</div>
-<div class="line"><a name="l11999"></a><span class="lineno">11999</span>&#160;                        currentFrameIndex,</div>
-<div class="line"><a name="l12000"></a><span class="lineno">12000</span>&#160;                        size,</div>
-<div class="line"><a name="l12001"></a><span class="lineno">12001</span>&#160;                        alignment,</div>
-<div class="line"><a name="l12002"></a><span class="lineno">12002</span>&#160;                        allocFlagsCopy,</div>
-<div class="line"><a name="l12003"></a><span class="lineno">12003</span>&#160;                        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
-<div class="line"><a name="l12004"></a><span class="lineno">12004</span>&#160;                        suballocType,</div>
-<div class="line"><a name="l12005"></a><span class="lineno">12005</span>&#160;                        strategy,</div>
-<div class="line"><a name="l12006"></a><span class="lineno">12006</span>&#160;                        pAllocation);</div>
-<div class="line"><a name="l12007"></a><span class="lineno">12007</span>&#160;                    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l12008"></a><span class="lineno">12008</span>&#160;                    {</div>
-<div class="line"><a name="l12009"></a><span class="lineno">12009</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="l12010"></a><span class="lineno">12010</span>&#160;                        <span class="keywordflow">return</span> VK_SUCCESS;</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;                }</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="keywordflow">else</span> <span class="comment">// WORST_FIT, FIRST_FIT</span></div>
-<div class="line"><a name="l12015"></a><span class="lineno">12015</span>&#160;            {</div>
-<div class="line"><a name="l12016"></a><span class="lineno">12016</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="l12017"></a><span class="lineno">12017</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = m_Blocks.size(); blockIndex--; )</div>
-<div class="line"><a name="l12018"></a><span class="lineno">12018</span>&#160;                {</div>
-<div class="line"><a name="l12019"></a><span class="lineno">12019</span>&#160;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l12020"></a><span class="lineno">12020</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
-<div class="line"><a name="l12021"></a><span class="lineno">12021</span>&#160;                    VkResult res = AllocateFromBlock(</div>
-<div class="line"><a name="l12022"></a><span class="lineno">12022</span>&#160;                        pCurrBlock,</div>
-<div class="line"><a name="l12023"></a><span class="lineno">12023</span>&#160;                        currentFrameIndex,</div>
-<div class="line"><a name="l12024"></a><span class="lineno">12024</span>&#160;                        size,</div>
-<div class="line"><a name="l12025"></a><span class="lineno">12025</span>&#160;                        alignment,</div>
-<div class="line"><a name="l12026"></a><span class="lineno">12026</span>&#160;                        allocFlagsCopy,</div>
-<div class="line"><a name="l12027"></a><span class="lineno">12027</span>&#160;                        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
-<div class="line"><a name="l12028"></a><span class="lineno">12028</span>&#160;                        suballocType,</div>
-<div class="line"><a name="l12029"></a><span class="lineno">12029</span>&#160;                        strategy,</div>
-<div class="line"><a name="l12030"></a><span class="lineno">12030</span>&#160;                        pAllocation);</div>
-<div class="line"><a name="l12031"></a><span class="lineno">12031</span>&#160;                    <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;                        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Returned from existing block #%u&quot;</span>, pCurrBlock-&gt;GetId());</div>
-<div class="line"><a name="l12034"></a><span class="lineno">12034</span>&#160;                        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l12035"></a><span class="lineno">12035</span>&#160;                    }</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;            }</div>
-<div class="line"><a name="l12038"></a><span class="lineno">12038</span>&#160;        }</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;        <span class="comment">// 2. Try to create new block.</span></div>
-<div class="line"><a name="l12041"></a><span class="lineno">12041</span>&#160;        <span class="keywordflow">if</span>(canCreateNewBlock)</div>
-<div class="line"><a name="l12042"></a><span class="lineno">12042</span>&#160;        {</div>
-<div class="line"><a name="l12043"></a><span class="lineno">12043</span>&#160;            <span class="comment">// Calculate optimal size for new block.</span></div>
-<div class="line"><a name="l12044"></a><span class="lineno">12044</span>&#160;            VkDeviceSize newBlockSize = m_PreferredBlockSize;</div>
-<div class="line"><a name="l12045"></a><span class="lineno">12045</span>&#160;            uint32_t newBlockSizeShift = 0;</div>
-<div class="line"><a name="l12046"></a><span class="lineno">12046</span>&#160;            <span class="keyword">const</span> uint32_t NEW_BLOCK_SIZE_SHIFT_MAX = 3;</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;            <span class="keywordflow">if</span>(!m_ExplicitBlockSize)</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="comment">// Allocate 1/8, 1/4, 1/2 as first blocks.</span></div>
-<div class="line"><a name="l12051"></a><span class="lineno">12051</span>&#160;                <span class="keyword">const</span> VkDeviceSize maxExistingBlockSize = CalcMaxBlockSize();</div>
-<div class="line"><a name="l12052"></a><span class="lineno">12052</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="l12053"></a><span class="lineno">12053</span>&#160;                {</div>
-<div class="line"><a name="l12054"></a><span class="lineno">12054</span>&#160;                    <span class="keyword">const</span> VkDeviceSize smallerNewBlockSize = newBlockSize / 2;</div>
-<div class="line"><a name="l12055"></a><span class="lineno">12055</span>&#160;                    <span class="keywordflow">if</span>(smallerNewBlockSize &gt; maxExistingBlockSize &amp;&amp; smallerNewBlockSize &gt;= size * 2)</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;                        newBlockSize = smallerNewBlockSize;</div>
-<div class="line"><a name="l12058"></a><span class="lineno">12058</span>&#160;                        ++newBlockSizeShift;</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">else</span></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;                        <span class="keywordflow">break</span>;</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;                }</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; </div>
-<div class="line"><a name="l12067"></a><span class="lineno">12067</span>&#160;            <span class="keywordtype">size_t</span> newBlockIndex = 0;</div>
-<div class="line"><a name="l12068"></a><span class="lineno">12068</span>&#160;            VkResult res = (newBlockSize &lt;= freeMemory || !canFallbackToDedicated) ?</div>
-<div class="line"><a name="l12069"></a><span class="lineno">12069</span>&#160;                CreateBlock(newBlockSize, &amp;newBlockIndex) : VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l12070"></a><span class="lineno">12070</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="l12071"></a><span class="lineno">12071</span>&#160;            <span class="keywordflow">if</span>(!m_ExplicitBlockSize)</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;                <span class="keywordflow">while</span>(res &lt; 0 &amp;&amp; newBlockSizeShift &lt; NEW_BLOCK_SIZE_SHIFT_MAX)</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;                    <span class="keyword">const</span> VkDeviceSize smallerNewBlockSize = newBlockSize / 2;</div>
-<div class="line"><a name="l12076"></a><span class="lineno">12076</span>&#160;                    <span class="keywordflow">if</span>(smallerNewBlockSize &gt;= size)</div>
-<div class="line"><a name="l12077"></a><span class="lineno">12077</span>&#160;                    {</div>
-<div class="line"><a name="l12078"></a><span class="lineno">12078</span>&#160;                        newBlockSize = smallerNewBlockSize;</div>
-<div class="line"><a name="l12079"></a><span class="lineno">12079</span>&#160;                        ++newBlockSizeShift;</div>
-<div class="line"><a name="l12080"></a><span class="lineno">12080</span>&#160;                        res = (newBlockSize &lt;= freeMemory || !canFallbackToDedicated) ?</div>
-<div class="line"><a name="l12081"></a><span class="lineno">12081</span>&#160;                            CreateBlock(newBlockSize, &amp;newBlockIndex) : VK_ERROR_OUT_OF_DEVICE_MEMORY;</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">else</span></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="keywordflow">break</span>;</div>
-<div class="line"><a name="l12086"></a><span class="lineno">12086</span>&#160;                    }</div>
-<div class="line"><a name="l12087"></a><span class="lineno">12087</span>&#160;                }</div>
-<div class="line"><a name="l12088"></a><span class="lineno">12088</span>&#160;            }</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;            <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l12091"></a><span class="lineno">12091</span>&#160;            {</div>
-<div class="line"><a name="l12092"></a><span class="lineno">12092</span>&#160;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[newBlockIndex];</div>
-<div class="line"><a name="l12093"></a><span class="lineno">12093</span>&#160;                VMA_ASSERT(pBlock-&gt;m_pMetadata-&gt;GetSize() &gt;= size);</div>
-<div class="line"><a name="l12094"></a><span class="lineno">12094</span>&#160; </div>
-<div class="line"><a name="l12095"></a><span class="lineno">12095</span>&#160;                res = AllocateFromBlock(</div>
-<div class="line"><a name="l12096"></a><span class="lineno">12096</span>&#160;                    pBlock,</div>
-<div class="line"><a name="l12097"></a><span class="lineno">12097</span>&#160;                    currentFrameIndex,</div>
-<div class="line"><a name="l12098"></a><span class="lineno">12098</span>&#160;                    size,</div>
-<div class="line"><a name="l12099"></a><span class="lineno">12099</span>&#160;                    alignment,</div>
-<div class="line"><a name="l12100"></a><span class="lineno">12100</span>&#160;                    allocFlagsCopy,</div>
-<div class="line"><a name="l12101"></a><span class="lineno">12101</span>&#160;                    createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
-<div class="line"><a name="l12102"></a><span class="lineno">12102</span>&#160;                    suballocType,</div>
-<div class="line"><a name="l12103"></a><span class="lineno">12103</span>&#160;                    strategy,</div>
-<div class="line"><a name="l12104"></a><span class="lineno">12104</span>&#160;                    pAllocation);</div>
-<div class="line"><a name="l12105"></a><span class="lineno">12105</span>&#160;                <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;                    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="l12108"></a><span class="lineno">12108</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l12109"></a><span class="lineno">12109</span>&#160;                }</div>
-<div class="line"><a name="l12110"></a><span class="lineno">12110</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l12111"></a><span class="lineno">12111</span>&#160;                {</div>
-<div class="line"><a name="l12112"></a><span class="lineno">12112</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="l12113"></a><span class="lineno">12113</span>&#160;                    <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</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;        }</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; </div>
-<div class="line"><a name="l12119"></a><span class="lineno">12119</span>&#160;    <span class="comment">// 3. Try to allocate from existing blocks with making other allocations lost.</span></div>
-<div class="line"><a name="l12120"></a><span class="lineno">12120</span>&#160;    <span class="keywordflow">if</span>(canMakeOtherLost)</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;        uint32_t tryIndex = 0;</div>
-<div class="line"><a name="l12123"></a><span class="lineno">12123</span>&#160;        <span class="keywordflow">for</span>(; tryIndex &lt; VMA_ALLOCATION_TRY_COUNT; ++tryIndex)</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;            VmaDeviceMemoryBlock* pBestRequestBlock = VMA_NULL;</div>
-<div class="line"><a name="l12126"></a><span class="lineno">12126</span>&#160;            VmaAllocationRequest bestRequest = {};</div>
-<div class="line"><a name="l12127"></a><span class="lineno">12127</span>&#160;            VkDeviceSize bestRequestCost = VK_WHOLE_SIZE;</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">// 1. Search existing allocations.</span></div>
-<div class="line"><a name="l12130"></a><span class="lineno">12130</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="l12131"></a><span class="lineno">12131</span>&#160;            {</div>
-<div class="line"><a name="l12132"></a><span class="lineno">12132</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="l12133"></a><span class="lineno">12133</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="l12134"></a><span class="lineno">12134</span>&#160;                {</div>
-<div class="line"><a name="l12135"></a><span class="lineno">12135</span>&#160;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l12136"></a><span class="lineno">12136</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
-<div class="line"><a name="l12137"></a><span class="lineno">12137</span>&#160;                    VmaAllocationRequest currRequest = {};</div>
-<div class="line"><a name="l12138"></a><span class="lineno">12138</span>&#160;                    <span class="keywordflow">if</span>(pCurrBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
-<div class="line"><a name="l12139"></a><span class="lineno">12139</span>&#160;                        currentFrameIndex,</div>
-<div class="line"><a name="l12140"></a><span class="lineno">12140</span>&#160;                        m_FrameInUseCount,</div>
-<div class="line"><a name="l12141"></a><span class="lineno">12141</span>&#160;                        m_BufferImageGranularity,</div>
-<div class="line"><a name="l12142"></a><span class="lineno">12142</span>&#160;                        size,</div>
-<div class="line"><a name="l12143"></a><span class="lineno">12143</span>&#160;                        alignment,</div>
-<div class="line"><a name="l12144"></a><span class="lineno">12144</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="l12145"></a><span class="lineno">12145</span>&#160;                        suballocType,</div>
-<div class="line"><a name="l12146"></a><span class="lineno">12146</span>&#160;                        canMakeOtherLost,</div>
-<div class="line"><a name="l12147"></a><span class="lineno">12147</span>&#160;                        strategy,</div>
-<div class="line"><a name="l12148"></a><span class="lineno">12148</span>&#160;                        &amp;currRequest))</div>
-<div class="line"><a name="l12149"></a><span class="lineno">12149</span>&#160;                    {</div>
-<div class="line"><a name="l12150"></a><span class="lineno">12150</span>&#160;                        <span class="keyword">const</span> VkDeviceSize currRequestCost = currRequest.CalcCost();</div>
-<div class="line"><a name="l12151"></a><span class="lineno">12151</span>&#160;                        <span class="keywordflow">if</span>(pBestRequestBlock == VMA_NULL ||</div>
-<div class="line"><a name="l12152"></a><span class="lineno">12152</span>&#160;                            currRequestCost &lt; bestRequestCost)</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;                            pBestRequestBlock = pCurrBlock;</div>
-<div class="line"><a name="l12155"></a><span class="lineno">12155</span>&#160;                            bestRequest = currRequest;</div>
-<div class="line"><a name="l12156"></a><span class="lineno">12156</span>&#160;                            bestRequestCost = currRequestCost;</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="keywordflow">if</span>(bestRequestCost == 0)</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;                                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l12161"></a><span class="lineno">12161</span>&#160;                            }</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;                    }</div>
-<div class="line"><a name="l12164"></a><span class="lineno">12164</span>&#160;                }</div>
-<div class="line"><a name="l12165"></a><span class="lineno">12165</span>&#160;            }</div>
-<div class="line"><a name="l12166"></a><span class="lineno">12166</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// WORST_FIT, FIRST_FIT</span></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;                <span class="comment">// Backward order in m_Blocks - prefer blocks with largest amount of free space.</span></div>
-<div class="line"><a name="l12169"></a><span class="lineno">12169</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = m_Blocks.size(); blockIndex--; )</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;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l12172"></a><span class="lineno">12172</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
-<div class="line"><a name="l12173"></a><span class="lineno">12173</span>&#160;                    VmaAllocationRequest currRequest = {};</div>
-<div class="line"><a name="l12174"></a><span class="lineno">12174</span>&#160;                    <span class="keywordflow">if</span>(pCurrBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
-<div class="line"><a name="l12175"></a><span class="lineno">12175</span>&#160;                        currentFrameIndex,</div>
-<div class="line"><a name="l12176"></a><span class="lineno">12176</span>&#160;                        m_FrameInUseCount,</div>
-<div class="line"><a name="l12177"></a><span class="lineno">12177</span>&#160;                        m_BufferImageGranularity,</div>
-<div class="line"><a name="l12178"></a><span class="lineno">12178</span>&#160;                        size,</div>
-<div class="line"><a name="l12179"></a><span class="lineno">12179</span>&#160;                        alignment,</div>
-<div class="line"><a name="l12180"></a><span class="lineno">12180</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="l12181"></a><span class="lineno">12181</span>&#160;                        suballocType,</div>
-<div class="line"><a name="l12182"></a><span class="lineno">12182</span>&#160;                        canMakeOtherLost,</div>
-<div class="line"><a name="l12183"></a><span class="lineno">12183</span>&#160;                        strategy,</div>
-<div class="line"><a name="l12184"></a><span class="lineno">12184</span>&#160;                        &amp;currRequest))</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="keyword">const</span> VkDeviceSize currRequestCost = currRequest.CalcCost();</div>
-<div class="line"><a name="l12187"></a><span class="lineno">12187</span>&#160;                        <span class="keywordflow">if</span>(pBestRequestBlock == VMA_NULL ||</div>
-<div class="line"><a name="l12188"></a><span class="lineno">12188</span>&#160;                            currRequestCost &lt; bestRequestCost ||</div>
-<div class="line"><a name="l12189"></a><span class="lineno">12189</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="l12190"></a><span class="lineno">12190</span>&#160;                        {</div>
-<div class="line"><a name="l12191"></a><span class="lineno">12191</span>&#160;                            pBestRequestBlock = pCurrBlock;</div>
-<div class="line"><a name="l12192"></a><span class="lineno">12192</span>&#160;                            bestRequest = currRequest;</div>
-<div class="line"><a name="l12193"></a><span class="lineno">12193</span>&#160;                            bestRequestCost = currRequestCost;</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">if</span>(bestRequestCost == 0 ||</div>
-<div class="line"><a name="l12196"></a><span class="lineno">12196</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="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">break</span>;</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;                    }</div>
-<div class="line"><a name="l12202"></a><span class="lineno">12202</span>&#160;                }</div>
-<div class="line"><a name="l12203"></a><span class="lineno">12203</span>&#160;            }</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;            <span class="keywordflow">if</span>(pBestRequestBlock != VMA_NULL)</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;                <span class="keywordflow">if</span>(mapped)</div>
-<div class="line"><a name="l12208"></a><span class="lineno">12208</span>&#160;                {</div>
-<div class="line"><a name="l12209"></a><span class="lineno">12209</span>&#160;                    VkResult res = pBestRequestBlock-&gt;Map(m_hAllocator, 1, VMA_NULL);</div>
-<div class="line"><a name="l12210"></a><span class="lineno">12210</span>&#160;                    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l12211"></a><span class="lineno">12211</span>&#160;                    {</div>
-<div class="line"><a name="l12212"></a><span class="lineno">12212</span>&#160;                        <span class="keywordflow">return</span> res;</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;                }</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>(pBestRequestBlock-&gt;m_pMetadata-&gt;MakeRequestedAllocationsLost(</div>
-<div class="line"><a name="l12217"></a><span class="lineno">12217</span>&#160;                    currentFrameIndex,</div>
-<div class="line"><a name="l12218"></a><span class="lineno">12218</span>&#160;                    m_FrameInUseCount,</div>
-<div class="line"><a name="l12219"></a><span class="lineno">12219</span>&#160;                    &amp;bestRequest))</div>
-<div class="line"><a name="l12220"></a><span class="lineno">12220</span>&#160;                {</div>
-<div class="line"><a name="l12221"></a><span class="lineno">12221</span>&#160;                    <span class="comment">// Allocate from this pBlock.</span></div>
-<div class="line"><a name="l12222"></a><span class="lineno">12222</span>&#160;                    *pAllocation = m_hAllocator-&gt;m_AllocationObjectAllocator.Allocate();</div>
-<div class="line"><a name="l12223"></a><span class="lineno">12223</span>&#160;                    (*pAllocation)-&gt;Ctor(currentFrameIndex, isUserDataString);</div>
-<div class="line"><a name="l12224"></a><span class="lineno">12224</span>&#160;                    pBestRequestBlock-&gt;m_pMetadata-&gt;Alloc(bestRequest, suballocType, size, *pAllocation);</div>
-<div class="line"><a name="l12225"></a><span class="lineno">12225</span>&#160;                    UpdateHasEmptyBlock();</div>
-<div class="line"><a name="l12226"></a><span class="lineno">12226</span>&#160;                    (*pAllocation)-&gt;InitBlockAllocation(</div>
-<div class="line"><a name="l12227"></a><span class="lineno">12227</span>&#160;                        pBestRequestBlock,</div>
-<div class="line"><a name="l12228"></a><span class="lineno">12228</span>&#160;                        bestRequest.offset,</div>
-<div class="line"><a name="l12229"></a><span class="lineno">12229</span>&#160;                        alignment,</div>
-<div class="line"><a name="l12230"></a><span class="lineno">12230</span>&#160;                        size,</div>
-<div class="line"><a name="l12231"></a><span class="lineno">12231</span>&#160;                        m_MemoryTypeIndex,</div>
-<div class="line"><a name="l12232"></a><span class="lineno">12232</span>&#160;                        suballocType,</div>
-<div class="line"><a name="l12233"></a><span class="lineno">12233</span>&#160;                        mapped,</div>
-<div class="line"><a name="l12234"></a><span class="lineno">12234</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="l12235"></a><span class="lineno">12235</span>&#160;                    VMA_HEAVY_ASSERT(pBestRequestBlock-&gt;Validate());</div>
-<div class="line"><a name="l12236"></a><span class="lineno">12236</span>&#160;                    VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Returned from existing block&quot;</span>);</div>
-<div class="line"><a name="l12237"></a><span class="lineno">12237</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="l12238"></a><span class="lineno">12238</span>&#160;                    m_hAllocator-&gt;m_Budget.AddAllocation(m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), size);</div>
-<div class="line"><a name="l12239"></a><span class="lineno">12239</span>&#160;                    <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</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;                        m_hAllocator-&gt;FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);</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="keywordflow">if</span>(IsCorruptionDetectionEnabled())</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;                        VkResult res = pBestRequestBlock-&gt;WriteMagicValueAroundAllocation(m_hAllocator, bestRequest.offset, size);</div>
-<div class="line"><a name="l12246"></a><span class="lineno">12246</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="l12247"></a><span class="lineno">12247</span>&#160;                    }</div>
-<div class="line"><a name="l12248"></a><span class="lineno">12248</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</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;                <span class="comment">// else: Some allocations must have been touched while we are here. Next try.</span></div>
-<div class="line"><a name="l12251"></a><span class="lineno">12251</span>&#160;            }</div>
-<div class="line"><a name="l12252"></a><span class="lineno">12252</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l12253"></a><span class="lineno">12253</span>&#160;            {</div>
-<div class="line"><a name="l12254"></a><span class="lineno">12254</span>&#160;                <span class="comment">// Could not find place in any of the blocks - break outer loop.</span></div>
-<div class="line"><a name="l12255"></a><span class="lineno">12255</span>&#160;                <span class="keywordflow">break</span>;</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;        }</div>
-<div class="line"><a name="l12258"></a><span class="lineno">12258</span>&#160;        <span class="comment">/* Maximum number of tries exceeded - a very unlike event when many other</span></div>
-<div class="line"><a name="l12259"></a><span class="lineno">12259</span>&#160;<span class="comment">        threads are simultaneously touching allocations making it impossible to make</span></div>
-<div class="line"><a name="l12260"></a><span class="lineno">12260</span>&#160;<span class="comment">        lost at the same time as we try to allocate. */</span></div>
-<div class="line"><a name="l12261"></a><span class="lineno">12261</span>&#160;        <span class="keywordflow">if</span>(tryIndex == VMA_ALLOCATION_TRY_COUNT)</div>
-<div class="line"><a name="l12262"></a><span class="lineno">12262</span>&#160;        {</div>
-<div class="line"><a name="l12263"></a><span class="lineno">12263</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_TOO_MANY_OBJECTS;</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; </div>
-<div class="line"><a name="l12267"></a><span class="lineno">12267</span>&#160;    <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</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="keywordtype">void</span> VmaBlockVector::Free(</div>
-<div class="line"><a name="l12271"></a><span class="lineno">12271</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</div>
-<div class="line"><a name="l12272"></a><span class="lineno">12272</span>&#160;{</div>
-<div class="line"><a name="l12273"></a><span class="lineno">12273</span>&#160;    VmaDeviceMemoryBlock* pBlockToDelete = VMA_NULL;</div>
-<div class="line"><a name="l12274"></a><span class="lineno">12274</span>&#160; </div>
-<div class="line"><a name="l12275"></a><span class="lineno">12275</span>&#160;    <span class="keywordtype">bool</span> budgetExceeded = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l12276"></a><span class="lineno">12276</span>&#160;    {</div>
-<div class="line"><a name="l12277"></a><span class="lineno">12277</span>&#160;        <span class="keyword">const</span> uint32_t heapIndex = m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);</div>
-<div class="line"><a name="l12278"></a><span class="lineno">12278</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> heapBudget = {};</div>
-<div class="line"><a name="l12279"></a><span class="lineno">12279</span>&#160;        m_hAllocator-&gt;GetBudget(&amp;heapBudget, heapIndex, 1);</div>
-<div class="line"><a name="l12280"></a><span class="lineno">12280</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="l12281"></a><span class="lineno">12281</span>&#160;    }</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;    <span class="comment">// Scope for lock.</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;        VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l12286"></a><span class="lineno">12286</span>&#160; </div>
-<div class="line"><a name="l12287"></a><span class="lineno">12287</span>&#160;        VmaDeviceMemoryBlock* pBlock = hAllocation-&gt;GetBlock();</div>
+<div class="line"><a name="l11953"></a><span class="lineno">11953</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="l11954"></a><span class="lineno">11954</span>&#160;    <span class="keywordflow">if</span>(size + 2 * VMA_DEBUG_MARGIN &gt; m_PreferredBlockSize)</div>
+<div class="line"><a name="l11955"></a><span class="lineno">11955</span>&#160;    {</div>
+<div class="line"><a name="l11956"></a><span class="lineno">11956</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</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; </div>
+<div class="line"><a name="l11959"></a><span class="lineno">11959</span>&#160;    <span class="comment">/*</span></div>
+<div class="line"><a name="l11960"></a><span class="lineno">11960</span>&#160;<span class="comment">    Under certain condition, this whole section can be skipped for optimization, so</span></div>
+<div class="line"><a name="l11961"></a><span class="lineno">11961</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="l11962"></a><span class="lineno">11962</span>&#160;<span class="comment">    e.g. for custom pools with linear algorithm.</span></div>
+<div class="line"><a name="l11963"></a><span class="lineno">11963</span>&#160;<span class="comment">    */</span></div>
+<div class="line"><a name="l11964"></a><span class="lineno">11964</span>&#160;    <span class="keywordflow">if</span>(!canMakeOtherLost || canCreateNewBlock)</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;        <span class="comment">// 1. Search existing allocations. Try to allocate without making other allocations lost.</span></div>
+<div class="line"><a name="l11967"></a><span class="lineno">11967</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="l11968"></a><span class="lineno">11968</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="l11969"></a><span class="lineno">11969</span>&#160; </div>
+<div class="line"><a name="l11970"></a><span class="lineno">11970</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="l11971"></a><span class="lineno">11971</span>&#160;        {</div>
+<div class="line"><a name="l11972"></a><span class="lineno">11972</span>&#160;            <span class="comment">// Use only last block.</span></div>
+<div class="line"><a name="l11973"></a><span class="lineno">11973</span>&#160;            <span class="keywordflow">if</span>(!m_Blocks.empty())</div>
+<div class="line"><a name="l11974"></a><span class="lineno">11974</span>&#160;            {</div>
+<div class="line"><a name="l11975"></a><span class="lineno">11975</span>&#160;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks.back();</div>
+<div class="line"><a name="l11976"></a><span class="lineno">11976</span>&#160;                VMA_ASSERT(pCurrBlock);</div>
+<div class="line"><a name="l11977"></a><span class="lineno">11977</span>&#160;                VkResult res = AllocateFromBlock(</div>
+<div class="line"><a name="l11978"></a><span class="lineno">11978</span>&#160;                    pCurrBlock,</div>
+<div class="line"><a name="l11979"></a><span class="lineno">11979</span>&#160;                    currentFrameIndex,</div>
+<div class="line"><a name="l11980"></a><span class="lineno">11980</span>&#160;                    size,</div>
+<div class="line"><a name="l11981"></a><span class="lineno">11981</span>&#160;                    alignment,</div>
+<div class="line"><a name="l11982"></a><span class="lineno">11982</span>&#160;                    allocFlagsCopy,</div>
+<div class="line"><a name="l11983"></a><span class="lineno">11983</span>&#160;                    createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
+<div class="line"><a name="l11984"></a><span class="lineno">11984</span>&#160;                    suballocType,</div>
+<div class="line"><a name="l11985"></a><span class="lineno">11985</span>&#160;                    strategy,</div>
+<div class="line"><a name="l11986"></a><span class="lineno">11986</span>&#160;                    pAllocation);</div>
+<div class="line"><a name="l11987"></a><span class="lineno">11987</span>&#160;                <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;                    VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Returned from last block #%u&quot;</span>, pCurrBlock-&gt;GetId());</div>
+<div class="line"><a name="l11990"></a><span class="lineno">11990</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l11991"></a><span class="lineno">11991</span>&#160;                }</div>
+<div class="line"><a name="l11992"></a><span class="lineno">11992</span>&#160;            }</div>
+<div class="line"><a name="l11993"></a><span class="lineno">11993</span>&#160;        }</div>
+<div class="line"><a name="l11994"></a><span class="lineno">11994</span>&#160;        <span class="keywordflow">else</span></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;            <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="l11997"></a><span class="lineno">11997</span>&#160;            {</div>
+<div class="line"><a name="l11998"></a><span class="lineno">11998</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="l11999"></a><span class="lineno">11999</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="l12000"></a><span class="lineno">12000</span>&#160;                {</div>
+<div class="line"><a name="l12001"></a><span class="lineno">12001</span>&#160;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l12002"></a><span class="lineno">12002</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
+<div class="line"><a name="l12003"></a><span class="lineno">12003</span>&#160;                    VkResult res = AllocateFromBlock(</div>
+<div class="line"><a name="l12004"></a><span class="lineno">12004</span>&#160;                        pCurrBlock,</div>
+<div class="line"><a name="l12005"></a><span class="lineno">12005</span>&#160;                        currentFrameIndex,</div>
+<div class="line"><a name="l12006"></a><span class="lineno">12006</span>&#160;                        size,</div>
+<div class="line"><a name="l12007"></a><span class="lineno">12007</span>&#160;                        alignment,</div>
+<div class="line"><a name="l12008"></a><span class="lineno">12008</span>&#160;                        allocFlagsCopy,</div>
+<div class="line"><a name="l12009"></a><span class="lineno">12009</span>&#160;                        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
+<div class="line"><a name="l12010"></a><span class="lineno">12010</span>&#160;                        suballocType,</div>
+<div class="line"><a name="l12011"></a><span class="lineno">12011</span>&#160;                        strategy,</div>
+<div class="line"><a name="l12012"></a><span class="lineno">12012</span>&#160;                        pAllocation);</div>
+<div class="line"><a name="l12013"></a><span class="lineno">12013</span>&#160;                    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l12014"></a><span class="lineno">12014</span>&#160;                    {</div>
+<div class="line"><a name="l12015"></a><span class="lineno">12015</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="l12016"></a><span class="lineno">12016</span>&#160;                        <span class="keywordflow">return</span> VK_SUCCESS;</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;                }</div>
+<div class="line"><a name="l12019"></a><span class="lineno">12019</span>&#160;            }</div>
+<div class="line"><a name="l12020"></a><span class="lineno">12020</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// WORST_FIT, FIRST_FIT</span></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;                <span class="comment">// Backward order in m_Blocks - prefer blocks with largest amount of free space.</span></div>
+<div class="line"><a name="l12023"></a><span class="lineno">12023</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = m_Blocks.size(); blockIndex--; )</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;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l12026"></a><span class="lineno">12026</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
+<div class="line"><a name="l12027"></a><span class="lineno">12027</span>&#160;                    VkResult res = AllocateFromBlock(</div>
+<div class="line"><a name="l12028"></a><span class="lineno">12028</span>&#160;                        pCurrBlock,</div>
+<div class="line"><a name="l12029"></a><span class="lineno">12029</span>&#160;                        currentFrameIndex,</div>
+<div class="line"><a name="l12030"></a><span class="lineno">12030</span>&#160;                        size,</div>
+<div class="line"><a name="l12031"></a><span class="lineno">12031</span>&#160;                        alignment,</div>
+<div class="line"><a name="l12032"></a><span class="lineno">12032</span>&#160;                        allocFlagsCopy,</div>
+<div class="line"><a name="l12033"></a><span class="lineno">12033</span>&#160;                        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
+<div class="line"><a name="l12034"></a><span class="lineno">12034</span>&#160;                        suballocType,</div>
+<div class="line"><a name="l12035"></a><span class="lineno">12035</span>&#160;                        strategy,</div>
+<div class="line"><a name="l12036"></a><span class="lineno">12036</span>&#160;                        pAllocation);</div>
+<div class="line"><a name="l12037"></a><span class="lineno">12037</span>&#160;                    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l12038"></a><span class="lineno">12038</span>&#160;                    {</div>
+<div class="line"><a name="l12039"></a><span class="lineno">12039</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="l12040"></a><span class="lineno">12040</span>&#160;                        <span class="keywordflow">return</span> VK_SUCCESS;</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;                }</div>
+<div class="line"><a name="l12043"></a><span class="lineno">12043</span>&#160;            }</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; </div>
+<div class="line"><a name="l12046"></a><span class="lineno">12046</span>&#160;        <span class="comment">// 2. Try to create new block.</span></div>
+<div class="line"><a name="l12047"></a><span class="lineno">12047</span>&#160;        <span class="keywordflow">if</span>(canCreateNewBlock)</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="comment">// Calculate optimal size for new block.</span></div>
+<div class="line"><a name="l12050"></a><span class="lineno">12050</span>&#160;            VkDeviceSize newBlockSize = m_PreferredBlockSize;</div>
+<div class="line"><a name="l12051"></a><span class="lineno">12051</span>&#160;            uint32_t newBlockSizeShift = 0;</div>
+<div class="line"><a name="l12052"></a><span class="lineno">12052</span>&#160;            <span class="keyword">const</span> uint32_t NEW_BLOCK_SIZE_SHIFT_MAX = 3;</div>
+<div class="line"><a name="l12053"></a><span class="lineno">12053</span>&#160; </div>
+<div class="line"><a name="l12054"></a><span class="lineno">12054</span>&#160;            <span class="keywordflow">if</span>(!m_ExplicitBlockSize)</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="comment">// Allocate 1/8, 1/4, 1/2 as first blocks.</span></div>
+<div class="line"><a name="l12057"></a><span class="lineno">12057</span>&#160;                <span class="keyword">const</span> VkDeviceSize maxExistingBlockSize = CalcMaxBlockSize();</div>
+<div class="line"><a name="l12058"></a><span class="lineno">12058</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="l12059"></a><span class="lineno">12059</span>&#160;                {</div>
+<div class="line"><a name="l12060"></a><span class="lineno">12060</span>&#160;                    <span class="keyword">const</span> VkDeviceSize smallerNewBlockSize = newBlockSize / 2;</div>
+<div class="line"><a name="l12061"></a><span class="lineno">12061</span>&#160;                    <span class="keywordflow">if</span>(smallerNewBlockSize &gt; maxExistingBlockSize &amp;&amp; smallerNewBlockSize &gt;= size * 2)</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;                        newBlockSize = smallerNewBlockSize;</div>
+<div class="line"><a name="l12064"></a><span class="lineno">12064</span>&#160;                        ++newBlockSizeShift;</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;                    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l12067"></a><span class="lineno">12067</span>&#160;                    {</div>
+<div class="line"><a name="l12068"></a><span class="lineno">12068</span>&#160;                        <span class="keywordflow">break</span>;</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;            }</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;            <span class="keywordtype">size_t</span> newBlockIndex = 0;</div>
+<div class="line"><a name="l12074"></a><span class="lineno">12074</span>&#160;            VkResult res = (newBlockSize &lt;= freeMemory || !canFallbackToDedicated) ?</div>
+<div class="line"><a name="l12075"></a><span class="lineno">12075</span>&#160;                CreateBlock(newBlockSize, &amp;newBlockIndex) : VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l12076"></a><span class="lineno">12076</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="l12077"></a><span class="lineno">12077</span>&#160;            <span class="keywordflow">if</span>(!m_ExplicitBlockSize)</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;                <span class="keywordflow">while</span>(res &lt; 0 &amp;&amp; newBlockSizeShift &lt; NEW_BLOCK_SIZE_SHIFT_MAX)</div>
+<div class="line"><a name="l12080"></a><span class="lineno">12080</span>&#160;                {</div>
+<div class="line"><a name="l12081"></a><span class="lineno">12081</span>&#160;                    <span class="keyword">const</span> VkDeviceSize smallerNewBlockSize = newBlockSize / 2;</div>
+<div class="line"><a name="l12082"></a><span class="lineno">12082</span>&#160;                    <span class="keywordflow">if</span>(smallerNewBlockSize &gt;= size)</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;                        newBlockSize = smallerNewBlockSize;</div>
+<div class="line"><a name="l12085"></a><span class="lineno">12085</span>&#160;                        ++newBlockSizeShift;</div>
+<div class="line"><a name="l12086"></a><span class="lineno">12086</span>&#160;                        res = (newBlockSize &lt;= freeMemory || !canFallbackToDedicated) ?</div>
+<div class="line"><a name="l12087"></a><span class="lineno">12087</span>&#160;                            CreateBlock(newBlockSize, &amp;newBlockIndex) : VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l12088"></a><span class="lineno">12088</span>&#160;                    }</div>
+<div class="line"><a name="l12089"></a><span class="lineno">12089</span>&#160;                    <span class="keywordflow">else</span></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;                        <span class="keywordflow">break</span>;</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;                }</div>
+<div class="line"><a name="l12094"></a><span class="lineno">12094</span>&#160;            }</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;            <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[newBlockIndex];</div>
+<div class="line"><a name="l12099"></a><span class="lineno">12099</span>&#160;                VMA_ASSERT(pBlock-&gt;m_pMetadata-&gt;GetSize() &gt;= size);</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;                res = AllocateFromBlock(</div>
+<div class="line"><a name="l12102"></a><span class="lineno">12102</span>&#160;                    pBlock,</div>
+<div class="line"><a name="l12103"></a><span class="lineno">12103</span>&#160;                    currentFrameIndex,</div>
+<div class="line"><a name="l12104"></a><span class="lineno">12104</span>&#160;                    size,</div>
+<div class="line"><a name="l12105"></a><span class="lineno">12105</span>&#160;                    alignment,</div>
+<div class="line"><a name="l12106"></a><span class="lineno">12106</span>&#160;                    allocFlagsCopy,</div>
+<div class="line"><a name="l12107"></a><span class="lineno">12107</span>&#160;                    createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
+<div class="line"><a name="l12108"></a><span class="lineno">12108</span>&#160;                    suballocType,</div>
+<div class="line"><a name="l12109"></a><span class="lineno">12109</span>&#160;                    strategy,</div>
+<div class="line"><a name="l12110"></a><span class="lineno">12110</span>&#160;                    pAllocation);</div>
+<div class="line"><a name="l12111"></a><span class="lineno">12111</span>&#160;                <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;                    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="l12114"></a><span class="lineno">12114</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</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;                <span class="keywordflow">else</span></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;                    <span class="comment">// Allocation from new block failed, possibly due to VMA_DEBUG_MARGIN or alignment.</span></div>
+<div class="line"><a name="l12119"></a><span class="lineno">12119</span>&#160;                    <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</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;        }</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; </div>
+<div class="line"><a name="l12125"></a><span class="lineno">12125</span>&#160;    <span class="comment">// 3. Try to allocate from existing blocks with making other allocations lost.</span></div>
+<div class="line"><a name="l12126"></a><span class="lineno">12126</span>&#160;    <span class="keywordflow">if</span>(canMakeOtherLost)</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;        uint32_t tryIndex = 0;</div>
+<div class="line"><a name="l12129"></a><span class="lineno">12129</span>&#160;        <span class="keywordflow">for</span>(; tryIndex &lt; VMA_ALLOCATION_TRY_COUNT; ++tryIndex)</div>
+<div class="line"><a name="l12130"></a><span class="lineno">12130</span>&#160;        {</div>
+<div class="line"><a name="l12131"></a><span class="lineno">12131</span>&#160;            VmaDeviceMemoryBlock* pBestRequestBlock = VMA_NULL;</div>
+<div class="line"><a name="l12132"></a><span class="lineno">12132</span>&#160;            VmaAllocationRequest bestRequest = {};</div>
+<div class="line"><a name="l12133"></a><span class="lineno">12133</span>&#160;            VkDeviceSize bestRequestCost = VK_WHOLE_SIZE;</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;            <span class="comment">// 1. Search existing allocations.</span></div>
+<div class="line"><a name="l12136"></a><span class="lineno">12136</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="l12137"></a><span class="lineno">12137</span>&#160;            {</div>
+<div class="line"><a name="l12138"></a><span class="lineno">12138</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="l12139"></a><span class="lineno">12139</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="l12140"></a><span class="lineno">12140</span>&#160;                {</div>
+<div class="line"><a name="l12141"></a><span class="lineno">12141</span>&#160;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l12142"></a><span class="lineno">12142</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
+<div class="line"><a name="l12143"></a><span class="lineno">12143</span>&#160;                    VmaAllocationRequest currRequest = {};</div>
+<div class="line"><a name="l12144"></a><span class="lineno">12144</span>&#160;                    <span class="keywordflow">if</span>(pCurrBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
+<div class="line"><a name="l12145"></a><span class="lineno">12145</span>&#160;                        currentFrameIndex,</div>
+<div class="line"><a name="l12146"></a><span class="lineno">12146</span>&#160;                        m_FrameInUseCount,</div>
+<div class="line"><a name="l12147"></a><span class="lineno">12147</span>&#160;                        m_BufferImageGranularity,</div>
+<div class="line"><a name="l12148"></a><span class="lineno">12148</span>&#160;                        size,</div>
+<div class="line"><a name="l12149"></a><span class="lineno">12149</span>&#160;                        alignment,</div>
+<div class="line"><a name="l12150"></a><span class="lineno">12150</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="l12151"></a><span class="lineno">12151</span>&#160;                        suballocType,</div>
+<div class="line"><a name="l12152"></a><span class="lineno">12152</span>&#160;                        canMakeOtherLost,</div>
+<div class="line"><a name="l12153"></a><span class="lineno">12153</span>&#160;                        strategy,</div>
+<div class="line"><a name="l12154"></a><span class="lineno">12154</span>&#160;                        &amp;currRequest))</div>
+<div class="line"><a name="l12155"></a><span class="lineno">12155</span>&#160;                    {</div>
+<div class="line"><a name="l12156"></a><span class="lineno">12156</span>&#160;                        <span class="keyword">const</span> VkDeviceSize currRequestCost = currRequest.CalcCost();</div>
+<div class="line"><a name="l12157"></a><span class="lineno">12157</span>&#160;                        <span class="keywordflow">if</span>(pBestRequestBlock == VMA_NULL ||</div>
+<div class="line"><a name="l12158"></a><span class="lineno">12158</span>&#160;                            currRequestCost &lt; bestRequestCost)</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;                            pBestRequestBlock = pCurrBlock;</div>
+<div class="line"><a name="l12161"></a><span class="lineno">12161</span>&#160;                            bestRequest = currRequest;</div>
+<div class="line"><a name="l12162"></a><span class="lineno">12162</span>&#160;                            bestRequestCost = currRequestCost;</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">if</span>(bestRequestCost == 0)</div>
+<div class="line"><a name="l12165"></a><span class="lineno">12165</span>&#160;                            {</div>
+<div class="line"><a name="l12166"></a><span class="lineno">12166</span>&#160;                                <span class="keywordflow">break</span>;</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;                        }</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;                }</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;            <span class="keywordflow">else</span> <span class="comment">// WORST_FIT, FIRST_FIT</span></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="comment">// Backward order in m_Blocks - prefer blocks with largest amount of free space.</span></div>
+<div class="line"><a name="l12175"></a><span class="lineno">12175</span>&#160;                <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = m_Blocks.size(); blockIndex--; )</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;                    VmaDeviceMemoryBlock* <span class="keyword">const</span> pCurrBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l12178"></a><span class="lineno">12178</span>&#160;                    VMA_ASSERT(pCurrBlock);</div>
+<div class="line"><a name="l12179"></a><span class="lineno">12179</span>&#160;                    VmaAllocationRequest currRequest = {};</div>
+<div class="line"><a name="l12180"></a><span class="lineno">12180</span>&#160;                    <span class="keywordflow">if</span>(pCurrBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
+<div class="line"><a name="l12181"></a><span class="lineno">12181</span>&#160;                        currentFrameIndex,</div>
+<div class="line"><a name="l12182"></a><span class="lineno">12182</span>&#160;                        m_FrameInUseCount,</div>
+<div class="line"><a name="l12183"></a><span class="lineno">12183</span>&#160;                        m_BufferImageGranularity,</div>
+<div class="line"><a name="l12184"></a><span class="lineno">12184</span>&#160;                        size,</div>
+<div class="line"><a name="l12185"></a><span class="lineno">12185</span>&#160;                        alignment,</div>
+<div class="line"><a name="l12186"></a><span class="lineno">12186</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="l12187"></a><span class="lineno">12187</span>&#160;                        suballocType,</div>
+<div class="line"><a name="l12188"></a><span class="lineno">12188</span>&#160;                        canMakeOtherLost,</div>
+<div class="line"><a name="l12189"></a><span class="lineno">12189</span>&#160;                        strategy,</div>
+<div class="line"><a name="l12190"></a><span class="lineno">12190</span>&#160;                        &amp;currRequest))</div>
+<div class="line"><a name="l12191"></a><span class="lineno">12191</span>&#160;                    {</div>
+<div class="line"><a name="l12192"></a><span class="lineno">12192</span>&#160;                        <span class="keyword">const</span> VkDeviceSize currRequestCost = currRequest.CalcCost();</div>
+<div class="line"><a name="l12193"></a><span class="lineno">12193</span>&#160;                        <span class="keywordflow">if</span>(pBestRequestBlock == VMA_NULL ||</div>
+<div class="line"><a name="l12194"></a><span class="lineno">12194</span>&#160;                            currRequestCost &lt; bestRequestCost ||</div>
+<div class="line"><a name="l12195"></a><span class="lineno">12195</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="l12196"></a><span class="lineno">12196</span>&#160;                        {</div>
+<div class="line"><a name="l12197"></a><span class="lineno">12197</span>&#160;                            pBestRequestBlock = pCurrBlock;</div>
+<div class="line"><a name="l12198"></a><span class="lineno">12198</span>&#160;                            bestRequest = currRequest;</div>
+<div class="line"><a name="l12199"></a><span class="lineno">12199</span>&#160;                            bestRequestCost = currRequestCost;</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="keywordflow">if</span>(bestRequestCost == 0 ||</div>
+<div class="line"><a name="l12202"></a><span class="lineno">12202</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="l12203"></a><span class="lineno">12203</span>&#160;                            {</div>
+<div class="line"><a name="l12204"></a><span class="lineno">12204</span>&#160;                                <span class="keywordflow">break</span>;</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;                        }</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;                }</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; </div>
+<div class="line"><a name="l12211"></a><span class="lineno">12211</span>&#160;            <span class="keywordflow">if</span>(pBestRequestBlock != VMA_NULL)</div>
+<div class="line"><a name="l12212"></a><span class="lineno">12212</span>&#160;            {</div>
+<div class="line"><a name="l12213"></a><span class="lineno">12213</span>&#160;                <span class="keywordflow">if</span>(mapped)</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;                    VkResult res = pBestRequestBlock-&gt;Map(m_hAllocator, 1, VMA_NULL);</div>
+<div class="line"><a name="l12216"></a><span class="lineno">12216</span>&#160;                    <span class="keywordflow">if</span>(res != VK_SUCCESS)</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;                        <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l12219"></a><span class="lineno">12219</span>&#160;                    }</div>
+<div class="line"><a name="l12220"></a><span class="lineno">12220</span>&#160;                }</div>
+<div class="line"><a name="l12221"></a><span class="lineno">12221</span>&#160; </div>
+<div class="line"><a name="l12222"></a><span class="lineno">12222</span>&#160;                <span class="keywordflow">if</span>(pBestRequestBlock-&gt;m_pMetadata-&gt;MakeRequestedAllocationsLost(</div>
+<div class="line"><a name="l12223"></a><span class="lineno">12223</span>&#160;                    currentFrameIndex,</div>
+<div class="line"><a name="l12224"></a><span class="lineno">12224</span>&#160;                    m_FrameInUseCount,</div>
+<div class="line"><a name="l12225"></a><span class="lineno">12225</span>&#160;                    &amp;bestRequest))</div>
+<div class="line"><a name="l12226"></a><span class="lineno">12226</span>&#160;                {</div>
+<div class="line"><a name="l12227"></a><span class="lineno">12227</span>&#160;                    <span class="comment">// Allocate from this pBlock.</span></div>
+<div class="line"><a name="l12228"></a><span class="lineno">12228</span>&#160;                    *pAllocation = m_hAllocator-&gt;m_AllocationObjectAllocator.Allocate();</div>
+<div class="line"><a name="l12229"></a><span class="lineno">12229</span>&#160;                    (*pAllocation)-&gt;Ctor(currentFrameIndex, isUserDataString);</div>
+<div class="line"><a name="l12230"></a><span class="lineno">12230</span>&#160;                    pBestRequestBlock-&gt;m_pMetadata-&gt;Alloc(bestRequest, suballocType, size, *pAllocation);</div>
+<div class="line"><a name="l12231"></a><span class="lineno">12231</span>&#160;                    UpdateHasEmptyBlock();</div>
+<div class="line"><a name="l12232"></a><span class="lineno">12232</span>&#160;                    (*pAllocation)-&gt;InitBlockAllocation(</div>
+<div class="line"><a name="l12233"></a><span class="lineno">12233</span>&#160;                        pBestRequestBlock,</div>
+<div class="line"><a name="l12234"></a><span class="lineno">12234</span>&#160;                        bestRequest.offset,</div>
+<div class="line"><a name="l12235"></a><span class="lineno">12235</span>&#160;                        alignment,</div>
+<div class="line"><a name="l12236"></a><span class="lineno">12236</span>&#160;                        size,</div>
+<div class="line"><a name="l12237"></a><span class="lineno">12237</span>&#160;                        m_MemoryTypeIndex,</div>
+<div class="line"><a name="l12238"></a><span class="lineno">12238</span>&#160;                        suballocType,</div>
+<div class="line"><a name="l12239"></a><span class="lineno">12239</span>&#160;                        mapped,</div>
+<div class="line"><a name="l12240"></a><span class="lineno">12240</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="l12241"></a><span class="lineno">12241</span>&#160;                    VMA_HEAVY_ASSERT(pBestRequestBlock-&gt;Validate());</div>
+<div class="line"><a name="l12242"></a><span class="lineno">12242</span>&#160;                    VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Returned from existing block&quot;</span>);</div>
+<div class="line"><a name="l12243"></a><span class="lineno">12243</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="l12244"></a><span class="lineno">12244</span>&#160;                    m_hAllocator-&gt;m_Budget.AddAllocation(m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), size);</div>
+<div class="line"><a name="l12245"></a><span class="lineno">12245</span>&#160;                    <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</div>
+<div class="line"><a name="l12246"></a><span class="lineno">12246</span>&#160;                    {</div>
+<div class="line"><a name="l12247"></a><span class="lineno">12247</span>&#160;                        m_hAllocator-&gt;FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);</div>
+<div class="line"><a name="l12248"></a><span class="lineno">12248</span>&#160;                    }</div>
+<div class="line"><a name="l12249"></a><span class="lineno">12249</span>&#160;                    <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</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;                        VkResult res = pBestRequestBlock-&gt;WriteMagicValueAroundAllocation(m_hAllocator, bestRequest.offset, size);</div>
+<div class="line"><a name="l12252"></a><span class="lineno">12252</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="l12253"></a><span class="lineno">12253</span>&#160;                    }</div>
+<div class="line"><a name="l12254"></a><span class="lineno">12254</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</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;                <span class="comment">// else: Some allocations must have been touched while we are here. Next try.</span></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="keywordflow">else</span></div>
+<div class="line"><a name="l12259"></a><span class="lineno">12259</span>&#160;            {</div>
+<div class="line"><a name="l12260"></a><span class="lineno">12260</span>&#160;                <span class="comment">// Could not find place in any of the blocks - break outer loop.</span></div>
+<div class="line"><a name="l12261"></a><span class="lineno">12261</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l12262"></a><span class="lineno">12262</span>&#160;            }</div>
+<div class="line"><a name="l12263"></a><span class="lineno">12263</span>&#160;        }</div>
+<div class="line"><a name="l12264"></a><span class="lineno">12264</span>&#160;        <span class="comment">/* Maximum number of tries exceeded - a very unlike event when many other</span></div>
+<div class="line"><a name="l12265"></a><span class="lineno">12265</span>&#160;<span class="comment">        threads are simultaneously touching allocations making it impossible to make</span></div>
+<div class="line"><a name="l12266"></a><span class="lineno">12266</span>&#160;<span class="comment">        lost at the same time as we try to allocate. */</span></div>
+<div class="line"><a name="l12267"></a><span class="lineno">12267</span>&#160;        <span class="keywordflow">if</span>(tryIndex == VMA_ALLOCATION_TRY_COUNT)</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="keywordflow">return</span> VK_ERROR_TOO_MANY_OBJECTS;</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;    }</div>
+<div class="line"><a name="l12272"></a><span class="lineno">12272</span>&#160; </div>
+<div class="line"><a name="l12273"></a><span class="lineno">12273</span>&#160;    <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l12274"></a><span class="lineno">12274</span>&#160;}</div>
+<div class="line"><a name="l12275"></a><span class="lineno">12275</span>&#160; </div>
+<div class="line"><a name="l12276"></a><span class="lineno">12276</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::Free(</div>
+<div class="line"><a name="l12277"></a><span class="lineno">12277</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</div>
+<div class="line"><a name="l12278"></a><span class="lineno">12278</span>&#160;{</div>
+<div class="line"><a name="l12279"></a><span class="lineno">12279</span>&#160;    VmaDeviceMemoryBlock* pBlockToDelete = VMA_NULL;</div>
+<div class="line"><a name="l12280"></a><span class="lineno">12280</span>&#160; </div>
+<div class="line"><a name="l12281"></a><span class="lineno">12281</span>&#160;    <span class="keywordtype">bool</span> budgetExceeded = <span class="keyword">false</span>;</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;        <span class="keyword">const</span> uint32_t heapIndex = m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);</div>
+<div class="line"><a name="l12284"></a><span class="lineno">12284</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> heapBudget = {};</div>
+<div class="line"><a name="l12285"></a><span class="lineno">12285</span>&#160;        m_hAllocator-&gt;GetBudget(&amp;heapBudget, heapIndex, 1);</div>
+<div class="line"><a name="l12286"></a><span class="lineno">12286</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="l12287"></a><span class="lineno">12287</span>&#160;    }</div>
 <div class="line"><a name="l12288"></a><span class="lineno">12288</span>&#160; </div>
-<div class="line"><a name="l12289"></a><span class="lineno">12289</span>&#160;        <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</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;            VkResult res = pBlock-&gt;ValidateMagicValueAroundAllocation(m_hAllocator, hAllocation-&gt;GetOffset(), hAllocation-&gt;GetSize());</div>
-<div class="line"><a name="l12292"></a><span class="lineno">12292</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="l12293"></a><span class="lineno">12293</span>&#160;        }</div>
+<div class="line"><a name="l12289"></a><span class="lineno">12289</span>&#160;    <span class="comment">// Scope for lock.</span></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;        VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l12292"></a><span class="lineno">12292</span>&#160; </div>
+<div class="line"><a name="l12293"></a><span class="lineno">12293</span>&#160;        VmaDeviceMemoryBlock* pBlock = hAllocation-&gt;GetBlock();</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>(hAllocation-&gt;IsPersistentMap())</div>
+<div class="line"><a name="l12295"></a><span class="lineno">12295</span>&#160;        <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</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;            pBlock-&gt;Unmap(m_hAllocator, 1);</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;        pBlock-&gt;m_pMetadata-&gt;Free(hAllocation);</div>
-<div class="line"><a name="l12301"></a><span class="lineno">12301</span>&#160;        VMA_HEAVY_ASSERT(pBlock-&gt;Validate());</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;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;  Freed from MemoryTypeIndex=%u&quot;</span>, m_MemoryTypeIndex);</div>
-<div class="line"><a name="l12304"></a><span class="lineno">12304</span>&#160; </div>
-<div class="line"><a name="l12305"></a><span class="lineno">12305</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="l12306"></a><span class="lineno">12306</span>&#160;        <span class="comment">// pBlock became empty after this deallocation.</span></div>
-<div class="line"><a name="l12307"></a><span class="lineno">12307</span>&#160;        <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;IsEmpty())</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;            <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="l12310"></a><span class="lineno">12310</span>&#160;            <span class="keywordflow">if</span>((m_HasEmptyBlock || budgetExceeded) &amp;&amp; canDeleteBlock)</div>
-<div class="line"><a name="l12311"></a><span class="lineno">12311</span>&#160;            {</div>
-<div class="line"><a name="l12312"></a><span class="lineno">12312</span>&#160;                pBlockToDelete = pBlock;</div>
-<div class="line"><a name="l12313"></a><span class="lineno">12313</span>&#160;                Remove(pBlock);</div>
-<div class="line"><a name="l12314"></a><span class="lineno">12314</span>&#160;            }</div>
-<div class="line"><a name="l12315"></a><span class="lineno">12315</span>&#160;            <span class="comment">// else: We now have an empty block - leave it.</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;        <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="l12318"></a><span class="lineno">12318</span>&#160;        <span class="comment">// (This is optional, heuristics.)</span></div>
-<div class="line"><a name="l12319"></a><span class="lineno">12319</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_HasEmptyBlock &amp;&amp; canDeleteBlock)</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;            VmaDeviceMemoryBlock* pLastBlock = m_Blocks.back();</div>
-<div class="line"><a name="l12322"></a><span class="lineno">12322</span>&#160;            <span class="keywordflow">if</span>(pLastBlock-&gt;m_pMetadata-&gt;IsEmpty())</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;                pBlockToDelete = pLastBlock;</div>
-<div class="line"><a name="l12325"></a><span class="lineno">12325</span>&#160;                m_Blocks.pop_back();</div>
-<div class="line"><a name="l12326"></a><span class="lineno">12326</span>&#160;            }</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; </div>
-<div class="line"><a name="l12329"></a><span class="lineno">12329</span>&#160;        UpdateHasEmptyBlock();</div>
-<div class="line"><a name="l12330"></a><span class="lineno">12330</span>&#160;        IncrementallySortBlocks();</div>
-<div class="line"><a name="l12331"></a><span class="lineno">12331</span>&#160;    }</div>
-<div class="line"><a name="l12332"></a><span class="lineno">12332</span>&#160; </div>
-<div class="line"><a name="l12333"></a><span class="lineno">12333</span>&#160;    <span class="comment">// Destruction of a free block. Deferred until this point, outside of mutex</span></div>
-<div class="line"><a name="l12334"></a><span class="lineno">12334</span>&#160;    <span class="comment">// lock, for performance reason.</span></div>
-<div class="line"><a name="l12335"></a><span class="lineno">12335</span>&#160;    <span class="keywordflow">if</span>(pBlockToDelete != VMA_NULL)</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;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Deleted empty block&quot;</span>);</div>
-<div class="line"><a name="l12338"></a><span class="lineno">12338</span>&#160;        pBlockToDelete-&gt;Destroy(m_hAllocator);</div>
-<div class="line"><a name="l12339"></a><span class="lineno">12339</span>&#160;        vma_delete(m_hAllocator, pBlockToDelete);</div>
-<div class="line"><a name="l12340"></a><span class="lineno">12340</span>&#160;    }</div>
-<div class="line"><a name="l12341"></a><span class="lineno">12341</span>&#160;}</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;VkDeviceSize VmaBlockVector::CalcMaxBlockSize()<span class="keyword"> const</span></div>
-<div class="line"><a name="l12344"></a><span class="lineno">12344</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l12345"></a><span class="lineno">12345</span>&#160;    VkDeviceSize result = 0;</div>
-<div class="line"><a name="l12346"></a><span class="lineno">12346</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_Blocks.size(); i--; )</div>
-<div class="line"><a name="l12347"></a><span class="lineno">12347</span>&#160;    {</div>
-<div class="line"><a name="l12348"></a><span class="lineno">12348</span>&#160;        result = VMA_MAX(result, m_Blocks[i]-&gt;m_pMetadata-&gt;GetSize());</div>
-<div class="line"><a name="l12349"></a><span class="lineno">12349</span>&#160;        <span class="keywordflow">if</span>(result &gt;= m_PreferredBlockSize)</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;            <span class="keywordflow">break</span>;</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;    }</div>
-<div class="line"><a name="l12354"></a><span class="lineno">12354</span>&#160;    <span class="keywordflow">return</span> result;</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; </div>
-<div class="line"><a name="l12357"></a><span class="lineno">12357</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::Remove(VmaDeviceMemoryBlock* pBlock)</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;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</div>
-<div class="line"><a name="l12360"></a><span class="lineno">12360</span>&#160;    {</div>
-<div class="line"><a name="l12361"></a><span class="lineno">12361</span>&#160;        <span class="keywordflow">if</span>(m_Blocks[blockIndex] == pBlock)</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;            VmaVectorRemove(m_Blocks, blockIndex);</div>
-<div class="line"><a name="l12364"></a><span class="lineno">12364</span>&#160;            <span class="keywordflow">return</span>;</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;    }</div>
-<div class="line"><a name="l12367"></a><span class="lineno">12367</span>&#160;    VMA_ASSERT(0);</div>
-<div class="line"><a name="l12368"></a><span class="lineno">12368</span>&#160;}</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="keywordtype">void</span> VmaBlockVector::IncrementallySortBlocks()</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="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="l12373"></a><span class="lineno">12373</span>&#160;    {</div>
-<div class="line"><a name="l12374"></a><span class="lineno">12374</span>&#160;        <span class="comment">// Bubble sort only until first swap.</span></div>
-<div class="line"><a name="l12375"></a><span class="lineno">12375</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="l12376"></a><span class="lineno">12376</span>&#160;        {</div>
-<div class="line"><a name="l12377"></a><span class="lineno">12377</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="l12378"></a><span class="lineno">12378</span>&#160;            {</div>
-<div class="line"><a name="l12379"></a><span class="lineno">12379</span>&#160;                VMA_SWAP(m_Blocks[i - 1], m_Blocks[i]);</div>
-<div class="line"><a name="l12380"></a><span class="lineno">12380</span>&#160;                <span class="keywordflow">return</span>;</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;        }</div>
-<div class="line"><a name="l12383"></a><span class="lineno">12383</span>&#160;    }</div>
-<div class="line"><a name="l12384"></a><span class="lineno">12384</span>&#160;}</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;VkResult VmaBlockVector::AllocateFromBlock(</div>
-<div class="line"><a name="l12387"></a><span class="lineno">12387</span>&#160;    VmaDeviceMemoryBlock* pBlock,</div>
-<div class="line"><a name="l12388"></a><span class="lineno">12388</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l12389"></a><span class="lineno">12389</span>&#160;    VkDeviceSize size,</div>
-<div class="line"><a name="l12390"></a><span class="lineno">12390</span>&#160;    VkDeviceSize alignment,</div>
-<div class="line"><a name="l12391"></a><span class="lineno">12391</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a> allocFlags,</div>
-<div class="line"><a name="l12392"></a><span class="lineno">12392</span>&#160;    <span class="keywordtype">void</span>* pUserData,</div>
-<div class="line"><a name="l12393"></a><span class="lineno">12393</span>&#160;    VmaSuballocationType suballocType,</div>
-<div class="line"><a name="l12394"></a><span class="lineno">12394</span>&#160;    uint32_t strategy,</div>
-<div class="line"><a name="l12395"></a><span class="lineno">12395</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
-<div class="line"><a name="l12396"></a><span class="lineno">12396</span>&#160;{</div>
-<div class="line"><a name="l12397"></a><span class="lineno">12397</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="l12398"></a><span class="lineno">12398</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="l12399"></a><span class="lineno">12399</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="l12400"></a><span class="lineno">12400</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="l12401"></a><span class="lineno">12401</span>&#160; </div>
-<div class="line"><a name="l12402"></a><span class="lineno">12402</span>&#160;    VmaAllocationRequest currRequest = {};</div>
-<div class="line"><a name="l12403"></a><span class="lineno">12403</span>&#160;    <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
-<div class="line"><a name="l12404"></a><span class="lineno">12404</span>&#160;        currentFrameIndex,</div>
-<div class="line"><a name="l12405"></a><span class="lineno">12405</span>&#160;        m_FrameInUseCount,</div>
-<div class="line"><a name="l12406"></a><span class="lineno">12406</span>&#160;        m_BufferImageGranularity,</div>
-<div class="line"><a name="l12407"></a><span class="lineno">12407</span>&#160;        size,</div>
-<div class="line"><a name="l12408"></a><span class="lineno">12408</span>&#160;        alignment,</div>
-<div class="line"><a name="l12409"></a><span class="lineno">12409</span>&#160;        isUpperAddress,</div>
-<div class="line"><a name="l12410"></a><span class="lineno">12410</span>&#160;        suballocType,</div>
-<div class="line"><a name="l12411"></a><span class="lineno">12411</span>&#160;        <span class="keyword">false</span>, <span class="comment">// canMakeOtherLost</span></div>
-<div class="line"><a name="l12412"></a><span class="lineno">12412</span>&#160;        strategy,</div>
-<div class="line"><a name="l12413"></a><span class="lineno">12413</span>&#160;        &amp;currRequest))</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;        <span class="comment">// Allocate from pCurrBlock.</span></div>
-<div class="line"><a name="l12416"></a><span class="lineno">12416</span>&#160;        VMA_ASSERT(currRequest.itemsToMakeLostCount == 0);</div>
-<div class="line"><a name="l12417"></a><span class="lineno">12417</span>&#160; </div>
-<div class="line"><a name="l12418"></a><span class="lineno">12418</span>&#160;        <span class="keywordflow">if</span>(mapped)</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;            VkResult res = pBlock-&gt;Map(m_hAllocator, 1, VMA_NULL);</div>
-<div class="line"><a name="l12421"></a><span class="lineno">12421</span>&#160;            <span class="keywordflow">if</span>(res != VK_SUCCESS)</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">return</span> res;</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;        }</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;        *pAllocation = m_hAllocator-&gt;m_AllocationObjectAllocator.Allocate();</div>
-<div class="line"><a name="l12428"></a><span class="lineno">12428</span>&#160;        (*pAllocation)-&gt;Ctor(currentFrameIndex, isUserDataString);</div>
-<div class="line"><a name="l12429"></a><span class="lineno">12429</span>&#160;        pBlock-&gt;m_pMetadata-&gt;Alloc(currRequest, suballocType, size, *pAllocation);</div>
-<div class="line"><a name="l12430"></a><span class="lineno">12430</span>&#160;        UpdateHasEmptyBlock();</div>
-<div class="line"><a name="l12431"></a><span class="lineno">12431</span>&#160;        (*pAllocation)-&gt;InitBlockAllocation(</div>
-<div class="line"><a name="l12432"></a><span class="lineno">12432</span>&#160;            pBlock,</div>
-<div class="line"><a name="l12433"></a><span class="lineno">12433</span>&#160;            currRequest.offset,</div>
-<div class="line"><a name="l12434"></a><span class="lineno">12434</span>&#160;            alignment,</div>
-<div class="line"><a name="l12435"></a><span class="lineno">12435</span>&#160;            size,</div>
-<div class="line"><a name="l12436"></a><span class="lineno">12436</span>&#160;            m_MemoryTypeIndex,</div>
-<div class="line"><a name="l12437"></a><span class="lineno">12437</span>&#160;            suballocType,</div>
-<div class="line"><a name="l12438"></a><span class="lineno">12438</span>&#160;            mapped,</div>
-<div class="line"><a name="l12439"></a><span class="lineno">12439</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="l12440"></a><span class="lineno">12440</span>&#160;        VMA_HEAVY_ASSERT(pBlock-&gt;Validate());</div>
-<div class="line"><a name="l12441"></a><span class="lineno">12441</span>&#160;        (*pAllocation)-&gt;SetUserData(m_hAllocator, pUserData);</div>
-<div class="line"><a name="l12442"></a><span class="lineno">12442</span>&#160;        m_hAllocator-&gt;m_Budget.AddAllocation(m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), size);</div>
-<div class="line"><a name="l12443"></a><span class="lineno">12443</span>&#160;        <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</div>
-<div class="line"><a name="l12444"></a><span class="lineno">12444</span>&#160;        {</div>
-<div class="line"><a name="l12445"></a><span class="lineno">12445</span>&#160;            m_hAllocator-&gt;FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);</div>
-<div class="line"><a name="l12446"></a><span class="lineno">12446</span>&#160;        }</div>
-<div class="line"><a name="l12447"></a><span class="lineno">12447</span>&#160;        <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</div>
-<div class="line"><a name="l12448"></a><span class="lineno">12448</span>&#160;        {</div>
-<div class="line"><a name="l12449"></a><span class="lineno">12449</span>&#160;            VkResult res = pBlock-&gt;WriteMagicValueAroundAllocation(m_hAllocator, currRequest.offset, size);</div>
-<div class="line"><a name="l12450"></a><span class="lineno">12450</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="l12451"></a><span class="lineno">12451</span>&#160;        }</div>
-<div class="line"><a name="l12452"></a><span class="lineno">12452</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l12453"></a><span class="lineno">12453</span>&#160;    }</div>
-<div class="line"><a name="l12454"></a><span class="lineno">12454</span>&#160;    <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l12455"></a><span class="lineno">12455</span>&#160;}</div>
-<div class="line"><a name="l12456"></a><span class="lineno">12456</span>&#160; </div>
-<div class="line"><a name="l12457"></a><span class="lineno">12457</span>&#160;VkResult VmaBlockVector::CreateBlock(VkDeviceSize blockSize, <span class="keywordtype">size_t</span>* pNewBlockIndex)</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;    VkMemoryAllocateInfo allocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO };</div>
-<div class="line"><a name="l12460"></a><span class="lineno">12460</span>&#160;    allocInfo.memoryTypeIndex = m_MemoryTypeIndex;</div>
-<div class="line"><a name="l12461"></a><span class="lineno">12461</span>&#160;    allocInfo.allocationSize = blockSize;</div>
-<div class="line"><a name="l12462"></a><span class="lineno">12462</span>&#160;    VkDeviceMemory mem = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l12463"></a><span class="lineno">12463</span>&#160;    VkResult res = m_hAllocator-&gt;AllocateVulkanMemory(&amp;allocInfo, &amp;mem);</div>
-<div class="line"><a name="l12464"></a><span class="lineno">12464</span>&#160;    <span class="keywordflow">if</span>(res &lt; 0)</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;        <span class="keywordflow">return</span> res;</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; </div>
-<div class="line"><a name="l12469"></a><span class="lineno">12469</span>&#160;    <span class="comment">// New VkDeviceMemory successfully created.</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;    <span class="comment">// Create new Allocation for it.</span></div>
-<div class="line"><a name="l12472"></a><span class="lineno">12472</span>&#160;    VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = vma_new(m_hAllocator, VmaDeviceMemoryBlock)(m_hAllocator);</div>
-<div class="line"><a name="l12473"></a><span class="lineno">12473</span>&#160;    pBlock-&gt;Init(</div>
-<div class="line"><a name="l12474"></a><span class="lineno">12474</span>&#160;        m_hAllocator,</div>
-<div class="line"><a name="l12475"></a><span class="lineno">12475</span>&#160;        m_hParentPool,</div>
-<div class="line"><a name="l12476"></a><span class="lineno">12476</span>&#160;        m_MemoryTypeIndex,</div>
-<div class="line"><a name="l12477"></a><span class="lineno">12477</span>&#160;        mem,</div>
-<div class="line"><a name="l12478"></a><span class="lineno">12478</span>&#160;        allocInfo.allocationSize,</div>
-<div class="line"><a name="l12479"></a><span class="lineno">12479</span>&#160;        m_NextBlockId++,</div>
-<div class="line"><a name="l12480"></a><span class="lineno">12480</span>&#160;        m_Algorithm);</div>
-<div class="line"><a name="l12481"></a><span class="lineno">12481</span>&#160; </div>
-<div class="line"><a name="l12482"></a><span class="lineno">12482</span>&#160;    m_Blocks.push_back(pBlock);</div>
-<div class="line"><a name="l12483"></a><span class="lineno">12483</span>&#160;    <span class="keywordflow">if</span>(pNewBlockIndex != VMA_NULL)</div>
-<div class="line"><a name="l12484"></a><span class="lineno">12484</span>&#160;    {</div>
-<div class="line"><a name="l12485"></a><span class="lineno">12485</span>&#160;        *pNewBlockIndex = m_Blocks.size() - 1;</div>
-<div class="line"><a name="l12486"></a><span class="lineno">12486</span>&#160;    }</div>
+<div class="line"><a name="l12297"></a><span class="lineno">12297</span>&#160;            VkResult res = pBlock-&gt;ValidateMagicValueAroundAllocation(m_hAllocator, hAllocation-&gt;GetOffset(), hAllocation-&gt;GetSize());</div>
+<div class="line"><a name="l12298"></a><span class="lineno">12298</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="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="keywordflow">if</span>(hAllocation-&gt;IsPersistentMap())</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;            pBlock-&gt;Unmap(m_hAllocator, 1);</div>
+<div class="line"><a name="l12304"></a><span class="lineno">12304</span>&#160;        }</div>
+<div class="line"><a name="l12305"></a><span class="lineno">12305</span>&#160; </div>
+<div class="line"><a name="l12306"></a><span class="lineno">12306</span>&#160;        pBlock-&gt;m_pMetadata-&gt;Free(hAllocation);</div>
+<div class="line"><a name="l12307"></a><span class="lineno">12307</span>&#160;        VMA_HEAVY_ASSERT(pBlock-&gt;Validate());</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;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;  Freed from MemoryTypeIndex=%u&quot;</span>, m_MemoryTypeIndex);</div>
+<div class="line"><a name="l12310"></a><span class="lineno">12310</span>&#160; </div>
+<div class="line"><a name="l12311"></a><span class="lineno">12311</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="l12312"></a><span class="lineno">12312</span>&#160;        <span class="comment">// pBlock became empty after this deallocation.</span></div>
+<div class="line"><a name="l12313"></a><span class="lineno">12313</span>&#160;        <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;IsEmpty())</div>
+<div class="line"><a name="l12314"></a><span class="lineno">12314</span>&#160;        {</div>
+<div class="line"><a name="l12315"></a><span class="lineno">12315</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="l12316"></a><span class="lineno">12316</span>&#160;            <span class="keywordflow">if</span>((m_HasEmptyBlock || budgetExceeded) &amp;&amp; canDeleteBlock)</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;                pBlockToDelete = pBlock;</div>
+<div class="line"><a name="l12319"></a><span class="lineno">12319</span>&#160;                Remove(pBlock);</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="comment">// else: We now have an empty block - leave it.</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;        <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="l12324"></a><span class="lineno">12324</span>&#160;        <span class="comment">// (This is optional, heuristics.)</span></div>
+<div class="line"><a name="l12325"></a><span class="lineno">12325</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(m_HasEmptyBlock &amp;&amp; canDeleteBlock)</div>
+<div class="line"><a name="l12326"></a><span class="lineno">12326</span>&#160;        {</div>
+<div class="line"><a name="l12327"></a><span class="lineno">12327</span>&#160;            VmaDeviceMemoryBlock* pLastBlock = m_Blocks.back();</div>
+<div class="line"><a name="l12328"></a><span class="lineno">12328</span>&#160;            <span class="keywordflow">if</span>(pLastBlock-&gt;m_pMetadata-&gt;IsEmpty())</div>
+<div class="line"><a name="l12329"></a><span class="lineno">12329</span>&#160;            {</div>
+<div class="line"><a name="l12330"></a><span class="lineno">12330</span>&#160;                pBlockToDelete = pLastBlock;</div>
+<div class="line"><a name="l12331"></a><span class="lineno">12331</span>&#160;                m_Blocks.pop_back();</div>
+<div class="line"><a name="l12332"></a><span class="lineno">12332</span>&#160;            }</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;        UpdateHasEmptyBlock();</div>
+<div class="line"><a name="l12336"></a><span class="lineno">12336</span>&#160;        IncrementallySortBlocks();</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; </div>
+<div class="line"><a name="l12339"></a><span class="lineno">12339</span>&#160;    <span class="comment">// Destruction of a free block. Deferred until this point, outside of mutex</span></div>
+<div class="line"><a name="l12340"></a><span class="lineno">12340</span>&#160;    <span class="comment">// lock, for performance reason.</span></div>
+<div class="line"><a name="l12341"></a><span class="lineno">12341</span>&#160;    <span class="keywordflow">if</span>(pBlockToDelete != VMA_NULL)</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;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Deleted empty block&quot;</span>);</div>
+<div class="line"><a name="l12344"></a><span class="lineno">12344</span>&#160;        pBlockToDelete-&gt;Destroy(m_hAllocator);</div>
+<div class="line"><a name="l12345"></a><span class="lineno">12345</span>&#160;        vma_delete(m_hAllocator, pBlockToDelete);</div>
+<div class="line"><a name="l12346"></a><span class="lineno">12346</span>&#160;    }</div>
+<div class="line"><a name="l12347"></a><span class="lineno">12347</span>&#160;}</div>
+<div class="line"><a name="l12348"></a><span class="lineno">12348</span>&#160; </div>
+<div class="line"><a name="l12349"></a><span class="lineno">12349</span>&#160;VkDeviceSize VmaBlockVector::CalcMaxBlockSize()<span class="keyword"> const</span></div>
+<div class="line"><a name="l12350"></a><span class="lineno">12350</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l12351"></a><span class="lineno">12351</span>&#160;    VkDeviceSize result = 0;</div>
+<div class="line"><a name="l12352"></a><span class="lineno">12352</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_Blocks.size(); i--; )</div>
+<div class="line"><a name="l12353"></a><span class="lineno">12353</span>&#160;    {</div>
+<div class="line"><a name="l12354"></a><span class="lineno">12354</span>&#160;        result = VMA_MAX(result, m_Blocks[i]-&gt;m_pMetadata-&gt;GetSize());</div>
+<div class="line"><a name="l12355"></a><span class="lineno">12355</span>&#160;        <span class="keywordflow">if</span>(result &gt;= m_PreferredBlockSize)</div>
+<div class="line"><a name="l12356"></a><span class="lineno">12356</span>&#160;        {</div>
+<div class="line"><a name="l12357"></a><span class="lineno">12357</span>&#160;            <span class="keywordflow">break</span>;</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;    }</div>
+<div class="line"><a name="l12360"></a><span class="lineno">12360</span>&#160;    <span class="keywordflow">return</span> result;</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="keywordtype">void</span> VmaBlockVector::Remove(VmaDeviceMemoryBlock* pBlock)</div>
+<div class="line"><a name="l12364"></a><span class="lineno">12364</span>&#160;{</div>
+<div class="line"><a name="l12365"></a><span class="lineno">12365</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</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="keywordflow">if</span>(m_Blocks[blockIndex] == pBlock)</div>
+<div class="line"><a name="l12368"></a><span class="lineno">12368</span>&#160;        {</div>
+<div class="line"><a name="l12369"></a><span class="lineno">12369</span>&#160;            VmaVectorRemove(m_Blocks, blockIndex);</div>
+<div class="line"><a name="l12370"></a><span class="lineno">12370</span>&#160;            <span class="keywordflow">return</span>;</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;    }</div>
+<div class="line"><a name="l12373"></a><span class="lineno">12373</span>&#160;    VMA_ASSERT(0);</div>
+<div class="line"><a name="l12374"></a><span class="lineno">12374</span>&#160;}</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;<span class="keywordtype">void</span> VmaBlockVector::IncrementallySortBlocks()</div>
+<div class="line"><a name="l12377"></a><span class="lineno">12377</span>&#160;{</div>
+<div class="line"><a name="l12378"></a><span class="lineno">12378</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="l12379"></a><span class="lineno">12379</span>&#160;    {</div>
+<div class="line"><a name="l12380"></a><span class="lineno">12380</span>&#160;        <span class="comment">// Bubble sort only until first swap.</span></div>
+<div class="line"><a name="l12381"></a><span class="lineno">12381</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="l12382"></a><span class="lineno">12382</span>&#160;        {</div>
+<div class="line"><a name="l12383"></a><span class="lineno">12383</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="l12384"></a><span class="lineno">12384</span>&#160;            {</div>
+<div class="line"><a name="l12385"></a><span class="lineno">12385</span>&#160;                VMA_SWAP(m_Blocks[i - 1], m_Blocks[i]);</div>
+<div class="line"><a name="l12386"></a><span class="lineno">12386</span>&#160;                <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l12387"></a><span class="lineno">12387</span>&#160;            }</div>
+<div class="line"><a name="l12388"></a><span class="lineno">12388</span>&#160;        }</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;}</div>
+<div class="line"><a name="l12391"></a><span class="lineno">12391</span>&#160; </div>
+<div class="line"><a name="l12392"></a><span class="lineno">12392</span>&#160;VkResult VmaBlockVector::AllocateFromBlock(</div>
+<div class="line"><a name="l12393"></a><span class="lineno">12393</span>&#160;    VmaDeviceMemoryBlock* pBlock,</div>
+<div class="line"><a name="l12394"></a><span class="lineno">12394</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l12395"></a><span class="lineno">12395</span>&#160;    VkDeviceSize size,</div>
+<div class="line"><a name="l12396"></a><span class="lineno">12396</span>&#160;    VkDeviceSize alignment,</div>
+<div class="line"><a name="l12397"></a><span class="lineno">12397</span>&#160;    <a class="code" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a> allocFlags,</div>
+<div class="line"><a name="l12398"></a><span class="lineno">12398</span>&#160;    <span class="keywordtype">void</span>* pUserData,</div>
+<div class="line"><a name="l12399"></a><span class="lineno">12399</span>&#160;    VmaSuballocationType suballocType,</div>
+<div class="line"><a name="l12400"></a><span class="lineno">12400</span>&#160;    uint32_t strategy,</div>
+<div class="line"><a name="l12401"></a><span class="lineno">12401</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
+<div class="line"><a name="l12402"></a><span class="lineno">12402</span>&#160;{</div>
+<div class="line"><a name="l12403"></a><span class="lineno">12403</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="l12404"></a><span class="lineno">12404</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="l12405"></a><span class="lineno">12405</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="l12406"></a><span class="lineno">12406</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="l12407"></a><span class="lineno">12407</span>&#160; </div>
+<div class="line"><a name="l12408"></a><span class="lineno">12408</span>&#160;    VmaAllocationRequest currRequest = {};</div>
+<div class="line"><a name="l12409"></a><span class="lineno">12409</span>&#160;    <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
+<div class="line"><a name="l12410"></a><span class="lineno">12410</span>&#160;        currentFrameIndex,</div>
+<div class="line"><a name="l12411"></a><span class="lineno">12411</span>&#160;        m_FrameInUseCount,</div>
+<div class="line"><a name="l12412"></a><span class="lineno">12412</span>&#160;        m_BufferImageGranularity,</div>
+<div class="line"><a name="l12413"></a><span class="lineno">12413</span>&#160;        size,</div>
+<div class="line"><a name="l12414"></a><span class="lineno">12414</span>&#160;        alignment,</div>
+<div class="line"><a name="l12415"></a><span class="lineno">12415</span>&#160;        isUpperAddress,</div>
+<div class="line"><a name="l12416"></a><span class="lineno">12416</span>&#160;        suballocType,</div>
+<div class="line"><a name="l12417"></a><span class="lineno">12417</span>&#160;        <span class="keyword">false</span>, <span class="comment">// canMakeOtherLost</span></div>
+<div class="line"><a name="l12418"></a><span class="lineno">12418</span>&#160;        strategy,</div>
+<div class="line"><a name="l12419"></a><span class="lineno">12419</span>&#160;        &amp;currRequest))</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="comment">// Allocate from pCurrBlock.</span></div>
+<div class="line"><a name="l12422"></a><span class="lineno">12422</span>&#160;        VMA_ASSERT(currRequest.itemsToMakeLostCount == 0);</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;        <span class="keywordflow">if</span>(mapped)</div>
+<div class="line"><a name="l12425"></a><span class="lineno">12425</span>&#160;        {</div>
+<div class="line"><a name="l12426"></a><span class="lineno">12426</span>&#160;            VkResult res = pBlock-&gt;Map(m_hAllocator, 1, VMA_NULL);</div>
+<div class="line"><a name="l12427"></a><span class="lineno">12427</span>&#160;            <span class="keywordflow">if</span>(res != VK_SUCCESS)</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;                <span class="keywordflow">return</span> res;</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;            </div>
+<div class="line"><a name="l12433"></a><span class="lineno">12433</span>&#160;        *pAllocation = m_hAllocator-&gt;m_AllocationObjectAllocator.Allocate();</div>
+<div class="line"><a name="l12434"></a><span class="lineno">12434</span>&#160;        (*pAllocation)-&gt;Ctor(currentFrameIndex, isUserDataString);</div>
+<div class="line"><a name="l12435"></a><span class="lineno">12435</span>&#160;        pBlock-&gt;m_pMetadata-&gt;Alloc(currRequest, suballocType, size, *pAllocation);</div>
+<div class="line"><a name="l12436"></a><span class="lineno">12436</span>&#160;        UpdateHasEmptyBlock();</div>
+<div class="line"><a name="l12437"></a><span class="lineno">12437</span>&#160;        (*pAllocation)-&gt;InitBlockAllocation(</div>
+<div class="line"><a name="l12438"></a><span class="lineno">12438</span>&#160;            pBlock,</div>
+<div class="line"><a name="l12439"></a><span class="lineno">12439</span>&#160;            currRequest.offset,</div>
+<div class="line"><a name="l12440"></a><span class="lineno">12440</span>&#160;            alignment,</div>
+<div class="line"><a name="l12441"></a><span class="lineno">12441</span>&#160;            size,</div>
+<div class="line"><a name="l12442"></a><span class="lineno">12442</span>&#160;            m_MemoryTypeIndex,</div>
+<div class="line"><a name="l12443"></a><span class="lineno">12443</span>&#160;            suballocType,</div>
+<div class="line"><a name="l12444"></a><span class="lineno">12444</span>&#160;            mapped,</div>
+<div class="line"><a name="l12445"></a><span class="lineno">12445</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="l12446"></a><span class="lineno">12446</span>&#160;        VMA_HEAVY_ASSERT(pBlock-&gt;Validate());</div>
+<div class="line"><a name="l12447"></a><span class="lineno">12447</span>&#160;        (*pAllocation)-&gt;SetUserData(m_hAllocator, pUserData);</div>
+<div class="line"><a name="l12448"></a><span class="lineno">12448</span>&#160;        m_hAllocator-&gt;m_Budget.AddAllocation(m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), size);</div>
+<div class="line"><a name="l12449"></a><span class="lineno">12449</span>&#160;        <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</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;            m_hAllocator-&gt;FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);</div>
+<div class="line"><a name="l12452"></a><span class="lineno">12452</span>&#160;        }</div>
+<div class="line"><a name="l12453"></a><span class="lineno">12453</span>&#160;        <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</div>
+<div class="line"><a name="l12454"></a><span class="lineno">12454</span>&#160;        {</div>
+<div class="line"><a name="l12455"></a><span class="lineno">12455</span>&#160;            VkResult res = pBlock-&gt;WriteMagicValueAroundAllocation(m_hAllocator, currRequest.offset, size);</div>
+<div class="line"><a name="l12456"></a><span class="lineno">12456</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="l12457"></a><span class="lineno">12457</span>&#160;        }</div>
+<div class="line"><a name="l12458"></a><span class="lineno">12458</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</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="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l12461"></a><span class="lineno">12461</span>&#160;}</div>
+<div class="line"><a name="l12462"></a><span class="lineno">12462</span>&#160; </div>
+<div class="line"><a name="l12463"></a><span class="lineno">12463</span>&#160;VkResult VmaBlockVector::CreateBlock(VkDeviceSize blockSize, <span class="keywordtype">size_t</span>* pNewBlockIndex)</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;    VkMemoryAllocateInfo allocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO };</div>
+<div class="line"><a name="l12466"></a><span class="lineno">12466</span>&#160;    allocInfo.memoryTypeIndex = m_MemoryTypeIndex;</div>
+<div class="line"><a name="l12467"></a><span class="lineno">12467</span>&#160;    allocInfo.allocationSize = blockSize;</div>
+<div class="line"><a name="l12468"></a><span class="lineno">12468</span>&#160;    VkDeviceMemory mem = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l12469"></a><span class="lineno">12469</span>&#160;    VkResult res = m_hAllocator-&gt;AllocateVulkanMemory(&amp;allocInfo, &amp;mem);</div>
+<div class="line"><a name="l12470"></a><span class="lineno">12470</span>&#160;    <span class="keywordflow">if</span>(res &lt; 0)</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> res;</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;    <span class="comment">// New VkDeviceMemory successfully created.</span></div>
+<div class="line"><a name="l12476"></a><span class="lineno">12476</span>&#160; </div>
+<div class="line"><a name="l12477"></a><span class="lineno">12477</span>&#160;    <span class="comment">// Create new Allocation for it.</span></div>
+<div class="line"><a name="l12478"></a><span class="lineno">12478</span>&#160;    VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = vma_new(m_hAllocator, VmaDeviceMemoryBlock)(m_hAllocator);</div>
+<div class="line"><a name="l12479"></a><span class="lineno">12479</span>&#160;    pBlock-&gt;Init(</div>
+<div class="line"><a name="l12480"></a><span class="lineno">12480</span>&#160;        m_hAllocator,</div>
+<div class="line"><a name="l12481"></a><span class="lineno">12481</span>&#160;        m_hParentPool,</div>
+<div class="line"><a name="l12482"></a><span class="lineno">12482</span>&#160;        m_MemoryTypeIndex,</div>
+<div class="line"><a name="l12483"></a><span class="lineno">12483</span>&#160;        mem,</div>
+<div class="line"><a name="l12484"></a><span class="lineno">12484</span>&#160;        allocInfo.allocationSize,</div>
+<div class="line"><a name="l12485"></a><span class="lineno">12485</span>&#160;        m_NextBlockId++,</div>
+<div class="line"><a name="l12486"></a><span class="lineno">12486</span>&#160;        m_Algorithm);</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> VK_SUCCESS;</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> VmaBlockVector::ApplyDefragmentationMovesCpu(</div>
-<div class="line"><a name="l12492"></a><span class="lineno">12492</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pDefragCtx,</div>
-<div class="line"><a name="l12493"></a><span class="lineno">12493</span>&#160;    <span class="keyword">const</span> VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves)</div>
-<div class="line"><a name="l12494"></a><span class="lineno">12494</span>&#160;{</div>
-<div class="line"><a name="l12495"></a><span class="lineno">12495</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_Blocks.size();</div>
-<div class="line"><a name="l12496"></a><span class="lineno">12496</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="l12497"></a><span class="lineno">12497</span>&#160; </div>
-<div class="line"><a name="l12498"></a><span class="lineno">12498</span>&#160;    <span class="keyword">enum</span> BLOCK_FLAG</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;        BLOCK_FLAG_USED = 0x00000001,</div>
-<div class="line"><a name="l12501"></a><span class="lineno">12501</span>&#160;        BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION = 0x00000002,</div>
-<div class="line"><a name="l12502"></a><span class="lineno">12502</span>&#160;    };</div>
+<div class="line"><a name="l12488"></a><span class="lineno">12488</span>&#160;    m_Blocks.push_back(pBlock);</div>
+<div class="line"><a name="l12489"></a><span class="lineno">12489</span>&#160;    <span class="keywordflow">if</span>(pNewBlockIndex != VMA_NULL)</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;        *pNewBlockIndex = m_Blocks.size() - 1;</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; </div>
+<div class="line"><a name="l12494"></a><span class="lineno">12494</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l12495"></a><span class="lineno">12495</span>&#160;}</div>
+<div class="line"><a name="l12496"></a><span class="lineno">12496</span>&#160; </div>
+<div class="line"><a name="l12497"></a><span class="lineno">12497</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::ApplyDefragmentationMovesCpu(</div>
+<div class="line"><a name="l12498"></a><span class="lineno">12498</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pDefragCtx,</div>
+<div class="line"><a name="l12499"></a><span class="lineno">12499</span>&#160;    <span class="keyword">const</span> VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves)</div>
+<div class="line"><a name="l12500"></a><span class="lineno">12500</span>&#160;{</div>
+<div class="line"><a name="l12501"></a><span class="lineno">12501</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_Blocks.size();</div>
+<div class="line"><a name="l12502"></a><span class="lineno">12502</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="l12503"></a><span class="lineno">12503</span>&#160; </div>
-<div class="line"><a name="l12504"></a><span class="lineno">12504</span>&#160;    <span class="keyword">struct </span>BlockInfo</div>
+<div class="line"><a name="l12504"></a><span class="lineno">12504</span>&#160;    <span class="keyword">enum</span> BLOCK_FLAG</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;        uint32_t flags;</div>
-<div class="line"><a name="l12507"></a><span class="lineno">12507</span>&#160;        <span class="keywordtype">void</span>* pMappedData;</div>
+<div class="line"><a name="l12506"></a><span class="lineno">12506</span>&#160;        BLOCK_FLAG_USED = 0x00000001,</div>
+<div class="line"><a name="l12507"></a><span class="lineno">12507</span>&#160;        BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION = 0x00000002,</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;    VmaVector&lt; BlockInfo, VmaStlAllocator&lt;BlockInfo&gt; &gt;</div>
-<div class="line"><a name="l12510"></a><span class="lineno">12510</span>&#160;        blockInfo(blockCount, BlockInfo(), VmaStlAllocator&lt;BlockInfo&gt;(m_hAllocator-&gt;GetAllocationCallbacks()));</div>
-<div class="line"><a name="l12511"></a><span class="lineno">12511</span>&#160;    memset(blockInfo.data(), 0, blockCount * <span class="keyword">sizeof</span>(BlockInfo));</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;    <span class="comment">// Go over all moves. Mark blocks that are used with BLOCK_FLAG_USED.</span></div>
-<div class="line"><a name="l12514"></a><span class="lineno">12514</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> moveCount = moves.size();</div>
-<div class="line"><a name="l12515"></a><span class="lineno">12515</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="l12516"></a><span class="lineno">12516</span>&#160;    {</div>
-<div class="line"><a name="l12517"></a><span class="lineno">12517</span>&#160;        <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</div>
-<div class="line"><a name="l12518"></a><span class="lineno">12518</span>&#160;        blockInfo[move.srcBlockIndex].flags |= BLOCK_FLAG_USED;</div>
-<div class="line"><a name="l12519"></a><span class="lineno">12519</span>&#160;        blockInfo[move.dstBlockIndex].flags |= BLOCK_FLAG_USED;</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; </div>
-<div class="line"><a name="l12522"></a><span class="lineno">12522</span>&#160;    VMA_ASSERT(pDefragCtx-&gt;res == VK_SUCCESS);</div>
-<div class="line"><a name="l12523"></a><span class="lineno">12523</span>&#160; </div>
-<div class="line"><a name="l12524"></a><span class="lineno">12524</span>&#160;    <span class="comment">// Go over all blocks. Get mapped pointer or map if necessary.</span></div>
-<div class="line"><a name="l12525"></a><span class="lineno">12525</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="l12526"></a><span class="lineno">12526</span>&#160;    {</div>
-<div class="line"><a name="l12527"></a><span class="lineno">12527</span>&#160;        BlockInfo&amp; currBlockInfo = blockInfo[blockIndex];</div>
-<div class="line"><a name="l12528"></a><span class="lineno">12528</span>&#160;        VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l12529"></a><span class="lineno">12529</span>&#160;        <span class="keywordflow">if</span>((currBlockInfo.flags &amp; BLOCK_FLAG_USED) != 0)</div>
-<div class="line"><a name="l12530"></a><span class="lineno">12530</span>&#160;        {</div>
-<div class="line"><a name="l12531"></a><span class="lineno">12531</span>&#160;            currBlockInfo.pMappedData = pBlock-&gt;GetMappedData();</div>
-<div class="line"><a name="l12532"></a><span class="lineno">12532</span>&#160;            <span class="comment">// It is not originally mapped - map it.</span></div>
-<div class="line"><a name="l12533"></a><span class="lineno">12533</span>&#160;            <span class="keywordflow">if</span>(currBlockInfo.pMappedData == VMA_NULL)</div>
-<div class="line"><a name="l12534"></a><span class="lineno">12534</span>&#160;            {</div>
-<div class="line"><a name="l12535"></a><span class="lineno">12535</span>&#160;                pDefragCtx-&gt;res = pBlock-&gt;Map(m_hAllocator, 1, &amp;currBlockInfo.pMappedData);</div>
-<div class="line"><a name="l12536"></a><span class="lineno">12536</span>&#160;                <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</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;                    currBlockInfo.flags |= BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION;</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;        }</div>
-<div class="line"><a name="l12542"></a><span class="lineno">12542</span>&#160;    }</div>
-<div class="line"><a name="l12543"></a><span class="lineno">12543</span>&#160; </div>
-<div class="line"><a name="l12544"></a><span class="lineno">12544</span>&#160;    <span class="comment">// Go over all moves. Do actual data transfer.</span></div>
-<div class="line"><a name="l12545"></a><span class="lineno">12545</span>&#160;    <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</div>
-<div class="line"><a name="l12546"></a><span class="lineno">12546</span>&#160;    {</div>
-<div class="line"><a name="l12547"></a><span class="lineno">12547</span>&#160;        <span class="keyword">const</span> VkDeviceSize nonCoherentAtomSize = m_hAllocator-&gt;m_PhysicalDeviceProperties.limits.nonCoherentAtomSize;</div>
-<div class="line"><a name="l12548"></a><span class="lineno">12548</span>&#160;        VkMappedMemoryRange memRange = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE };</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;    <span class="keyword">struct </span>BlockInfo</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;        uint32_t flags;</div>
+<div class="line"><a name="l12513"></a><span class="lineno">12513</span>&#160;        <span class="keywordtype">void</span>* pMappedData;</div>
+<div class="line"><a name="l12514"></a><span class="lineno">12514</span>&#160;    };</div>
+<div class="line"><a name="l12515"></a><span class="lineno">12515</span>&#160;    VmaVector&lt; BlockInfo, VmaStlAllocator&lt;BlockInfo&gt; &gt;</div>
+<div class="line"><a name="l12516"></a><span class="lineno">12516</span>&#160;        blockInfo(blockCount, BlockInfo(), VmaStlAllocator&lt;BlockInfo&gt;(m_hAllocator-&gt;GetAllocationCallbacks()));</div>
+<div class="line"><a name="l12517"></a><span class="lineno">12517</span>&#160;    memset(blockInfo.data(), 0, blockCount * <span class="keyword">sizeof</span>(BlockInfo));</div>
+<div class="line"><a name="l12518"></a><span class="lineno">12518</span>&#160; </div>
+<div class="line"><a name="l12519"></a><span class="lineno">12519</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="l12520"></a><span class="lineno">12520</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> moveCount = moves.size();</div>
+<div class="line"><a name="l12521"></a><span class="lineno">12521</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="l12522"></a><span class="lineno">12522</span>&#160;    {</div>
+<div class="line"><a name="l12523"></a><span class="lineno">12523</span>&#160;        <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</div>
+<div class="line"><a name="l12524"></a><span class="lineno">12524</span>&#160;        blockInfo[move.srcBlockIndex].flags |= BLOCK_FLAG_USED;</div>
+<div class="line"><a name="l12525"></a><span class="lineno">12525</span>&#160;        blockInfo[move.dstBlockIndex].flags |= BLOCK_FLAG_USED;</div>
+<div class="line"><a name="l12526"></a><span class="lineno">12526</span>&#160;    }</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_ASSERT(pDefragCtx-&gt;res == VK_SUCCESS);</div>
+<div class="line"><a name="l12529"></a><span class="lineno">12529</span>&#160; </div>
+<div class="line"><a name="l12530"></a><span class="lineno">12530</span>&#160;    <span class="comment">// Go over all blocks. Get mapped pointer or map if necessary.</span></div>
+<div class="line"><a name="l12531"></a><span class="lineno">12531</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="l12532"></a><span class="lineno">12532</span>&#160;    {</div>
+<div class="line"><a name="l12533"></a><span class="lineno">12533</span>&#160;        BlockInfo&amp; currBlockInfo = blockInfo[blockIndex];</div>
+<div class="line"><a name="l12534"></a><span class="lineno">12534</span>&#160;        VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l12535"></a><span class="lineno">12535</span>&#160;        <span class="keywordflow">if</span>((currBlockInfo.flags &amp; BLOCK_FLAG_USED) != 0)</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;            currBlockInfo.pMappedData = pBlock-&gt;GetMappedData();</div>
+<div class="line"><a name="l12538"></a><span class="lineno">12538</span>&#160;            <span class="comment">// It is not originally mapped - map it.</span></div>
+<div class="line"><a name="l12539"></a><span class="lineno">12539</span>&#160;            <span class="keywordflow">if</span>(currBlockInfo.pMappedData == VMA_NULL)</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;                pDefragCtx-&gt;res = pBlock-&gt;Map(m_hAllocator, 1, &amp;currBlockInfo.pMappedData);</div>
+<div class="line"><a name="l12542"></a><span class="lineno">12542</span>&#160;                <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</div>
+<div class="line"><a name="l12543"></a><span class="lineno">12543</span>&#160;                {</div>
+<div class="line"><a name="l12544"></a><span class="lineno">12544</span>&#160;                    currBlockInfo.flags |= BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION;</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;            }</div>
+<div class="line"><a name="l12547"></a><span class="lineno">12547</span>&#160;        }</div>
+<div class="line"><a name="l12548"></a><span class="lineno">12548</span>&#160;    }</div>
 <div class="line"><a name="l12549"></a><span class="lineno">12549</span>&#160; </div>
-<div class="line"><a name="l12550"></a><span class="lineno">12550</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="l12551"></a><span class="lineno">12551</span>&#160;        {</div>
-<div class="line"><a name="l12552"></a><span class="lineno">12552</span>&#160;            <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</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> BlockInfo&amp; srcBlockInfo = blockInfo[move.srcBlockIndex];</div>
-<div class="line"><a name="l12555"></a><span class="lineno">12555</span>&#160;            <span class="keyword">const</span> BlockInfo&amp; dstBlockInfo = blockInfo[move.dstBlockIndex];</div>
-<div class="line"><a name="l12556"></a><span class="lineno">12556</span>&#160; </div>
-<div class="line"><a name="l12557"></a><span class="lineno">12557</span>&#160;            VMA_ASSERT(srcBlockInfo.pMappedData &amp;&amp; dstBlockInfo.pMappedData);</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="comment">// Invalidate source.</span></div>
-<div class="line"><a name="l12560"></a><span class="lineno">12560</span>&#160;            <span class="keywordflow">if</span>(isNonCoherent)</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;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pSrcBlock = m_Blocks[move.srcBlockIndex];</div>
-<div class="line"><a name="l12563"></a><span class="lineno">12563</span>&#160;                memRange.memory = pSrcBlock-&gt;GetDeviceMemory();</div>
-<div class="line"><a name="l12564"></a><span class="lineno">12564</span>&#160;                memRange.offset = VmaAlignDown(move.srcOffset, nonCoherentAtomSize);</div>
-<div class="line"><a name="l12565"></a><span class="lineno">12565</span>&#160;                memRange.size = VMA_MIN(</div>
-<div class="line"><a name="l12566"></a><span class="lineno">12566</span>&#160;                    VmaAlignUp(move.size + (move.srcOffset - memRange.offset), nonCoherentAtomSize),</div>
-<div class="line"><a name="l12567"></a><span class="lineno">12567</span>&#160;                    pSrcBlock-&gt;m_pMetadata-&gt;GetSize() - memRange.offset);</div>
-<div class="line"><a name="l12568"></a><span class="lineno">12568</span>&#160;                (*m_hAllocator-&gt;GetVulkanFunctions().vkInvalidateMappedMemoryRanges)(m_hAllocator-&gt;m_hDevice, 1, &amp;memRange);</div>
-<div class="line"><a name="l12569"></a><span class="lineno">12569</span>&#160;            }</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="comment">// THE PLACE WHERE ACTUAL DATA COPY HAPPENS.</span></div>
-<div class="line"><a name="l12572"></a><span class="lineno">12572</span>&#160;            memmove(</div>
-<div class="line"><a name="l12573"></a><span class="lineno">12573</span>&#160;                reinterpret_cast&lt;char*&gt;(dstBlockInfo.pMappedData) + move.dstOffset,</div>
-<div class="line"><a name="l12574"></a><span class="lineno">12574</span>&#160;                reinterpret_cast&lt;char*&gt;(srcBlockInfo.pMappedData) + move.srcOffset,</div>
-<div class="line"><a name="l12575"></a><span class="lineno">12575</span>&#160;                static_cast&lt;size_t&gt;(move.size));</div>
+<div class="line"><a name="l12550"></a><span class="lineno">12550</span>&#160;    <span class="comment">// Go over all moves. Do actual data transfer.</span></div>
+<div class="line"><a name="l12551"></a><span class="lineno">12551</span>&#160;    <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</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 nonCoherentAtomSize = m_hAllocator-&gt;m_PhysicalDeviceProperties.limits.nonCoherentAtomSize;</div>
+<div class="line"><a name="l12554"></a><span class="lineno">12554</span>&#160;        VkMappedMemoryRange memRange = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE };</div>
+<div class="line"><a name="l12555"></a><span class="lineno">12555</span>&#160; </div>
+<div class="line"><a name="l12556"></a><span class="lineno">12556</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="l12557"></a><span class="lineno">12557</span>&#160;        {</div>
+<div class="line"><a name="l12558"></a><span class="lineno">12558</span>&#160;            <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</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> BlockInfo&amp; srcBlockInfo = blockInfo[move.srcBlockIndex];</div>
+<div class="line"><a name="l12561"></a><span class="lineno">12561</span>&#160;            <span class="keyword">const</span> BlockInfo&amp; dstBlockInfo = blockInfo[move.dstBlockIndex];</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;            VMA_ASSERT(srcBlockInfo.pMappedData &amp;&amp; dstBlockInfo.pMappedData);</div>
+<div class="line"><a name="l12564"></a><span class="lineno">12564</span>&#160; </div>
+<div class="line"><a name="l12565"></a><span class="lineno">12565</span>&#160;            <span class="comment">// Invalidate source.</span></div>
+<div class="line"><a name="l12566"></a><span class="lineno">12566</span>&#160;            <span class="keywordflow">if</span>(isNonCoherent)</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;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pSrcBlock = m_Blocks[move.srcBlockIndex];</div>
+<div class="line"><a name="l12569"></a><span class="lineno">12569</span>&#160;                memRange.memory = pSrcBlock-&gt;GetDeviceMemory();</div>
+<div class="line"><a name="l12570"></a><span class="lineno">12570</span>&#160;                memRange.offset = VmaAlignDown(move.srcOffset, nonCoherentAtomSize);</div>
+<div class="line"><a name="l12571"></a><span class="lineno">12571</span>&#160;                memRange.size = VMA_MIN(</div>
+<div class="line"><a name="l12572"></a><span class="lineno">12572</span>&#160;                    VmaAlignUp(move.size + (move.srcOffset - memRange.offset), nonCoherentAtomSize),</div>
+<div class="line"><a name="l12573"></a><span class="lineno">12573</span>&#160;                    pSrcBlock-&gt;m_pMetadata-&gt;GetSize() - memRange.offset);</div>
+<div class="line"><a name="l12574"></a><span class="lineno">12574</span>&#160;                (*m_hAllocator-&gt;GetVulkanFunctions().vkInvalidateMappedMemoryRanges)(m_hAllocator-&gt;m_hDevice, 1, &amp;memRange);</div>
+<div class="line"><a name="l12575"></a><span class="lineno">12575</span>&#160;            }</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">if</span>(IsCorruptionDetectionEnabled())</div>
-<div class="line"><a name="l12578"></a><span class="lineno">12578</span>&#160;            {</div>
-<div class="line"><a name="l12579"></a><span class="lineno">12579</span>&#160;                VmaWriteMagicValue(dstBlockInfo.pMappedData, move.dstOffset - VMA_DEBUG_MARGIN);</div>
-<div class="line"><a name="l12580"></a><span class="lineno">12580</span>&#160;                VmaWriteMagicValue(dstBlockInfo.pMappedData, move.dstOffset + move.size);</div>
-<div class="line"><a name="l12581"></a><span class="lineno">12581</span>&#160;            }</div>
+<div class="line"><a name="l12577"></a><span class="lineno">12577</span>&#160;            <span class="comment">// THE PLACE WHERE ACTUAL DATA COPY HAPPENS.</span></div>
+<div class="line"><a name="l12578"></a><span class="lineno">12578</span>&#160;            memmove(</div>
+<div class="line"><a name="l12579"></a><span class="lineno">12579</span>&#160;                reinterpret_cast&lt;char*&gt;(dstBlockInfo.pMappedData) + move.dstOffset,</div>
+<div class="line"><a name="l12580"></a><span class="lineno">12580</span>&#160;                reinterpret_cast&lt;char*&gt;(srcBlockInfo.pMappedData) + move.srcOffset,</div>
+<div class="line"><a name="l12581"></a><span class="lineno">12581</span>&#160;                static_cast&lt;size_t&gt;(move.size));</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="comment">// Flush destination.</span></div>
-<div class="line"><a name="l12584"></a><span class="lineno">12584</span>&#160;            <span class="keywordflow">if</span>(isNonCoherent)</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;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pDstBlock = m_Blocks[move.dstBlockIndex];</div>
-<div class="line"><a name="l12587"></a><span class="lineno">12587</span>&#160;                memRange.memory = pDstBlock-&gt;GetDeviceMemory();</div>
-<div class="line"><a name="l12588"></a><span class="lineno">12588</span>&#160;                memRange.offset = VmaAlignDown(move.dstOffset, nonCoherentAtomSize);</div>
-<div class="line"><a name="l12589"></a><span class="lineno">12589</span>&#160;                memRange.size = VMA_MIN(</div>
-<div class="line"><a name="l12590"></a><span class="lineno">12590</span>&#160;                    VmaAlignUp(move.size + (move.dstOffset - memRange.offset), nonCoherentAtomSize),</div>
-<div class="line"><a name="l12591"></a><span class="lineno">12591</span>&#160;                    pDstBlock-&gt;m_pMetadata-&gt;GetSize() - memRange.offset);</div>
-<div class="line"><a name="l12592"></a><span class="lineno">12592</span>&#160;                (*m_hAllocator-&gt;GetVulkanFunctions().vkFlushMappedMemoryRanges)(m_hAllocator-&gt;m_hDevice, 1, &amp;memRange);</div>
-<div class="line"><a name="l12593"></a><span class="lineno">12593</span>&#160;            }</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;    }</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;    <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="l12598"></a><span class="lineno">12598</span>&#160;    <span class="comment">// Regardless of pCtx-&gt;res == VK_SUCCESS.</span></div>
-<div class="line"><a name="l12599"></a><span class="lineno">12599</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = blockCount; blockIndex--; )</div>
-<div class="line"><a name="l12600"></a><span class="lineno">12600</span>&#160;    {</div>
-<div class="line"><a name="l12601"></a><span class="lineno">12601</span>&#160;        <span class="keyword">const</span> BlockInfo&amp; currBlockInfo = blockInfo[blockIndex];</div>
-<div class="line"><a name="l12602"></a><span class="lineno">12602</span>&#160;        <span class="keywordflow">if</span>((currBlockInfo.flags &amp; BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION) != 0)</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;            VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l12605"></a><span class="lineno">12605</span>&#160;            pBlock-&gt;Unmap(m_hAllocator, 1);</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;    }</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; </div>
-<div class="line"><a name="l12610"></a><span class="lineno">12610</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::ApplyDefragmentationMovesGpu(</div>
-<div class="line"><a name="l12611"></a><span class="lineno">12611</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pDefragCtx,</div>
-<div class="line"><a name="l12612"></a><span class="lineno">12612</span>&#160;    <span class="keyword">const</span> VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
-<div class="line"><a name="l12613"></a><span class="lineno">12613</span>&#160;    VkCommandBuffer commandBuffer)</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="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_Blocks.size();</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;    pDefragCtx-&gt;blockContexts.resize(blockCount);</div>
-<div class="line"><a name="l12618"></a><span class="lineno">12618</span>&#160;    memset(pDefragCtx-&gt;blockContexts.data(), 0, blockCount * <span class="keyword">sizeof</span>(VmaBlockDefragmentationContext));</div>
-<div class="line"><a name="l12619"></a><span class="lineno">12619</span>&#160; </div>
-<div class="line"><a name="l12620"></a><span class="lineno">12620</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="l12621"></a><span class="lineno">12621</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> moveCount = moves.size();</div>
-<div class="line"><a name="l12622"></a><span class="lineno">12622</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="l12623"></a><span class="lineno">12623</span>&#160;    {</div>
-<div class="line"><a name="l12624"></a><span class="lineno">12624</span>&#160;        <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</div>
-<div class="line"><a name="l12625"></a><span class="lineno">12625</span>&#160;        pDefragCtx-&gt;blockContexts[move.srcBlockIndex].flags |= VmaBlockDefragmentationContext::BLOCK_FLAG_USED;</div>
-<div class="line"><a name="l12626"></a><span class="lineno">12626</span>&#160;        pDefragCtx-&gt;blockContexts[move.dstBlockIndex].flags |= VmaBlockDefragmentationContext::BLOCK_FLAG_USED;</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; </div>
-<div class="line"><a name="l12629"></a><span class="lineno">12629</span>&#160;    VMA_ASSERT(pDefragCtx-&gt;res == VK_SUCCESS);</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;    <span class="comment">// Go over all blocks. Create and bind buffer for whole block if necessary.</span></div>
-<div class="line"><a name="l12632"></a><span class="lineno">12632</span>&#160;    {</div>
-<div class="line"><a name="l12633"></a><span class="lineno">12633</span>&#160;        VkBufferCreateInfo bufCreateInfo;</div>
-<div class="line"><a name="l12634"></a><span class="lineno">12634</span>&#160;        VmaFillGpuDefragmentationBufferCreateInfo(bufCreateInfo);</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="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="l12637"></a><span class="lineno">12637</span>&#160;        {</div>
-<div class="line"><a name="l12638"></a><span class="lineno">12638</span>&#160;            VmaBlockDefragmentationContext&amp; currBlockCtx = pDefragCtx-&gt;blockContexts[blockIndex];</div>
-<div class="line"><a name="l12639"></a><span class="lineno">12639</span>&#160;            VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l12640"></a><span class="lineno">12640</span>&#160;            <span class="keywordflow">if</span>((currBlockCtx.flags &amp; VmaBlockDefragmentationContext::BLOCK_FLAG_USED) != 0)</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;                bufCreateInfo.size = pBlock-&gt;m_pMetadata-&gt;GetSize();</div>
-<div class="line"><a name="l12643"></a><span class="lineno">12643</span>&#160;                pDefragCtx-&gt;res = (*m_hAllocator-&gt;GetVulkanFunctions().vkCreateBuffer)(</div>
-<div class="line"><a name="l12644"></a><span class="lineno">12644</span>&#160;                    m_hAllocator-&gt;m_hDevice, &amp;bufCreateInfo, m_hAllocator-&gt;GetAllocationCallbacks(), &amp;currBlockCtx.hBuffer);</div>
-<div class="line"><a name="l12645"></a><span class="lineno">12645</span>&#160;                <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</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;                    pDefragCtx-&gt;res = (*m_hAllocator-&gt;GetVulkanFunctions().vkBindBufferMemory)(</div>
-<div class="line"><a name="l12648"></a><span class="lineno">12648</span>&#160;                        m_hAllocator-&gt;m_hDevice, currBlockCtx.hBuffer, pBlock-&gt;GetDeviceMemory(), 0);</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;            }</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; </div>
-<div class="line"><a name="l12654"></a><span class="lineno">12654</span>&#160;    <span class="comment">// Go over all moves. Post data transfer commands to command buffer.</span></div>
-<div class="line"><a name="l12655"></a><span class="lineno">12655</span>&#160;    <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</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="keywordflow">for</span>(<span class="keywordtype">size_t</span> moveIndex = 0; moveIndex &lt; moveCount; ++moveIndex)</div>
-<div class="line"><a name="l12658"></a><span class="lineno">12658</span>&#160;        {</div>
-<div class="line"><a name="l12659"></a><span class="lineno">12659</span>&#160;            <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</div>
-<div class="line"><a name="l12660"></a><span class="lineno">12660</span>&#160; </div>
-<div class="line"><a name="l12661"></a><span class="lineno">12661</span>&#160;            <span class="keyword">const</span> VmaBlockDefragmentationContext&amp; srcBlockCtx = pDefragCtx-&gt;blockContexts[move.srcBlockIndex];</div>
-<div class="line"><a name="l12662"></a><span class="lineno">12662</span>&#160;            <span class="keyword">const</span> VmaBlockDefragmentationContext&amp; dstBlockCtx = pDefragCtx-&gt;blockContexts[move.dstBlockIndex];</div>
-<div class="line"><a name="l12663"></a><span class="lineno">12663</span>&#160; </div>
-<div class="line"><a name="l12664"></a><span class="lineno">12664</span>&#160;            VMA_ASSERT(srcBlockCtx.hBuffer &amp;&amp; dstBlockCtx.hBuffer);</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;            VkBufferCopy region = {</div>
-<div class="line"><a name="l12667"></a><span class="lineno">12667</span>&#160;                move.srcOffset,</div>
-<div class="line"><a name="l12668"></a><span class="lineno">12668</span>&#160;                move.dstOffset,</div>
-<div class="line"><a name="l12669"></a><span class="lineno">12669</span>&#160;                move.size };</div>
-<div class="line"><a name="l12670"></a><span class="lineno">12670</span>&#160;            (*m_hAllocator-&gt;GetVulkanFunctions().vkCmdCopyBuffer)(</div>
-<div class="line"><a name="l12671"></a><span class="lineno">12671</span>&#160;                commandBuffer, srcBlockCtx.hBuffer, dstBlockCtx.hBuffer, 1, &amp;region);</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;    }</div>
-<div class="line"><a name="l12674"></a><span class="lineno">12674</span>&#160; </div>
-<div class="line"><a name="l12675"></a><span class="lineno">12675</span>&#160;    <span class="comment">// Save buffers to defrag context for later destruction.</span></div>
-<div class="line"><a name="l12676"></a><span class="lineno">12676</span>&#160;    <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS &amp;&amp; moveCount &gt; 0)</div>
-<div class="line"><a name="l12677"></a><span class="lineno">12677</span>&#160;    {</div>
-<div class="line"><a name="l12678"></a><span class="lineno">12678</span>&#160;        pDefragCtx-&gt;res = VK_NOT_READY;</div>
+<div class="line"><a name="l12583"></a><span class="lineno">12583</span>&#160;            <span class="keywordflow">if</span>(IsCorruptionDetectionEnabled())</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;                VmaWriteMagicValue(dstBlockInfo.pMappedData, move.dstOffset - VMA_DEBUG_MARGIN);</div>
+<div class="line"><a name="l12586"></a><span class="lineno">12586</span>&#160;                VmaWriteMagicValue(dstBlockInfo.pMappedData, move.dstOffset + move.size);</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; </div>
+<div class="line"><a name="l12589"></a><span class="lineno">12589</span>&#160;            <span class="comment">// Flush destination.</span></div>
+<div class="line"><a name="l12590"></a><span class="lineno">12590</span>&#160;            <span class="keywordflow">if</span>(isNonCoherent)</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;                VmaDeviceMemoryBlock* <span class="keyword">const</span> pDstBlock = m_Blocks[move.dstBlockIndex];</div>
+<div class="line"><a name="l12593"></a><span class="lineno">12593</span>&#160;                memRange.memory = pDstBlock-&gt;GetDeviceMemory();</div>
+<div class="line"><a name="l12594"></a><span class="lineno">12594</span>&#160;                memRange.offset = VmaAlignDown(move.dstOffset, nonCoherentAtomSize);</div>
+<div class="line"><a name="l12595"></a><span class="lineno">12595</span>&#160;                memRange.size = VMA_MIN(</div>
+<div class="line"><a name="l12596"></a><span class="lineno">12596</span>&#160;                    VmaAlignUp(move.size + (move.dstOffset - memRange.offset), nonCoherentAtomSize),</div>
+<div class="line"><a name="l12597"></a><span class="lineno">12597</span>&#160;                    pDstBlock-&gt;m_pMetadata-&gt;GetSize() - memRange.offset);</div>
+<div class="line"><a name="l12598"></a><span class="lineno">12598</span>&#160;                (*m_hAllocator-&gt;GetVulkanFunctions().vkFlushMappedMemoryRanges)(m_hAllocator-&gt;m_hDevice, 1, &amp;memRange);</div>
+<div class="line"><a name="l12599"></a><span class="lineno">12599</span>&#160;            }</div>
+<div class="line"><a name="l12600"></a><span class="lineno">12600</span>&#160;        }</div>
+<div class="line"><a name="l12601"></a><span class="lineno">12601</span>&#160;    }</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;    <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="l12604"></a><span class="lineno">12604</span>&#160;    <span class="comment">// Regardless of pCtx-&gt;res == VK_SUCCESS.</span></div>
+<div class="line"><a name="l12605"></a><span class="lineno">12605</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = blockCount; blockIndex--; )</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;        <span class="keyword">const</span> BlockInfo&amp; currBlockInfo = blockInfo[blockIndex];</div>
+<div class="line"><a name="l12608"></a><span class="lineno">12608</span>&#160;        <span class="keywordflow">if</span>((currBlockInfo.flags &amp; BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION) != 0)</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;            VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l12611"></a><span class="lineno">12611</span>&#160;            pBlock-&gt;Unmap(m_hAllocator, 1);</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;    }</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; </div>
+<div class="line"><a name="l12616"></a><span class="lineno">12616</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::ApplyDefragmentationMovesGpu(</div>
+<div class="line"><a name="l12617"></a><span class="lineno">12617</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pDefragCtx,</div>
+<div class="line"><a name="l12618"></a><span class="lineno">12618</span>&#160;    <span class="keyword">const</span> VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
+<div class="line"><a name="l12619"></a><span class="lineno">12619</span>&#160;    VkCommandBuffer commandBuffer)</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;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_Blocks.size();</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;    pDefragCtx-&gt;blockContexts.resize(blockCount);</div>
+<div class="line"><a name="l12624"></a><span class="lineno">12624</span>&#160;    memset(pDefragCtx-&gt;blockContexts.data(), 0, blockCount * <span class="keyword">sizeof</span>(VmaBlockDefragmentationContext));</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;    <span class="comment">// Go over all moves. Mark blocks that are used with BLOCK_FLAG_USED.</span></div>
+<div class="line"><a name="l12627"></a><span class="lineno">12627</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> moveCount = moves.size();</div>
+<div class="line"><a name="l12628"></a><span class="lineno">12628</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="l12629"></a><span class="lineno">12629</span>&#160;    {</div>
+<div class="line"><a name="l12630"></a><span class="lineno">12630</span>&#160;        <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</div>
+<div class="line"><a name="l12631"></a><span class="lineno">12631</span>&#160;        pDefragCtx-&gt;blockContexts[move.srcBlockIndex].flags |= VmaBlockDefragmentationContext::BLOCK_FLAG_USED;</div>
+<div class="line"><a name="l12632"></a><span class="lineno">12632</span>&#160;        pDefragCtx-&gt;blockContexts[move.dstBlockIndex].flags |= VmaBlockDefragmentationContext::BLOCK_FLAG_USED;</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;    VMA_ASSERT(pDefragCtx-&gt;res == VK_SUCCESS);</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="comment">// Go over all blocks. Create and bind buffer for whole block if necessary.</span></div>
+<div class="line"><a name="l12638"></a><span class="lineno">12638</span>&#160;    {</div>
+<div class="line"><a name="l12639"></a><span class="lineno">12639</span>&#160;        VkBufferCreateInfo bufCreateInfo;</div>
+<div class="line"><a name="l12640"></a><span class="lineno">12640</span>&#160;        VmaFillGpuDefragmentationBufferCreateInfo(bufCreateInfo);</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">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="l12643"></a><span class="lineno">12643</span>&#160;        {</div>
+<div class="line"><a name="l12644"></a><span class="lineno">12644</span>&#160;            VmaBlockDefragmentationContext&amp; currBlockCtx = pDefragCtx-&gt;blockContexts[blockIndex];</div>
+<div class="line"><a name="l12645"></a><span class="lineno">12645</span>&#160;            VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l12646"></a><span class="lineno">12646</span>&#160;            <span class="keywordflow">if</span>((currBlockCtx.flags &amp; VmaBlockDefragmentationContext::BLOCK_FLAG_USED) != 0)</div>
+<div class="line"><a name="l12647"></a><span class="lineno">12647</span>&#160;            {</div>
+<div class="line"><a name="l12648"></a><span class="lineno">12648</span>&#160;                bufCreateInfo.size = pBlock-&gt;m_pMetadata-&gt;GetSize();</div>
+<div class="line"><a name="l12649"></a><span class="lineno">12649</span>&#160;                pDefragCtx-&gt;res = (*m_hAllocator-&gt;GetVulkanFunctions().vkCreateBuffer)(</div>
+<div class="line"><a name="l12650"></a><span class="lineno">12650</span>&#160;                    m_hAllocator-&gt;m_hDevice, &amp;bufCreateInfo, m_hAllocator-&gt;GetAllocationCallbacks(), &amp;currBlockCtx.hBuffer);</div>
+<div class="line"><a name="l12651"></a><span class="lineno">12651</span>&#160;                <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</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;                    pDefragCtx-&gt;res = (*m_hAllocator-&gt;GetVulkanFunctions().vkBindBufferMemory)(</div>
+<div class="line"><a name="l12654"></a><span class="lineno">12654</span>&#160;                        m_hAllocator-&gt;m_hDevice, currBlockCtx.hBuffer, pBlock-&gt;GetDeviceMemory(), 0);</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;            }</div>
+<div class="line"><a name="l12657"></a><span class="lineno">12657</span>&#160;        }</div>
+<div class="line"><a name="l12658"></a><span class="lineno">12658</span>&#160;    }</div>
+<div class="line"><a name="l12659"></a><span class="lineno">12659</span>&#160; </div>
+<div class="line"><a name="l12660"></a><span class="lineno">12660</span>&#160;    <span class="comment">// Go over all moves. Post data transfer commands to command buffer.</span></div>
+<div class="line"><a name="l12661"></a><span class="lineno">12661</span>&#160;    <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS)</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">for</span>(<span class="keywordtype">size_t</span> moveIndex = 0; moveIndex &lt; moveCount; ++moveIndex)</div>
+<div class="line"><a name="l12664"></a><span class="lineno">12664</span>&#160;        {</div>
+<div class="line"><a name="l12665"></a><span class="lineno">12665</span>&#160;            <span class="keyword">const</span> VmaDefragmentationMove&amp; move = moves[moveIndex];</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="keyword">const</span> VmaBlockDefragmentationContext&amp; srcBlockCtx = pDefragCtx-&gt;blockContexts[move.srcBlockIndex];</div>
+<div class="line"><a name="l12668"></a><span class="lineno">12668</span>&#160;            <span class="keyword">const</span> VmaBlockDefragmentationContext&amp; dstBlockCtx = pDefragCtx-&gt;blockContexts[move.dstBlockIndex];</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;            VMA_ASSERT(srcBlockCtx.hBuffer &amp;&amp; dstBlockCtx.hBuffer);</div>
+<div class="line"><a name="l12671"></a><span class="lineno">12671</span>&#160; </div>
+<div class="line"><a name="l12672"></a><span class="lineno">12672</span>&#160;            VkBufferCopy region = {</div>
+<div class="line"><a name="l12673"></a><span class="lineno">12673</span>&#160;                move.srcOffset,</div>
+<div class="line"><a name="l12674"></a><span class="lineno">12674</span>&#160;                move.dstOffset,</div>
+<div class="line"><a name="l12675"></a><span class="lineno">12675</span>&#160;                move.size };</div>
+<div class="line"><a name="l12676"></a><span class="lineno">12676</span>&#160;            (*m_hAllocator-&gt;GetVulkanFunctions().vkCmdCopyBuffer)(</div>
+<div class="line"><a name="l12677"></a><span class="lineno">12677</span>&#160;                commandBuffer, srcBlockCtx.hBuffer, dstBlockCtx.hBuffer, 1, &amp;region);</div>
+<div class="line"><a name="l12678"></a><span class="lineno">12678</span>&#160;        }</div>
 <div class="line"><a name="l12679"></a><span class="lineno">12679</span>&#160;    }</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;<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="l12683"></a><span class="lineno">12683</span>&#160;{</div>
-<div class="line"><a name="l12684"></a><span class="lineno">12684</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = m_Blocks.size(); blockIndex--; )</div>
-<div class="line"><a name="l12685"></a><span class="lineno">12685</span>&#160;    {</div>
-<div class="line"><a name="l12686"></a><span class="lineno">12686</span>&#160;        VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l12687"></a><span class="lineno">12687</span>&#160;        <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;IsEmpty())</div>
-<div class="line"><a name="l12688"></a><span class="lineno">12688</span>&#160;        {</div>
-<div class="line"><a name="l12689"></a><span class="lineno">12689</span>&#160;            <span class="keywordflow">if</span>(m_Blocks.size() &gt; m_MinBlockCount)</div>
-<div class="line"><a name="l12690"></a><span class="lineno">12690</span>&#160;            {</div>
-<div class="line"><a name="l12691"></a><span class="lineno">12691</span>&#160;                <span class="keywordflow">if</span>(pDefragmentationStats != VMA_NULL)</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;                    ++pDefragmentationStats-&gt;<a class="code" href="struct_vma_defragmentation_stats.html#a0113f1877904a5d1ee8f409216ff276b">deviceMemoryBlocksFreed</a>;</div>
-<div class="line"><a name="l12694"></a><span class="lineno">12694</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="l12695"></a><span class="lineno">12695</span>&#160;                }</div>
-<div class="line"><a name="l12696"></a><span class="lineno">12696</span>&#160; </div>
-<div class="line"><a name="l12697"></a><span class="lineno">12697</span>&#160;                VmaVectorRemove(m_Blocks, blockIndex);</div>
-<div class="line"><a name="l12698"></a><span class="lineno">12698</span>&#160;                pBlock-&gt;Destroy(m_hAllocator);</div>
-<div class="line"><a name="l12699"></a><span class="lineno">12699</span>&#160;                vma_delete(m_hAllocator, pBlock);</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">else</span></div>
-<div class="line"><a name="l12702"></a><span class="lineno">12702</span>&#160;            {</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;            }</div>
-<div class="line"><a name="l12705"></a><span class="lineno">12705</span>&#160;        }</div>
-<div class="line"><a name="l12706"></a><span class="lineno">12706</span>&#160;    }</div>
-<div class="line"><a name="l12707"></a><span class="lineno">12707</span>&#160;    UpdateHasEmptyBlock();</div>
-<div class="line"><a name="l12708"></a><span class="lineno">12708</span>&#160;}</div>
-<div class="line"><a name="l12709"></a><span class="lineno">12709</span>&#160; </div>
-<div class="line"><a name="l12710"></a><span class="lineno">12710</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::UpdateHasEmptyBlock()</div>
-<div class="line"><a name="l12711"></a><span class="lineno">12711</span>&#160;{</div>
-<div class="line"><a name="l12712"></a><span class="lineno">12712</span>&#160;    m_HasEmptyBlock = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l12713"></a><span class="lineno">12713</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="l12714"></a><span class="lineno">12714</span>&#160;    {</div>
-<div class="line"><a name="l12715"></a><span class="lineno">12715</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[index];</div>
-<div class="line"><a name="l12716"></a><span class="lineno">12716</span>&#160;        <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;IsEmpty())</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;            m_HasEmptyBlock = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l12719"></a><span class="lineno">12719</span>&#160;            <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l12720"></a><span class="lineno">12720</span>&#160;        }</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;}</div>
-<div class="line"><a name="l12723"></a><span class="lineno">12723</span>&#160; </div>
-<div class="line"><a name="l12724"></a><span class="lineno">12724</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></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;<span class="keywordtype">void</span> VmaBlockVector::PrintDetailedMap(<span class="keyword">class</span> VmaJsonWriter&amp; json)</div>
-<div class="line"><a name="l12727"></a><span class="lineno">12727</span>&#160;{</div>
-<div class="line"><a name="l12728"></a><span class="lineno">12728</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</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;    <span class="comment">// Save buffers to defrag context for later destruction.</span></div>
+<div class="line"><a name="l12682"></a><span class="lineno">12682</span>&#160;    <span class="keywordflow">if</span>(pDefragCtx-&gt;res == VK_SUCCESS &amp;&amp; moveCount &gt; 0)</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;        pDefragCtx-&gt;res = VK_NOT_READY;</div>
+<div class="line"><a name="l12685"></a><span class="lineno">12685</span>&#160;    }</div>
+<div class="line"><a name="l12686"></a><span class="lineno">12686</span>&#160;}</div>
+<div class="line"><a name="l12687"></a><span class="lineno">12687</span>&#160; </div>
+<div class="line"><a name="l12688"></a><span class="lineno">12688</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="l12689"></a><span class="lineno">12689</span>&#160;{</div>
+<div class="line"><a name="l12690"></a><span class="lineno">12690</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> blockIndex = m_Blocks.size(); blockIndex--; )</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;        VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l12693"></a><span class="lineno">12693</span>&#160;        <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;IsEmpty())</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;            <span class="keywordflow">if</span>(m_Blocks.size() &gt; m_MinBlockCount)</div>
+<div class="line"><a name="l12696"></a><span class="lineno">12696</span>&#160;            {</div>
+<div class="line"><a name="l12697"></a><span class="lineno">12697</span>&#160;                <span class="keywordflow">if</span>(pDefragmentationStats != VMA_NULL)</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;                    ++pDefragmentationStats-&gt;<a class="code" href="struct_vma_defragmentation_stats.html#a0113f1877904a5d1ee8f409216ff276b">deviceMemoryBlocksFreed</a>;</div>
+<div class="line"><a name="l12700"></a><span class="lineno">12700</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="l12701"></a><span class="lineno">12701</span>&#160;                }</div>
+<div class="line"><a name="l12702"></a><span class="lineno">12702</span>&#160; </div>
+<div class="line"><a name="l12703"></a><span class="lineno">12703</span>&#160;                VmaVectorRemove(m_Blocks, blockIndex);</div>
+<div class="line"><a name="l12704"></a><span class="lineno">12704</span>&#160;                pBlock-&gt;Destroy(m_hAllocator);</div>
+<div class="line"><a name="l12705"></a><span class="lineno">12705</span>&#160;                vma_delete(m_hAllocator, pBlock);</div>
+<div class="line"><a name="l12706"></a><span class="lineno">12706</span>&#160;            }</div>
+<div class="line"><a name="l12707"></a><span class="lineno">12707</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l12708"></a><span class="lineno">12708</span>&#160;            {</div>
+<div class="line"><a name="l12709"></a><span class="lineno">12709</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l12710"></a><span class="lineno">12710</span>&#160;            }</div>
+<div class="line"><a name="l12711"></a><span class="lineno">12711</span>&#160;        }</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;    UpdateHasEmptyBlock();</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> VmaBlockVector::UpdateHasEmptyBlock()</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;    m_HasEmptyBlock = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l12719"></a><span class="lineno">12719</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="l12720"></a><span class="lineno">12720</span>&#160;    {</div>
+<div class="line"><a name="l12721"></a><span class="lineno">12721</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[index];</div>
+<div class="line"><a name="l12722"></a><span class="lineno">12722</span>&#160;        <span class="keywordflow">if</span>(pBlock-&gt;m_pMetadata-&gt;IsEmpty())</div>
+<div class="line"><a name="l12723"></a><span class="lineno">12723</span>&#160;        {</div>
+<div class="line"><a name="l12724"></a><span class="lineno">12724</span>&#160;            m_HasEmptyBlock = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l12725"></a><span class="lineno">12725</span>&#160;            <span class="keywordflow">break</span>;</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;    }</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;    json.BeginObject();</div>
+<div class="line"><a name="l12730"></a><span class="lineno">12730</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
 <div class="line"><a name="l12731"></a><span class="lineno">12731</span>&#160; </div>
-<div class="line"><a name="l12732"></a><span class="lineno">12732</span>&#160;    <span class="keywordflow">if</span>(IsCustomPool())</div>
-<div class="line"><a name="l12733"></a><span class="lineno">12733</span>&#160;    {</div>
-<div class="line"><a name="l12734"></a><span class="lineno">12734</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span>* poolName = m_hParentPool-&gt;GetName();</div>
-<div class="line"><a name="l12735"></a><span class="lineno">12735</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="l12736"></a><span class="lineno">12736</span>&#160;        {</div>
-<div class="line"><a name="l12737"></a><span class="lineno">12737</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Name&quot;</span>);</div>
-<div class="line"><a name="l12738"></a><span class="lineno">12738</span>&#160;            json.WriteString(poolName);</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; </div>
-<div class="line"><a name="l12741"></a><span class="lineno">12741</span>&#160;        json.WriteString(<span class="stringliteral">&quot;MemoryTypeIndex&quot;</span>);</div>
-<div class="line"><a name="l12742"></a><span class="lineno">12742</span>&#160;        json.WriteNumber(m_MemoryTypeIndex);</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;        json.WriteString(<span class="stringliteral">&quot;BlockSize&quot;</span>);</div>
-<div class="line"><a name="l12745"></a><span class="lineno">12745</span>&#160;        json.WriteNumber(m_PreferredBlockSize);</div>
+<div class="line"><a name="l12732"></a><span class="lineno">12732</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::PrintDetailedMap(<span class="keyword">class</span> VmaJsonWriter&amp; json)</div>
+<div class="line"><a name="l12733"></a><span class="lineno">12733</span>&#160;{</div>
+<div class="line"><a name="l12734"></a><span class="lineno">12734</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</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;    json.BeginObject();</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;    <span class="keywordflow">if</span>(IsCustomPool())</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="keyword">const</span> <span class="keywordtype">char</span>* poolName = m_hParentPool-&gt;GetName();</div>
+<div class="line"><a name="l12741"></a><span class="lineno">12741</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="l12742"></a><span class="lineno">12742</span>&#160;        {</div>
+<div class="line"><a name="l12743"></a><span class="lineno">12743</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Name&quot;</span>);</div>
+<div class="line"><a name="l12744"></a><span class="lineno">12744</span>&#160;            json.WriteString(poolName);</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;        json.WriteString(<span class="stringliteral">&quot;BlockCount&quot;</span>);</div>
-<div class="line"><a name="l12748"></a><span class="lineno">12748</span>&#160;        json.BeginObject(<span class="keyword">true</span>);</div>
-<div class="line"><a name="l12749"></a><span class="lineno">12749</span>&#160;        <span class="keywordflow">if</span>(m_MinBlockCount &gt; 0)</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;            json.WriteString(<span class="stringliteral">&quot;Min&quot;</span>);</div>
-<div class="line"><a name="l12752"></a><span class="lineno">12752</span>&#160;            json.WriteNumber((uint64_t)m_MinBlockCount);</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;        <span class="keywordflow">if</span>(m_MaxBlockCount &lt; SIZE_MAX)</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;            json.WriteString(<span class="stringliteral">&quot;Max&quot;</span>);</div>
-<div class="line"><a name="l12757"></a><span class="lineno">12757</span>&#160;            json.WriteNumber((uint64_t)m_MaxBlockCount);</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;        json.WriteString(<span class="stringliteral">&quot;Cur&quot;</span>);</div>
-<div class="line"><a name="l12760"></a><span class="lineno">12760</span>&#160;        json.WriteNumber((uint64_t)m_Blocks.size());</div>
-<div class="line"><a name="l12761"></a><span class="lineno">12761</span>&#160;        json.EndObject();</div>
-<div class="line"><a name="l12762"></a><span class="lineno">12762</span>&#160; </div>
-<div class="line"><a name="l12763"></a><span class="lineno">12763</span>&#160;        <span class="keywordflow">if</span>(m_FrameInUseCount &gt; 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;            json.WriteString(<span class="stringliteral">&quot;FrameInUseCount&quot;</span>);</div>
-<div class="line"><a name="l12766"></a><span class="lineno">12766</span>&#160;            json.WriteNumber(m_FrameInUseCount);</div>
-<div class="line"><a name="l12767"></a><span class="lineno">12767</span>&#160;        }</div>
+<div class="line"><a name="l12747"></a><span class="lineno">12747</span>&#160;        json.WriteString(<span class="stringliteral">&quot;MemoryTypeIndex&quot;</span>);</div>
+<div class="line"><a name="l12748"></a><span class="lineno">12748</span>&#160;        json.WriteNumber(m_MemoryTypeIndex);</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;        json.WriteString(<span class="stringliteral">&quot;BlockSize&quot;</span>);</div>
+<div class="line"><a name="l12751"></a><span class="lineno">12751</span>&#160;        json.WriteNumber(m_PreferredBlockSize);</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;        json.WriteString(<span class="stringliteral">&quot;BlockCount&quot;</span>);</div>
+<div class="line"><a name="l12754"></a><span class="lineno">12754</span>&#160;        json.BeginObject(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l12755"></a><span class="lineno">12755</span>&#160;        <span class="keywordflow">if</span>(m_MinBlockCount &gt; 0)</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;            json.WriteString(<span class="stringliteral">&quot;Min&quot;</span>);</div>
+<div class="line"><a name="l12758"></a><span class="lineno">12758</span>&#160;            json.WriteNumber((uint64_t)m_MinBlockCount);</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;        <span class="keywordflow">if</span>(m_MaxBlockCount &lt; SIZE_MAX)</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;            json.WriteString(<span class="stringliteral">&quot;Max&quot;</span>);</div>
+<div class="line"><a name="l12763"></a><span class="lineno">12763</span>&#160;            json.WriteNumber((uint64_t)m_MaxBlockCount);</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;        json.WriteString(<span class="stringliteral">&quot;Cur&quot;</span>);</div>
+<div class="line"><a name="l12766"></a><span class="lineno">12766</span>&#160;        json.WriteNumber((uint64_t)m_Blocks.size());</div>
+<div class="line"><a name="l12767"></a><span class="lineno">12767</span>&#160;        json.EndObject();</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;        <span class="keywordflow">if</span>(m_Algorithm != 0)</div>
+<div class="line"><a name="l12769"></a><span class="lineno">12769</span>&#160;        <span class="keywordflow">if</span>(m_FrameInUseCount &gt; 0)</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;            json.WriteString(<span class="stringliteral">&quot;Algorithm&quot;</span>);</div>
-<div class="line"><a name="l12772"></a><span class="lineno">12772</span>&#160;            json.WriteString(VmaAlgorithmToStr(m_Algorithm));</div>
+<div class="line"><a name="l12771"></a><span class="lineno">12771</span>&#160;            json.WriteString(<span class="stringliteral">&quot;FrameInUseCount&quot;</span>);</div>
+<div class="line"><a name="l12772"></a><span class="lineno">12772</span>&#160;            json.WriteNumber(m_FrameInUseCount);</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;    }</div>
-<div class="line"><a name="l12775"></a><span class="lineno">12775</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l12776"></a><span class="lineno">12776</span>&#160;    {</div>
-<div class="line"><a name="l12777"></a><span class="lineno">12777</span>&#160;        json.WriteString(<span class="stringliteral">&quot;PreferredBlockSize&quot;</span>);</div>
-<div class="line"><a name="l12778"></a><span class="lineno">12778</span>&#160;        json.WriteNumber(m_PreferredBlockSize);</div>
-<div class="line"><a name="l12779"></a><span class="lineno">12779</span>&#160;    }</div>
-<div class="line"><a name="l12780"></a><span class="lineno">12780</span>&#160; </div>
-<div class="line"><a name="l12781"></a><span class="lineno">12781</span>&#160;    json.WriteString(<span class="stringliteral">&quot;Blocks&quot;</span>);</div>
-<div class="line"><a name="l12782"></a><span class="lineno">12782</span>&#160;    json.BeginObject();</div>
-<div class="line"><a name="l12783"></a><span class="lineno">12783</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="l12784"></a><span class="lineno">12784</span>&#160;    {</div>
-<div class="line"><a name="l12785"></a><span class="lineno">12785</span>&#160;        json.BeginString();</div>
-<div class="line"><a name="l12786"></a><span class="lineno">12786</span>&#160;        json.ContinueString(m_Blocks[i]-&gt;GetId());</div>
-<div class="line"><a name="l12787"></a><span class="lineno">12787</span>&#160;        json.EndString();</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;        m_Blocks[i]-&gt;m_pMetadata-&gt;PrintDetailedMap(json);</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;    json.EndObject();</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;    json.EndObject();</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; </div>
-<div class="line"><a name="l12796"></a><span class="lineno">12796</span>&#160;<span class="preprocessor">#endif // #if VMA_STATS_STRING_ENABLED</span></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="keywordtype">void</span> VmaBlockVector::Defragment(</div>
-<div class="line"><a name="l12799"></a><span class="lineno">12799</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pCtx,</div>
-<div class="line"><a name="l12800"></a><span class="lineno">12800</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats,</div>
-<div class="line"><a name="l12801"></a><span class="lineno">12801</span>&#160;    VkDeviceSize&amp; maxCpuBytesToMove, uint32_t&amp; maxCpuAllocationsToMove,</div>
-<div class="line"><a name="l12802"></a><span class="lineno">12802</span>&#160;    VkDeviceSize&amp; maxGpuBytesToMove, uint32_t&amp; maxGpuAllocationsToMove,</div>
-<div class="line"><a name="l12803"></a><span class="lineno">12803</span>&#160;    VkCommandBuffer commandBuffer)</div>
-<div class="line"><a name="l12804"></a><span class="lineno">12804</span>&#160;{</div>
-<div class="line"><a name="l12805"></a><span class="lineno">12805</span>&#160;    pCtx-&gt;res = VK_SUCCESS;</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;    <span class="keyword">const</span> VkMemoryPropertyFlags memPropFlags =</div>
-<div class="line"><a name="l12808"></a><span class="lineno">12808</span>&#160;        m_hAllocator-&gt;m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags;</div>
-<div class="line"><a name="l12809"></a><span class="lineno">12809</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="l12810"></a><span class="lineno">12810</span>&#160; </div>
-<div class="line"><a name="l12811"></a><span class="lineno">12811</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="l12812"></a><span class="lineno">12812</span>&#160;        isHostVisible;</div>
-<div class="line"><a name="l12813"></a><span class="lineno">12813</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="l12814"></a><span class="lineno">12814</span>&#160;        !IsCorruptionDetectionEnabled() &amp;&amp;</div>
-<div class="line"><a name="l12815"></a><span class="lineno">12815</span>&#160;        ((1u &lt;&lt; m_MemoryTypeIndex) &amp; m_hAllocator-&gt;GetGpuDefragmentationMemoryTypeBits()) != 0;</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;        <span class="keywordflow">if</span>(m_Algorithm != 0)</div>
+<div class="line"><a name="l12776"></a><span class="lineno">12776</span>&#160;        {</div>
+<div class="line"><a name="l12777"></a><span class="lineno">12777</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Algorithm&quot;</span>);</div>
+<div class="line"><a name="l12778"></a><span class="lineno">12778</span>&#160;            json.WriteString(VmaAlgorithmToStr(m_Algorithm));</div>
+<div class="line"><a name="l12779"></a><span class="lineno">12779</span>&#160;        }</div>
+<div class="line"><a name="l12780"></a><span class="lineno">12780</span>&#160;    }</div>
+<div class="line"><a name="l12781"></a><span class="lineno">12781</span>&#160;    <span class="keywordflow">else</span></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;        json.WriteString(<span class="stringliteral">&quot;PreferredBlockSize&quot;</span>);</div>
+<div class="line"><a name="l12784"></a><span class="lineno">12784</span>&#160;        json.WriteNumber(m_PreferredBlockSize);</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; </div>
+<div class="line"><a name="l12787"></a><span class="lineno">12787</span>&#160;    json.WriteString(<span class="stringliteral">&quot;Blocks&quot;</span>);</div>
+<div class="line"><a name="l12788"></a><span class="lineno">12788</span>&#160;    json.BeginObject();</div>
+<div class="line"><a name="l12789"></a><span class="lineno">12789</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="l12790"></a><span class="lineno">12790</span>&#160;    {</div>
+<div class="line"><a name="l12791"></a><span class="lineno">12791</span>&#160;        json.BeginString();</div>
+<div class="line"><a name="l12792"></a><span class="lineno">12792</span>&#160;        json.ContinueString(m_Blocks[i]-&gt;GetId());</div>
+<div class="line"><a name="l12793"></a><span class="lineno">12793</span>&#160;        json.EndString();</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;        m_Blocks[i]-&gt;m_pMetadata-&gt;PrintDetailedMap(json);</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;    json.EndObject();</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;    json.EndObject();</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; </div>
+<div class="line"><a name="l12802"></a><span class="lineno">12802</span>&#160;<span class="preprocessor">#endif // #if VMA_STATS_STRING_ENABLED</span></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;<span class="keywordtype">void</span> VmaBlockVector::Defragment(</div>
+<div class="line"><a name="l12805"></a><span class="lineno">12805</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pCtx,</div>
+<div class="line"><a name="l12806"></a><span class="lineno">12806</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats,</div>
+<div class="line"><a name="l12807"></a><span class="lineno">12807</span>&#160;    VkDeviceSize&amp; maxCpuBytesToMove, uint32_t&amp; maxCpuAllocationsToMove,</div>
+<div class="line"><a name="l12808"></a><span class="lineno">12808</span>&#160;    VkDeviceSize&amp; maxGpuBytesToMove, uint32_t&amp; maxGpuAllocationsToMove,</div>
+<div class="line"><a name="l12809"></a><span class="lineno">12809</span>&#160;    VkCommandBuffer commandBuffer)</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;    pCtx-&gt;res = VK_SUCCESS;</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;    <span class="keyword">const</span> VkMemoryPropertyFlags memPropFlags =</div>
+<div class="line"><a name="l12814"></a><span class="lineno">12814</span>&#160;        m_hAllocator-&gt;m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags;</div>
+<div class="line"><a name="l12815"></a><span class="lineno">12815</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="l12816"></a><span class="lineno">12816</span>&#160; </div>
-<div class="line"><a name="l12817"></a><span class="lineno">12817</span>&#160;    <span class="comment">// There are options to defragment this memory type.</span></div>
-<div class="line"><a name="l12818"></a><span class="lineno">12818</span>&#160;    <span class="keywordflow">if</span>(canDefragmentOnCpu || canDefragmentOnGpu)</div>
-<div class="line"><a name="l12819"></a><span class="lineno">12819</span>&#160;    {</div>
-<div class="line"><a name="l12820"></a><span class="lineno">12820</span>&#160;        <span class="keywordtype">bool</span> defragmentOnGpu;</div>
-<div class="line"><a name="l12821"></a><span class="lineno">12821</span>&#160;        <span class="comment">// There is only one option to defragment this memory type.</span></div>
-<div class="line"><a name="l12822"></a><span class="lineno">12822</span>&#160;        <span class="keywordflow">if</span>(canDefragmentOnGpu != canDefragmentOnCpu)</div>
-<div class="line"><a name="l12823"></a><span class="lineno">12823</span>&#160;        {</div>
-<div class="line"><a name="l12824"></a><span class="lineno">12824</span>&#160;            defragmentOnGpu = canDefragmentOnGpu;</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="comment">// Both options are available: Heuristics to choose the best one.</span></div>
-<div class="line"><a name="l12827"></a><span class="lineno">12827</span>&#160;        <span class="keywordflow">else</span></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;            defragmentOnGpu = (memPropFlags &amp; VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) != 0 ||</div>
-<div class="line"><a name="l12830"></a><span class="lineno">12830</span>&#160;                m_hAllocator-&gt;IsIntegratedGpu();</div>
+<div class="line"><a name="l12817"></a><span class="lineno">12817</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="l12818"></a><span class="lineno">12818</span>&#160;        isHostVisible;</div>
+<div class="line"><a name="l12819"></a><span class="lineno">12819</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="l12820"></a><span class="lineno">12820</span>&#160;        !IsCorruptionDetectionEnabled() &amp;&amp;</div>
+<div class="line"><a name="l12821"></a><span class="lineno">12821</span>&#160;        ((1u &lt;&lt; m_MemoryTypeIndex) &amp; m_hAllocator-&gt;GetGpuDefragmentationMemoryTypeBits()) != 0;</div>
+<div class="line"><a name="l12822"></a><span class="lineno">12822</span>&#160; </div>
+<div class="line"><a name="l12823"></a><span class="lineno">12823</span>&#160;    <span class="comment">// There are options to defragment this memory type.</span></div>
+<div class="line"><a name="l12824"></a><span class="lineno">12824</span>&#160;    <span class="keywordflow">if</span>(canDefragmentOnCpu || canDefragmentOnGpu)</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="keywordtype">bool</span> defragmentOnGpu;</div>
+<div class="line"><a name="l12827"></a><span class="lineno">12827</span>&#160;        <span class="comment">// There is only one option to defragment this memory type.</span></div>
+<div class="line"><a name="l12828"></a><span class="lineno">12828</span>&#160;        <span class="keywordflow">if</span>(canDefragmentOnGpu != canDefragmentOnCpu)</div>
+<div class="line"><a name="l12829"></a><span class="lineno">12829</span>&#160;        {</div>
+<div class="line"><a name="l12830"></a><span class="lineno">12830</span>&#160;            defragmentOnGpu = canDefragmentOnGpu;</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; </div>
-<div class="line"><a name="l12833"></a><span class="lineno">12833</span>&#160;        <span class="keywordtype">bool</span> overlappingMoveSupported = !defragmentOnGpu;</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;        <span class="keywordflow">if</span>(m_hAllocator-&gt;m_UseMutex)</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;            m_Mutex.LockWrite();</div>
-<div class="line"><a name="l12838"></a><span class="lineno">12838</span>&#160;            pCtx-&gt;mutexLocked = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l12839"></a><span class="lineno">12839</span>&#160;        }</div>
+<div class="line"><a name="l12832"></a><span class="lineno">12832</span>&#160;        <span class="comment">// Both options are available: Heuristics to choose the best one.</span></div>
+<div class="line"><a name="l12833"></a><span class="lineno">12833</span>&#160;        <span class="keywordflow">else</span></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;            defragmentOnGpu = (memPropFlags &amp; VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) != 0 ||</div>
+<div class="line"><a name="l12836"></a><span class="lineno">12836</span>&#160;                m_hAllocator-&gt;IsIntegratedGpu();</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; </div>
+<div class="line"><a name="l12839"></a><span class="lineno">12839</span>&#160;        <span class="keywordtype">bool</span> overlappingMoveSupported = !defragmentOnGpu;</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;        pCtx-&gt;Begin(overlappingMoveSupported);</div>
-<div class="line"><a name="l12842"></a><span class="lineno">12842</span>&#160; </div>
-<div class="line"><a name="l12843"></a><span class="lineno">12843</span>&#160;        <span class="comment">// Defragment.</span></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="keyword">const</span> VkDeviceSize maxBytesToMove = defragmentOnGpu ? maxGpuBytesToMove : maxCpuBytesToMove;</div>
-<div class="line"><a name="l12846"></a><span class="lineno">12846</span>&#160;        <span class="keyword">const</span> uint32_t maxAllocationsToMove = defragmentOnGpu ? maxGpuAllocationsToMove : maxCpuAllocationsToMove;</div>
-<div class="line"><a name="l12847"></a><span class="lineno">12847</span>&#160;        VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt; moves = </div>
-<div class="line"><a name="l12848"></a><span class="lineno">12848</span>&#160;            VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;(VmaStlAllocator&lt;VmaDefragmentationMove&gt;(m_hAllocator-&gt;GetAllocationCallbacks()));</div>
-<div class="line"><a name="l12849"></a><span class="lineno">12849</span>&#160;        pCtx-&gt;res = pCtx-&gt;GetAlgorithm()-&gt;Defragment(moves, maxBytesToMove, maxAllocationsToMove);</div>
+<div class="line"><a name="l12841"></a><span class="lineno">12841</span>&#160;        <span class="keywordflow">if</span>(m_hAllocator-&gt;m_UseMutex)</div>
+<div class="line"><a name="l12842"></a><span class="lineno">12842</span>&#160;        {</div>
+<div class="line"><a name="l12843"></a><span class="lineno">12843</span>&#160;            m_Mutex.LockWrite();</div>
+<div class="line"><a name="l12844"></a><span class="lineno">12844</span>&#160;            pCtx-&gt;mutexLocked = <span class="keyword">true</span>;</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; </div>
+<div class="line"><a name="l12847"></a><span class="lineno">12847</span>&#160;        pCtx-&gt;Begin(overlappingMoveSupported);</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="comment">// Defragment.</span></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;        <span class="comment">// Accumulate statistics.</span></div>
-<div class="line"><a name="l12852"></a><span class="lineno">12852</span>&#160;        <span class="keywordflow">if</span>(pStats != VMA_NULL)</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;            <span class="keyword">const</span> VkDeviceSize bytesMoved = pCtx-&gt;GetAlgorithm()-&gt;GetBytesMoved();</div>
-<div class="line"><a name="l12855"></a><span class="lineno">12855</span>&#160;            <span class="keyword">const</span> uint32_t allocationsMoved = pCtx-&gt;GetAlgorithm()-&gt;GetAllocationsMoved();</div>
-<div class="line"><a name="l12856"></a><span class="lineno">12856</span>&#160;            pStats-&gt;<a class="code" href="struct_vma_defragmentation_stats.html#a36f9d5df2a10ba2a36b16e126d60572d">bytesMoved</a> += bytesMoved;</div>
-<div class="line"><a name="l12857"></a><span class="lineno">12857</span>&#160;            pStats-&gt;<a class="code" href="struct_vma_defragmentation_stats.html#aefeabf130022008eadd75999478af3f9">allocationsMoved</a> += allocationsMoved;</div>
-<div class="line"><a name="l12858"></a><span class="lineno">12858</span>&#160;            VMA_ASSERT(bytesMoved &lt;= maxBytesToMove);</div>
-<div class="line"><a name="l12859"></a><span class="lineno">12859</span>&#160;            VMA_ASSERT(allocationsMoved &lt;= maxAllocationsToMove);</div>
-<div class="line"><a name="l12860"></a><span class="lineno">12860</span>&#160;            <span class="keywordflow">if</span>(defragmentOnGpu)</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;                maxGpuBytesToMove -= bytesMoved;</div>
-<div class="line"><a name="l12863"></a><span class="lineno">12863</span>&#160;                maxGpuAllocationsToMove -= allocationsMoved;</div>
-<div class="line"><a name="l12864"></a><span class="lineno">12864</span>&#160;            }</div>
-<div class="line"><a name="l12865"></a><span class="lineno">12865</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l12866"></a><span class="lineno">12866</span>&#160;            {</div>
-<div class="line"><a name="l12867"></a><span class="lineno">12867</span>&#160;                maxCpuBytesToMove -= bytesMoved;</div>
-<div class="line"><a name="l12868"></a><span class="lineno">12868</span>&#160;                maxCpuAllocationsToMove -= allocationsMoved;</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;        }</div>
-<div class="line"><a name="l12871"></a><span class="lineno">12871</span>&#160;    </div>
-<div class="line"><a name="l12872"></a><span class="lineno">12872</span>&#160;        <span class="keywordflow">if</span>(pCtx-&gt;res &gt;= VK_SUCCESS)</div>
-<div class="line"><a name="l12873"></a><span class="lineno">12873</span>&#160;        {</div>
-<div class="line"><a name="l12874"></a><span class="lineno">12874</span>&#160;            <span class="keywordflow">if</span>(defragmentOnGpu)</div>
-<div class="line"><a name="l12875"></a><span class="lineno">12875</span>&#160;            {</div>
-<div class="line"><a name="l12876"></a><span class="lineno">12876</span>&#160;                ApplyDefragmentationMovesGpu(pCtx, moves, commandBuffer);</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;            <span class="keywordflow">else</span></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;                ApplyDefragmentationMovesCpu(pCtx, moves);</div>
-<div class="line"><a name="l12881"></a><span class="lineno">12881</span>&#160;            }</div>
-<div class="line"><a name="l12882"></a><span class="lineno">12882</span>&#160;        }</div>
-<div class="line"><a name="l12883"></a><span class="lineno">12883</span>&#160;    }</div>
-<div class="line"><a name="l12884"></a><span class="lineno">12884</span>&#160;}</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;<span class="keywordtype">void</span> VmaBlockVector::DefragmentationEnd(</div>
-<div class="line"><a name="l12887"></a><span class="lineno">12887</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pCtx,</div>
-<div class="line"><a name="l12888"></a><span class="lineno">12888</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats)</div>
-<div class="line"><a name="l12889"></a><span class="lineno">12889</span>&#160;{</div>
-<div class="line"><a name="l12890"></a><span class="lineno">12890</span>&#160;    <span class="comment">// Destroy buffers.</span></div>
-<div class="line"><a name="l12891"></a><span class="lineno">12891</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="l12892"></a><span class="lineno">12892</span>&#160;    {</div>
-<div class="line"><a name="l12893"></a><span class="lineno">12893</span>&#160;        VmaBlockDefragmentationContext&amp; blockCtx = pCtx-&gt;blockContexts[blockIndex];</div>
-<div class="line"><a name="l12894"></a><span class="lineno">12894</span>&#160;        <span class="keywordflow">if</span>(blockCtx.hBuffer)</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;            (*m_hAllocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(</div>
-<div class="line"><a name="l12897"></a><span class="lineno">12897</span>&#160;                m_hAllocator-&gt;m_hDevice, blockCtx.hBuffer, m_hAllocator-&gt;GetAllocationCallbacks());</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;    }</div>
-<div class="line"><a name="l12900"></a><span class="lineno">12900</span>&#160; </div>
-<div class="line"><a name="l12901"></a><span class="lineno">12901</span>&#160;    <span class="keywordflow">if</span>(pCtx-&gt;res &gt;= VK_SUCCESS)</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;        FreeEmptyBlocks(pStats);</div>
-<div class="line"><a name="l12904"></a><span class="lineno">12904</span>&#160;    }</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;    <span class="keywordflow">if</span>(pCtx-&gt;mutexLocked)</div>
-<div class="line"><a name="l12907"></a><span class="lineno">12907</span>&#160;    {</div>
-<div class="line"><a name="l12908"></a><span class="lineno">12908</span>&#160;        VMA_ASSERT(m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l12909"></a><span class="lineno">12909</span>&#160;        m_Mutex.UnlockWrite();</div>
+<div class="line"><a name="l12851"></a><span class="lineno">12851</span>&#160;        <span class="keyword">const</span> VkDeviceSize maxBytesToMove = defragmentOnGpu ? maxGpuBytesToMove : maxCpuBytesToMove;</div>
+<div class="line"><a name="l12852"></a><span class="lineno">12852</span>&#160;        <span class="keyword">const</span> uint32_t maxAllocationsToMove = defragmentOnGpu ? maxGpuAllocationsToMove : maxCpuAllocationsToMove;</div>
+<div class="line"><a name="l12853"></a><span class="lineno">12853</span>&#160;        VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt; moves = </div>
+<div class="line"><a name="l12854"></a><span class="lineno">12854</span>&#160;            VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;(VmaStlAllocator&lt;VmaDefragmentationMove&gt;(m_hAllocator-&gt;GetAllocationCallbacks()));</div>
+<div class="line"><a name="l12855"></a><span class="lineno">12855</span>&#160;        pCtx-&gt;res = pCtx-&gt;GetAlgorithm()-&gt;Defragment(moves, maxBytesToMove, maxAllocationsToMove);</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;        <span class="comment">// Accumulate statistics.</span></div>
+<div class="line"><a name="l12858"></a><span class="lineno">12858</span>&#160;        <span class="keywordflow">if</span>(pStats != VMA_NULL)</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="keyword">const</span> VkDeviceSize bytesMoved = pCtx-&gt;GetAlgorithm()-&gt;GetBytesMoved();</div>
+<div class="line"><a name="l12861"></a><span class="lineno">12861</span>&#160;            <span class="keyword">const</span> uint32_t allocationsMoved = pCtx-&gt;GetAlgorithm()-&gt;GetAllocationsMoved();</div>
+<div class="line"><a name="l12862"></a><span class="lineno">12862</span>&#160;            pStats-&gt;<a class="code" href="struct_vma_defragmentation_stats.html#a36f9d5df2a10ba2a36b16e126d60572d">bytesMoved</a> += bytesMoved;</div>
+<div class="line"><a name="l12863"></a><span class="lineno">12863</span>&#160;            pStats-&gt;<a class="code" href="struct_vma_defragmentation_stats.html#aefeabf130022008eadd75999478af3f9">allocationsMoved</a> += allocationsMoved;</div>
+<div class="line"><a name="l12864"></a><span class="lineno">12864</span>&#160;            VMA_ASSERT(bytesMoved &lt;= maxBytesToMove);</div>
+<div class="line"><a name="l12865"></a><span class="lineno">12865</span>&#160;            VMA_ASSERT(allocationsMoved &lt;= maxAllocationsToMove);</div>
+<div class="line"><a name="l12866"></a><span class="lineno">12866</span>&#160;            <span class="keywordflow">if</span>(defragmentOnGpu)</div>
+<div class="line"><a name="l12867"></a><span class="lineno">12867</span>&#160;            {</div>
+<div class="line"><a name="l12868"></a><span class="lineno">12868</span>&#160;                maxGpuBytesToMove -= bytesMoved;</div>
+<div class="line"><a name="l12869"></a><span class="lineno">12869</span>&#160;                maxGpuAllocationsToMove -= allocationsMoved;</div>
+<div class="line"><a name="l12870"></a><span class="lineno">12870</span>&#160;            }</div>
+<div class="line"><a name="l12871"></a><span class="lineno">12871</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l12872"></a><span class="lineno">12872</span>&#160;            {</div>
+<div class="line"><a name="l12873"></a><span class="lineno">12873</span>&#160;                maxCpuBytesToMove -= bytesMoved;</div>
+<div class="line"><a name="l12874"></a><span class="lineno">12874</span>&#160;                maxCpuAllocationsToMove -= allocationsMoved;</div>
+<div class="line"><a name="l12875"></a><span class="lineno">12875</span>&#160;            }</div>
+<div class="line"><a name="l12876"></a><span class="lineno">12876</span>&#160;        }</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;        <span class="keywordflow">if</span>(pCtx-&gt;res &gt;= VK_SUCCESS)</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;            <span class="keywordflow">if</span>(defragmentOnGpu)</div>
+<div class="line"><a name="l12881"></a><span class="lineno">12881</span>&#160;            {</div>
+<div class="line"><a name="l12882"></a><span class="lineno">12882</span>&#160;                ApplyDefragmentationMovesGpu(pCtx, moves, commandBuffer);</div>
+<div class="line"><a name="l12883"></a><span class="lineno">12883</span>&#160;            }</div>
+<div class="line"><a name="l12884"></a><span class="lineno">12884</span>&#160;            <span class="keywordflow">else</span></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;                ApplyDefragmentationMovesCpu(pCtx, moves);</div>
+<div class="line"><a name="l12887"></a><span class="lineno">12887</span>&#160;            }</div>
+<div class="line"><a name="l12888"></a><span class="lineno">12888</span>&#160;        }</div>
+<div class="line"><a name="l12889"></a><span class="lineno">12889</span>&#160;    }</div>
+<div class="line"><a name="l12890"></a><span class="lineno">12890</span>&#160;}</div>
+<div class="line"><a name="l12891"></a><span class="lineno">12891</span>&#160; </div>
+<div class="line"><a name="l12892"></a><span class="lineno">12892</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::DefragmentationEnd(</div>
+<div class="line"><a name="l12893"></a><span class="lineno">12893</span>&#160;    <span class="keyword">class</span> VmaBlockVectorDefragmentationContext* pCtx,</div>
+<div class="line"><a name="l12894"></a><span class="lineno">12894</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats)</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="comment">// Destroy buffers.</span></div>
+<div class="line"><a name="l12897"></a><span class="lineno">12897</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="l12898"></a><span class="lineno">12898</span>&#160;    {</div>
+<div class="line"><a name="l12899"></a><span class="lineno">12899</span>&#160;        VmaBlockDefragmentationContext&amp; blockCtx = pCtx-&gt;blockContexts[blockIndex];</div>
+<div class="line"><a name="l12900"></a><span class="lineno">12900</span>&#160;        <span class="keywordflow">if</span>(blockCtx.hBuffer)</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;            (*m_hAllocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(</div>
+<div class="line"><a name="l12903"></a><span class="lineno">12903</span>&#160;                m_hAllocator-&gt;m_hDevice, blockCtx.hBuffer, m_hAllocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l12904"></a><span class="lineno">12904</span>&#160;        }</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; </div>
+<div class="line"><a name="l12907"></a><span class="lineno">12907</span>&#160;    <span class="keywordflow">if</span>(pCtx-&gt;res &gt;= VK_SUCCESS)</div>
+<div class="line"><a name="l12908"></a><span class="lineno">12908</span>&#160;    {</div>
+<div class="line"><a name="l12909"></a><span class="lineno">12909</span>&#160;        FreeEmptyBlocks(pStats);</div>
 <div class="line"><a name="l12910"></a><span class="lineno">12910</span>&#160;    }</div>
-<div class="line"><a name="l12911"></a><span class="lineno">12911</span>&#160;}</div>
-<div class="line"><a name="l12912"></a><span class="lineno">12912</span>&#160; </div>
-<div class="line"><a name="l12913"></a><span class="lineno">12913</span>&#160;<span class="keywordtype">size_t</span> VmaBlockVector::CalcAllocationCount()<span class="keyword"> const</span></div>
-<div class="line"><a name="l12914"></a><span class="lineno">12914</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l12915"></a><span class="lineno">12915</span>&#160;    <span class="keywordtype">size_t</span> result = 0;</div>
-<div class="line"><a name="l12916"></a><span class="lineno">12916</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="l12917"></a><span class="lineno">12917</span>&#160;    {</div>
-<div class="line"><a name="l12918"></a><span class="lineno">12918</span>&#160;        result += m_Blocks[i]-&gt;m_pMetadata-&gt;GetAllocationCount();</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;    <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l12921"></a><span class="lineno">12921</span>&#160;}</div>
-<div class="line"><a name="l12922"></a><span class="lineno">12922</span>&#160; </div>
-<div class="line"><a name="l12923"></a><span class="lineno">12923</span>&#160;<span class="keywordtype">bool</span> VmaBlockVector::IsBufferImageGranularityConflictPossible()<span class="keyword"> const</span></div>
-<div class="line"><a name="l12924"></a><span class="lineno">12924</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l12925"></a><span class="lineno">12925</span>&#160;    <span class="keywordflow">if</span>(m_BufferImageGranularity == 1)</div>
-<div class="line"><a name="l12926"></a><span class="lineno">12926</span>&#160;    {</div>
-<div class="line"><a name="l12927"></a><span class="lineno">12927</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l12928"></a><span class="lineno">12928</span>&#160;    }</div>
-<div class="line"><a name="l12929"></a><span class="lineno">12929</span>&#160;    VmaSuballocationType lastSuballocType = VMA_SUBALLOCATION_TYPE_FREE;</div>
-<div class="line"><a name="l12930"></a><span class="lineno">12930</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="l12931"></a><span class="lineno">12931</span>&#160;    {</div>
-<div class="line"><a name="l12932"></a><span class="lineno">12932</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[i];</div>
-<div class="line"><a name="l12933"></a><span class="lineno">12933</span>&#160;        VMA_ASSERT(m_Algorithm == 0);</div>
-<div class="line"><a name="l12934"></a><span class="lineno">12934</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pMetadata = (VmaBlockMetadata_Generic*)pBlock-&gt;m_pMetadata;</div>
-<div class="line"><a name="l12935"></a><span class="lineno">12935</span>&#160;        <span class="keywordflow">if</span>(pMetadata-&gt;IsBufferImageGranularityConflictPossible(m_BufferImageGranularity, lastSuballocType))</div>
-<div class="line"><a name="l12936"></a><span class="lineno">12936</span>&#160;        {</div>
-<div class="line"><a name="l12937"></a><span class="lineno">12937</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l12938"></a><span class="lineno">12938</span>&#160;        }</div>
-<div class="line"><a name="l12939"></a><span class="lineno">12939</span>&#160;    }</div>
-<div class="line"><a name="l12940"></a><span class="lineno">12940</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l12941"></a><span class="lineno">12941</span>&#160;}</div>
-<div class="line"><a name="l12942"></a><span class="lineno">12942</span>&#160; </div>
-<div class="line"><a name="l12943"></a><span class="lineno">12943</span>&#160;<span class="keywordtype">void</span> VmaBlockVector::MakePoolAllocationsLost(</div>
-<div class="line"><a name="l12944"></a><span class="lineno">12944</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l12945"></a><span class="lineno">12945</span>&#160;    <span class="keywordtype">size_t</span>* pLostAllocationCount)</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;    VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l12948"></a><span class="lineno">12948</span>&#160;    <span class="keywordtype">size_t</span> lostAllocationCount = 0;</div>
-<div class="line"><a name="l12949"></a><span class="lineno">12949</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</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;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l12952"></a><span class="lineno">12952</span>&#160;        VMA_ASSERT(pBlock);</div>
-<div class="line"><a name="l12953"></a><span class="lineno">12953</span>&#160;        lostAllocationCount += pBlock-&gt;m_pMetadata-&gt;MakeAllocationsLost(currentFrameIndex, m_FrameInUseCount);</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="keywordflow">if</span>(pLostAllocationCount != VMA_NULL)</div>
+<div class="line"><a name="l12911"></a><span class="lineno">12911</span>&#160; </div>
+<div class="line"><a name="l12912"></a><span class="lineno">12912</span>&#160;    <span class="keywordflow">if</span>(pCtx-&gt;mutexLocked)</div>
+<div class="line"><a name="l12913"></a><span class="lineno">12913</span>&#160;    {</div>
+<div class="line"><a name="l12914"></a><span class="lineno">12914</span>&#160;        VMA_ASSERT(m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l12915"></a><span class="lineno">12915</span>&#160;        m_Mutex.UnlockWrite();</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; </div>
+<div class="line"><a name="l12919"></a><span class="lineno">12919</span>&#160;<span class="keywordtype">size_t</span> VmaBlockVector::CalcAllocationCount()<span class="keyword"> const</span></div>
+<div class="line"><a name="l12920"></a><span class="lineno">12920</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l12921"></a><span class="lineno">12921</span>&#160;    <span class="keywordtype">size_t</span> result = 0;</div>
+<div class="line"><a name="l12922"></a><span class="lineno">12922</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="l12923"></a><span class="lineno">12923</span>&#160;    {</div>
+<div class="line"><a name="l12924"></a><span class="lineno">12924</span>&#160;        result += m_Blocks[i]-&gt;m_pMetadata-&gt;GetAllocationCount();</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;    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l12927"></a><span class="lineno">12927</span>&#160;}</div>
+<div class="line"><a name="l12928"></a><span class="lineno">12928</span>&#160; </div>
+<div class="line"><a name="l12929"></a><span class="lineno">12929</span>&#160;<span class="keywordtype">bool</span> VmaBlockVector::IsBufferImageGranularityConflictPossible()<span class="keyword"> const</span></div>
+<div class="line"><a name="l12930"></a><span class="lineno">12930</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l12931"></a><span class="lineno">12931</span>&#160;    <span class="keywordflow">if</span>(m_BufferImageGranularity == 1)</div>
+<div class="line"><a name="l12932"></a><span class="lineno">12932</span>&#160;    {</div>
+<div class="line"><a name="l12933"></a><span class="lineno">12933</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l12934"></a><span class="lineno">12934</span>&#160;    }</div>
+<div class="line"><a name="l12935"></a><span class="lineno">12935</span>&#160;    VmaSuballocationType lastSuballocType = VMA_SUBALLOCATION_TYPE_FREE;</div>
+<div class="line"><a name="l12936"></a><span class="lineno">12936</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="l12937"></a><span class="lineno">12937</span>&#160;    {</div>
+<div class="line"><a name="l12938"></a><span class="lineno">12938</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[i];</div>
+<div class="line"><a name="l12939"></a><span class="lineno">12939</span>&#160;        VMA_ASSERT(m_Algorithm == 0);</div>
+<div class="line"><a name="l12940"></a><span class="lineno">12940</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pMetadata = (VmaBlockMetadata_Generic*)pBlock-&gt;m_pMetadata;</div>
+<div class="line"><a name="l12941"></a><span class="lineno">12941</span>&#160;        <span class="keywordflow">if</span>(pMetadata-&gt;IsBufferImageGranularityConflictPossible(m_BufferImageGranularity, lastSuballocType))</div>
+<div class="line"><a name="l12942"></a><span class="lineno">12942</span>&#160;        {</div>
+<div class="line"><a name="l12943"></a><span class="lineno">12943</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l12944"></a><span class="lineno">12944</span>&#160;        }</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;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</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;<span class="keywordtype">void</span> VmaBlockVector::MakePoolAllocationsLost(</div>
+<div class="line"><a name="l12950"></a><span class="lineno">12950</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l12951"></a><span class="lineno">12951</span>&#160;    <span class="keywordtype">size_t</span>* pLostAllocationCount)</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;    VmaMutexLockWrite lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l12954"></a><span class="lineno">12954</span>&#160;    <span class="keywordtype">size_t</span> lostAllocationCount = 0;</div>
+<div class="line"><a name="l12955"></a><span class="lineno">12955</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</div>
 <div class="line"><a name="l12956"></a><span class="lineno">12956</span>&#160;    {</div>
-<div class="line"><a name="l12957"></a><span class="lineno">12957</span>&#160;        *pLostAllocationCount = lostAllocationCount;</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;}</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;VkResult VmaBlockVector::CheckCorruption()</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">if</span>(!IsCorruptionDetectionEnabled())</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;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</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;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l12969"></a><span class="lineno">12969</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</div>
+<div class="line"><a name="l12957"></a><span class="lineno">12957</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l12958"></a><span class="lineno">12958</span>&#160;        VMA_ASSERT(pBlock);</div>
+<div class="line"><a name="l12959"></a><span class="lineno">12959</span>&#160;        lostAllocationCount += pBlock-&gt;m_pMetadata-&gt;MakeAllocationsLost(currentFrameIndex, m_FrameInUseCount);</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;    <span class="keywordflow">if</span>(pLostAllocationCount != VMA_NULL)</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;        *pLostAllocationCount = lostAllocationCount;</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;}</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;VkResult VmaBlockVector::CheckCorruption()</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="keywordflow">if</span>(!IsCorruptionDetectionEnabled())</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;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l12972"></a><span class="lineno">12972</span>&#160;        VMA_ASSERT(pBlock);</div>
-<div class="line"><a name="l12973"></a><span class="lineno">12973</span>&#160;        VkResult res = pBlock-&gt;CheckCorruption(m_hAllocator);</div>
-<div class="line"><a name="l12974"></a><span class="lineno">12974</span>&#160;        <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
-<div class="line"><a name="l12975"></a><span class="lineno">12975</span>&#160;        {</div>
-<div class="line"><a name="l12976"></a><span class="lineno">12976</span>&#160;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l12977"></a><span class="lineno">12977</span>&#160;        }</div>
-<div class="line"><a name="l12978"></a><span class="lineno">12978</span>&#160;    }</div>
-<div class="line"><a name="l12979"></a><span class="lineno">12979</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l12980"></a><span class="lineno">12980</span>&#160;}</div>
-<div class="line"><a name="l12981"></a><span class="lineno">12981</span>&#160; </div>
-<div class="line"><a name="l12982"></a><span class="lineno">12982</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="l12983"></a><span class="lineno">12983</span>&#160;{</div>
-<div class="line"><a name="l12984"></a><span class="lineno">12984</span>&#160;    <span class="keyword">const</span> uint32_t memTypeIndex = m_MemoryTypeIndex;</div>
-<div class="line"><a name="l12985"></a><span class="lineno">12985</span>&#160;    <span class="keyword">const</span> uint32_t memHeapIndex = m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
-<div class="line"><a name="l12986"></a><span class="lineno">12986</span>&#160; </div>
-<div class="line"><a name="l12987"></a><span class="lineno">12987</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
-<div class="line"><a name="l12988"></a><span class="lineno">12988</span>&#160; </div>
-<div class="line"><a name="l12989"></a><span class="lineno">12989</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</div>
-<div class="line"><a name="l12990"></a><span class="lineno">12990</span>&#160;    {</div>
-<div class="line"><a name="l12991"></a><span class="lineno">12991</span>&#160;        <span class="keyword">const</span> VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l12992"></a><span class="lineno">12992</span>&#160;        VMA_ASSERT(pBlock);</div>
-<div class="line"><a name="l12993"></a><span class="lineno">12993</span>&#160;        VMA_HEAVY_ASSERT(pBlock-&gt;Validate());</div>
-<div class="line"><a name="l12994"></a><span class="lineno">12994</span>&#160;        <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> allocationStatInfo;</div>
-<div class="line"><a name="l12995"></a><span class="lineno">12995</span>&#160;        pBlock-&gt;m_pMetadata-&gt;CalcAllocationStatInfo(allocationStatInfo);</div>
-<div class="line"><a name="l12996"></a><span class="lineno">12996</span>&#160;        VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>, allocationStatInfo);</div>
-<div class="line"><a name="l12997"></a><span class="lineno">12997</span>&#160;        VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[memTypeIndex], allocationStatInfo);</div>
-<div class="line"><a name="l12998"></a><span class="lineno">12998</span>&#160;        VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[memHeapIndex], allocationStatInfo);</div>
-<div class="line"><a name="l12999"></a><span class="lineno">12999</span>&#160;    }</div>
-<div class="line"><a name="l13000"></a><span class="lineno">13000</span>&#160;}</div>
-<div class="line"><a name="l13001"></a><span class="lineno">13001</span>&#160; </div>
-<div class="line"><a name="l13003"></a><span class="lineno">13003</span>&#160;<span class="comment">// VmaDefragmentationAlgorithm_Generic members definition</span></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;VmaDefragmentationAlgorithm_Generic::VmaDefragmentationAlgorithm_Generic(</div>
-<div class="line"><a name="l13006"></a><span class="lineno">13006</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
-<div class="line"><a name="l13007"></a><span class="lineno">13007</span>&#160;    VmaBlockVector* pBlockVector,</div>
-<div class="line"><a name="l13008"></a><span class="lineno">13008</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l13009"></a><span class="lineno">13009</span>&#160;    <span class="keywordtype">bool</span> overlappingMoveSupported) :</div>
-<div class="line"><a name="l13010"></a><span class="lineno">13010</span>&#160;    VmaDefragmentationAlgorithm(hAllocator, pBlockVector, currentFrameIndex),</div>
-<div class="line"><a name="l13011"></a><span class="lineno">13011</span>&#160;    m_AllocationCount(0),</div>
-<div class="line"><a name="l13012"></a><span class="lineno">13012</span>&#160;    m_AllAllocations(false),</div>
-<div class="line"><a name="l13013"></a><span class="lineno">13013</span>&#160;    m_BytesMoved(0),</div>
-<div class="line"><a name="l13014"></a><span class="lineno">13014</span>&#160;    m_AllocationsMoved(0),</div>
-<div class="line"><a name="l13015"></a><span class="lineno">13015</span>&#160;    m_Blocks(VmaStlAllocator&lt;BlockInfo*&gt;(hAllocator-&gt;GetAllocationCallbacks()))</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="comment">// Create block info for each block.</span></div>
-<div class="line"><a name="l13018"></a><span class="lineno">13018</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="l13019"></a><span class="lineno">13019</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="l13020"></a><span class="lineno">13020</span>&#160;    {</div>
-<div class="line"><a name="l13021"></a><span class="lineno">13021</span>&#160;        BlockInfo* pBlockInfo = vma_new(m_hAllocator, BlockInfo)(m_hAllocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l13022"></a><span class="lineno">13022</span>&#160;        pBlockInfo-&gt;m_OriginalBlockIndex = blockIndex;</div>
-<div class="line"><a name="l13023"></a><span class="lineno">13023</span>&#160;        pBlockInfo-&gt;m_pBlock = m_pBlockVector-&gt;m_Blocks[blockIndex];</div>
-<div class="line"><a name="l13024"></a><span class="lineno">13024</span>&#160;        m_Blocks.push_back(pBlockInfo);</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="comment">// Sort them by m_pBlock pointer value.</span></div>
-<div class="line"><a name="l13028"></a><span class="lineno">13028</span>&#160;    VMA_SORT(m_Blocks.begin(), m_Blocks.end(), BlockPointerLess());</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; </div>
-<div class="line"><a name="l13031"></a><span class="lineno">13031</span>&#160;VmaDefragmentationAlgorithm_Generic::~VmaDefragmentationAlgorithm_Generic()</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;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_Blocks.size(); i--; )</div>
-<div class="line"><a name="l13034"></a><span class="lineno">13034</span>&#160;    {</div>
-<div class="line"><a name="l13035"></a><span class="lineno">13035</span>&#160;        vma_delete(m_hAllocator, m_Blocks[i]);</div>
-<div class="line"><a name="l13036"></a><span class="lineno">13036</span>&#160;    }</div>
-<div class="line"><a name="l13037"></a><span class="lineno">13037</span>&#160;}</div>
-<div class="line"><a name="l13038"></a><span class="lineno">13038</span>&#160; </div>
-<div class="line"><a name="l13039"></a><span class="lineno">13039</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="l13040"></a><span class="lineno">13040</span>&#160;{</div>
-<div class="line"><a name="l13041"></a><span class="lineno">13041</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="l13042"></a><span class="lineno">13042</span>&#160;    <span class="keywordflow">if</span>(hAlloc-&gt;GetLastUseFrameIndex() != VMA_FRAME_INDEX_LOST)</div>
-<div class="line"><a name="l13043"></a><span class="lineno">13043</span>&#160;    {</div>
-<div class="line"><a name="l13044"></a><span class="lineno">13044</span>&#160;        VmaDeviceMemoryBlock* pBlock = hAlloc-&gt;GetBlock();</div>
-<div class="line"><a name="l13045"></a><span class="lineno">13045</span>&#160;        BlockInfoVector::iterator it = VmaBinaryFindFirstNotLess(m_Blocks.begin(), m_Blocks.end(), pBlock, BlockPointerLess());</div>
-<div class="line"><a name="l13046"></a><span class="lineno">13046</span>&#160;        <span class="keywordflow">if</span>(it != m_Blocks.end() &amp;&amp; (*it)-&gt;m_pBlock == pBlock)</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;            AllocationInfo allocInfo = AllocationInfo(hAlloc, pChanged);</div>
-<div class="line"><a name="l13049"></a><span class="lineno">13049</span>&#160;            (*it)-&gt;m_Allocations.push_back(allocInfo);</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;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l13052"></a><span class="lineno">13052</span>&#160;        {</div>
-<div class="line"><a name="l13053"></a><span class="lineno">13053</span>&#160;            VMA_ASSERT(0);</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;        ++m_AllocationCount;</div>
-<div class="line"><a name="l13057"></a><span class="lineno">13057</span>&#160;    }</div>
-<div class="line"><a name="l13058"></a><span class="lineno">13058</span>&#160;}</div>
-<div class="line"><a name="l13059"></a><span class="lineno">13059</span>&#160; </div>
-<div class="line"><a name="l13060"></a><span class="lineno">13060</span>&#160;VkResult VmaDefragmentationAlgorithm_Generic::DefragmentRound(</div>
-<div class="line"><a name="l13061"></a><span class="lineno">13061</span>&#160;    VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
-<div class="line"><a name="l13062"></a><span class="lineno">13062</span>&#160;    VkDeviceSize maxBytesToMove,</div>
-<div class="line"><a name="l13063"></a><span class="lineno">13063</span>&#160;    uint32_t maxAllocationsToMove)</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="keywordflow">if</span>(m_Blocks.empty())</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;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l13068"></a><span class="lineno">13068</span>&#160;    }</div>
-<div class="line"><a name="l13069"></a><span class="lineno">13069</span>&#160; </div>
-<div class="line"><a name="l13070"></a><span class="lineno">13070</span>&#160;    <span class="comment">// This is a choice based on research.</span></div>
-<div class="line"><a name="l13071"></a><span class="lineno">13071</span>&#160;    <span class="comment">// Option 1:</span></div>
-<div class="line"><a name="l13072"></a><span class="lineno">13072</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="l13073"></a><span class="lineno">13073</span>&#160;    <span class="comment">// Option 2:</span></div>
-<div class="line"><a name="l13074"></a><span class="lineno">13074</span>&#160;    <span class="comment">//uint32_t strategy = VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT;</span></div>
-<div class="line"><a name="l13075"></a><span class="lineno">13075</span>&#160;    <span class="comment">// Option 3:</span></div>
-<div class="line"><a name="l13076"></a><span class="lineno">13076</span>&#160;    <span class="comment">//uint32_t strategy = VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT;</span></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;    <span class="keywordtype">size_t</span> srcBlockMinIndex = 0;</div>
-<div class="line"><a name="l13079"></a><span class="lineno">13079</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="l13080"></a><span class="lineno">13080</span>&#160;    <span class="comment">/*</span></div>
-<div class="line"><a name="l13081"></a><span class="lineno">13081</span>&#160;<span class="comment">    if(m_AlgorithmFlags &amp; VMA_DEFRAGMENTATION_FAST_ALGORITHM_BIT)</span></div>
-<div class="line"><a name="l13082"></a><span class="lineno">13082</span>&#160;<span class="comment">    {</span></div>
-<div class="line"><a name="l13083"></a><span class="lineno">13083</span>&#160;<span class="comment">        const size_t blocksWithNonMovableCount = CalcBlocksWithNonMovableCount();</span></div>
-<div class="line"><a name="l13084"></a><span class="lineno">13084</span>&#160;<span class="comment">        if(blocksWithNonMovableCount &gt; 0)</span></div>
-<div class="line"><a name="l13085"></a><span class="lineno">13085</span>&#160;<span class="comment">        {</span></div>
-<div class="line"><a name="l13086"></a><span class="lineno">13086</span>&#160;<span class="comment">            srcBlockMinIndex = blocksWithNonMovableCount - 1;</span></div>
-<div class="line"><a name="l13087"></a><span class="lineno">13087</span>&#160;<span class="comment">        }</span></div>
-<div class="line"><a name="l13088"></a><span class="lineno">13088</span>&#160;<span class="comment">    }</span></div>
-<div class="line"><a name="l13089"></a><span class="lineno">13089</span>&#160;<span class="comment">    */</span></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;    <span class="keywordtype">size_t</span> srcBlockIndex = m_Blocks.size() - 1;</div>
-<div class="line"><a name="l13092"></a><span class="lineno">13092</span>&#160;    <span class="keywordtype">size_t</span> srcAllocIndex = SIZE_MAX;</div>
-<div class="line"><a name="l13093"></a><span class="lineno">13093</span>&#160;    <span class="keywordflow">for</span>(;;)</div>
-<div class="line"><a name="l13094"></a><span class="lineno">13094</span>&#160;    {</div>
-<div class="line"><a name="l13095"></a><span class="lineno">13095</span>&#160;        <span class="comment">// 1. Find next allocation to move.</span></div>
-<div class="line"><a name="l13096"></a><span class="lineno">13096</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="l13097"></a><span class="lineno">13097</span>&#160;        <span class="comment">// 1.2. Then start from last to first m_Allocations.</span></div>
-<div class="line"><a name="l13098"></a><span class="lineno">13098</span>&#160;        <span class="keywordflow">while</span>(srcAllocIndex &gt;= m_Blocks[srcBlockIndex]-&gt;m_Allocations.size())</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">if</span>(m_Blocks[srcBlockIndex]-&gt;m_Allocations.empty())</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;                <span class="comment">// Finished: no more allocations to process.</span></div>
-<div class="line"><a name="l13103"></a><span class="lineno">13103</span>&#160;                <span class="keywordflow">if</span>(srcBlockIndex == srcBlockMinIndex)</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">return</span> 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="keywordflow">else</span></div>
-<div class="line"><a name="l13108"></a><span class="lineno">13108</span>&#160;                {</div>
-<div class="line"><a name="l13109"></a><span class="lineno">13109</span>&#160;                    --srcBlockIndex;</div>
-<div class="line"><a name="l13110"></a><span class="lineno">13110</span>&#160;                    srcAllocIndex = SIZE_MAX;</div>
-<div class="line"><a name="l13111"></a><span class="lineno">13111</span>&#160;                }</div>
-<div class="line"><a name="l13112"></a><span class="lineno">13112</span>&#160;            }</div>
-<div class="line"><a name="l13113"></a><span class="lineno">13113</span>&#160;            <span class="keywordflow">else</span></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;                srcAllocIndex = m_Blocks[srcBlockIndex]-&gt;m_Allocations.size() - 1;</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;        </div>
-<div class="line"><a name="l13119"></a><span class="lineno">13119</span>&#160;        BlockInfo* pSrcBlockInfo = m_Blocks[srcBlockIndex];</div>
-<div class="line"><a name="l13120"></a><span class="lineno">13120</span>&#160;        AllocationInfo&amp; allocInfo = pSrcBlockInfo-&gt;m_Allocations[srcAllocIndex];</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;        <span class="keyword">const</span> VkDeviceSize size = allocInfo.m_hAllocation-&gt;GetSize();</div>
-<div class="line"><a name="l13123"></a><span class="lineno">13123</span>&#160;        <span class="keyword">const</span> VkDeviceSize srcOffset = allocInfo.m_hAllocation-&gt;GetOffset();</div>
-<div class="line"><a name="l13124"></a><span class="lineno">13124</span>&#160;        <span class="keyword">const</span> VkDeviceSize alignment = allocInfo.m_hAllocation-&gt;GetAlignment();</div>
-<div class="line"><a name="l13125"></a><span class="lineno">13125</span>&#160;        <span class="keyword">const</span> VmaSuballocationType suballocType = allocInfo.m_hAllocation-&gt;GetSuballocationType();</div>
-<div class="line"><a name="l13126"></a><span class="lineno">13126</span>&#160; </div>
-<div class="line"><a name="l13127"></a><span class="lineno">13127</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="l13128"></a><span class="lineno">13128</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="l13129"></a><span class="lineno">13129</span>&#160;        {</div>
-<div class="line"><a name="l13130"></a><span class="lineno">13130</span>&#160;            BlockInfo* pDstBlockInfo = m_Blocks[dstBlockIndex];</div>
-<div class="line"><a name="l13131"></a><span class="lineno">13131</span>&#160;            VmaAllocationRequest dstAllocRequest;</div>
-<div class="line"><a name="l13132"></a><span class="lineno">13132</span>&#160;            <span class="keywordflow">if</span>(pDstBlockInfo-&gt;m_pBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
-<div class="line"><a name="l13133"></a><span class="lineno">13133</span>&#160;                m_CurrentFrameIndex,</div>
-<div class="line"><a name="l13134"></a><span class="lineno">13134</span>&#160;                m_pBlockVector-&gt;GetFrameInUseCount(),</div>
-<div class="line"><a name="l13135"></a><span class="lineno">13135</span>&#160;                m_pBlockVector-&gt;GetBufferImageGranularity(),</div>
-<div class="line"><a name="l13136"></a><span class="lineno">13136</span>&#160;                size,</div>
-<div class="line"><a name="l13137"></a><span class="lineno">13137</span>&#160;                alignment,</div>
-<div class="line"><a name="l13138"></a><span class="lineno">13138</span>&#160;                <span class="keyword">false</span>, <span class="comment">// upperAddress</span></div>
-<div class="line"><a name="l13139"></a><span class="lineno">13139</span>&#160;                suballocType,</div>
-<div class="line"><a name="l13140"></a><span class="lineno">13140</span>&#160;                <span class="keyword">false</span>, <span class="comment">// canMakeOtherLost</span></div>
-<div class="line"><a name="l13141"></a><span class="lineno">13141</span>&#160;                strategy,</div>
-<div class="line"><a name="l13142"></a><span class="lineno">13142</span>&#160;                &amp;dstAllocRequest) &amp;&amp;</div>
-<div class="line"><a name="l13143"></a><span class="lineno">13143</span>&#160;            MoveMakesSense(</div>
-<div class="line"><a name="l13144"></a><span class="lineno">13144</span>&#160;                dstBlockIndex, dstAllocRequest.offset, srcBlockIndex, srcOffset))</div>
-<div class="line"><a name="l13145"></a><span class="lineno">13145</span>&#160;            {</div>
-<div class="line"><a name="l13146"></a><span class="lineno">13146</span>&#160;                VMA_ASSERT(dstAllocRequest.itemsToMakeLostCount == 0);</div>
-<div class="line"><a name="l13147"></a><span class="lineno">13147</span>&#160; </div>
-<div class="line"><a name="l13148"></a><span class="lineno">13148</span>&#160;                <span class="comment">// Reached limit on number of allocations or bytes to move.</span></div>
-<div class="line"><a name="l13149"></a><span class="lineno">13149</span>&#160;                <span class="keywordflow">if</span>((m_AllocationsMoved + 1 &gt; maxAllocationsToMove) ||</div>
-<div class="line"><a name="l13150"></a><span class="lineno">13150</span>&#160;                    (m_BytesMoved + size &gt; maxBytesToMove))</div>
-<div class="line"><a name="l13151"></a><span class="lineno">13151</span>&#160;                {</div>
-<div class="line"><a name="l13152"></a><span class="lineno">13152</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</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; </div>
-<div class="line"><a name="l13155"></a><span class="lineno">13155</span>&#160;                VmaDefragmentationMove move;</div>
-<div class="line"><a name="l13156"></a><span class="lineno">13156</span>&#160;                move.srcBlockIndex = pSrcBlockInfo-&gt;m_OriginalBlockIndex;</div>
-<div class="line"><a name="l13157"></a><span class="lineno">13157</span>&#160;                move.dstBlockIndex = pDstBlockInfo-&gt;m_OriginalBlockIndex;</div>
-<div class="line"><a name="l13158"></a><span class="lineno">13158</span>&#160;                move.srcOffset = srcOffset;</div>
-<div class="line"><a name="l13159"></a><span class="lineno">13159</span>&#160;                move.dstOffset = dstAllocRequest.offset;</div>
-<div class="line"><a name="l13160"></a><span class="lineno">13160</span>&#160;                move.size = size;</div>
-<div class="line"><a name="l13161"></a><span class="lineno">13161</span>&#160;                moves.push_back(move);</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;                pDstBlockInfo-&gt;m_pBlock-&gt;m_pMetadata-&gt;Alloc(</div>
-<div class="line"><a name="l13164"></a><span class="lineno">13164</span>&#160;                    dstAllocRequest,</div>
-<div class="line"><a name="l13165"></a><span class="lineno">13165</span>&#160;                    suballocType,</div>
-<div class="line"><a name="l13166"></a><span class="lineno">13166</span>&#160;                    size,</div>
-<div class="line"><a name="l13167"></a><span class="lineno">13167</span>&#160;                    allocInfo.m_hAllocation);</div>
-<div class="line"><a name="l13168"></a><span class="lineno">13168</span>&#160;                pSrcBlockInfo-&gt;m_pBlock-&gt;m_pMetadata-&gt;FreeAtOffset(srcOffset);</div>
-<div class="line"><a name="l13169"></a><span class="lineno">13169</span>&#160;                </div>
-<div class="line"><a name="l13170"></a><span class="lineno">13170</span>&#160;                allocInfo.m_hAllocation-&gt;ChangeBlockAllocation(m_hAllocator, pDstBlockInfo-&gt;m_pBlock, dstAllocRequest.offset);</div>
-<div class="line"><a name="l13171"></a><span class="lineno">13171</span>&#160; </div>
-<div class="line"><a name="l13172"></a><span class="lineno">13172</span>&#160;                <span class="keywordflow">if</span>(allocInfo.m_pChanged != VMA_NULL)</div>
-<div class="line"><a name="l13173"></a><span class="lineno">13173</span>&#160;                {</div>
-<div class="line"><a name="l13174"></a><span class="lineno">13174</span>&#160;                    *allocInfo.m_pChanged = VK_TRUE;</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;                ++m_AllocationsMoved;</div>
-<div class="line"><a name="l13178"></a><span class="lineno">13178</span>&#160;                m_BytesMoved += size;</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;                VmaVectorRemove(pSrcBlockInfo-&gt;m_Allocations, srcAllocIndex);</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;                <span class="keywordflow">break</span>;</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;        }</div>
+<div class="line"><a name="l12971"></a><span class="lineno">12971</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</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; </div>
+<div class="line"><a name="l12974"></a><span class="lineno">12974</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l12975"></a><span class="lineno">12975</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</div>
+<div class="line"><a name="l12976"></a><span class="lineno">12976</span>&#160;    {</div>
+<div class="line"><a name="l12977"></a><span class="lineno">12977</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l12978"></a><span class="lineno">12978</span>&#160;        VMA_ASSERT(pBlock);</div>
+<div class="line"><a name="l12979"></a><span class="lineno">12979</span>&#160;        VkResult res = pBlock-&gt;CheckCorruption(m_hAllocator);</div>
+<div class="line"><a name="l12980"></a><span class="lineno">12980</span>&#160;        <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l12981"></a><span class="lineno">12981</span>&#160;        {</div>
+<div class="line"><a name="l12982"></a><span class="lineno">12982</span>&#160;            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l12983"></a><span class="lineno">12983</span>&#160;        }</div>
+<div class="line"><a name="l12984"></a><span class="lineno">12984</span>&#160;    }</div>
+<div class="line"><a name="l12985"></a><span class="lineno">12985</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l12986"></a><span class="lineno">12986</span>&#160;}</div>
+<div class="line"><a name="l12987"></a><span class="lineno">12987</span>&#160; </div>
+<div class="line"><a name="l12988"></a><span class="lineno">12988</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="l12989"></a><span class="lineno">12989</span>&#160;{</div>
+<div class="line"><a name="l12990"></a><span class="lineno">12990</span>&#160;    <span class="keyword">const</span> uint32_t memTypeIndex = m_MemoryTypeIndex;</div>
+<div class="line"><a name="l12991"></a><span class="lineno">12991</span>&#160;    <span class="keyword">const</span> uint32_t memHeapIndex = m_hAllocator-&gt;MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
+<div class="line"><a name="l12992"></a><span class="lineno">12992</span>&#160; </div>
+<div class="line"><a name="l12993"></a><span class="lineno">12993</span>&#160;    VmaMutexLockRead lock(m_Mutex, m_hAllocator-&gt;m_UseMutex);</div>
+<div class="line"><a name="l12994"></a><span class="lineno">12994</span>&#160; </div>
+<div class="line"><a name="l12995"></a><span class="lineno">12995</span>&#160;    <span class="keywordflow">for</span>(uint32_t blockIndex = 0; blockIndex &lt; m_Blocks.size(); ++blockIndex)</div>
+<div class="line"><a name="l12996"></a><span class="lineno">12996</span>&#160;    {</div>
+<div class="line"><a name="l12997"></a><span class="lineno">12997</span>&#160;        <span class="keyword">const</span> VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l12998"></a><span class="lineno">12998</span>&#160;        VMA_ASSERT(pBlock);</div>
+<div class="line"><a name="l12999"></a><span class="lineno">12999</span>&#160;        VMA_HEAVY_ASSERT(pBlock-&gt;Validate());</div>
+<div class="line"><a name="l13000"></a><span class="lineno">13000</span>&#160;        <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> allocationStatInfo;</div>
+<div class="line"><a name="l13001"></a><span class="lineno">13001</span>&#160;        pBlock-&gt;m_pMetadata-&gt;CalcAllocationStatInfo(allocationStatInfo);</div>
+<div class="line"><a name="l13002"></a><span class="lineno">13002</span>&#160;        VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>, allocationStatInfo);</div>
+<div class="line"><a name="l13003"></a><span class="lineno">13003</span>&#160;        VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[memTypeIndex], allocationStatInfo);</div>
+<div class="line"><a name="l13004"></a><span class="lineno">13004</span>&#160;        VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[memHeapIndex], allocationStatInfo);</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;}</div>
+<div class="line"><a name="l13007"></a><span class="lineno">13007</span>&#160; </div>
+<div class="line"><a name="l13009"></a><span class="lineno">13009</span>&#160;<span class="comment">// VmaDefragmentationAlgorithm_Generic members definition</span></div>
+<div class="line"><a name="l13010"></a><span class="lineno">13010</span>&#160; </div>
+<div class="line"><a name="l13011"></a><span class="lineno">13011</span>&#160;VmaDefragmentationAlgorithm_Generic::VmaDefragmentationAlgorithm_Generic(</div>
+<div class="line"><a name="l13012"></a><span class="lineno">13012</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
+<div class="line"><a name="l13013"></a><span class="lineno">13013</span>&#160;    VmaBlockVector* pBlockVector,</div>
+<div class="line"><a name="l13014"></a><span class="lineno">13014</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l13015"></a><span class="lineno">13015</span>&#160;    <span class="keywordtype">bool</span> overlappingMoveSupported) :</div>
+<div class="line"><a name="l13016"></a><span class="lineno">13016</span>&#160;    VmaDefragmentationAlgorithm(hAllocator, pBlockVector, currentFrameIndex),</div>
+<div class="line"><a name="l13017"></a><span class="lineno">13017</span>&#160;    m_AllocationCount(0),</div>
+<div class="line"><a name="l13018"></a><span class="lineno">13018</span>&#160;    m_AllAllocations(false),</div>
+<div class="line"><a name="l13019"></a><span class="lineno">13019</span>&#160;    m_BytesMoved(0),</div>
+<div class="line"><a name="l13020"></a><span class="lineno">13020</span>&#160;    m_AllocationsMoved(0),</div>
+<div class="line"><a name="l13021"></a><span class="lineno">13021</span>&#160;    m_Blocks(VmaStlAllocator&lt;BlockInfo*&gt;(hAllocator-&gt;GetAllocationCallbacks()))</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;    <span class="comment">// Create block info for each block.</span></div>
+<div class="line"><a name="l13024"></a><span class="lineno">13024</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="l13025"></a><span class="lineno">13025</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="l13026"></a><span class="lineno">13026</span>&#160;    {</div>
+<div class="line"><a name="l13027"></a><span class="lineno">13027</span>&#160;        BlockInfo* pBlockInfo = vma_new(m_hAllocator, BlockInfo)(m_hAllocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l13028"></a><span class="lineno">13028</span>&#160;        pBlockInfo-&gt;m_OriginalBlockIndex = blockIndex;</div>
+<div class="line"><a name="l13029"></a><span class="lineno">13029</span>&#160;        pBlockInfo-&gt;m_pBlock = m_pBlockVector-&gt;m_Blocks[blockIndex];</div>
+<div class="line"><a name="l13030"></a><span class="lineno">13030</span>&#160;        m_Blocks.push_back(pBlockInfo);</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; </div>
+<div class="line"><a name="l13033"></a><span class="lineno">13033</span>&#160;    <span class="comment">// Sort them by m_pBlock pointer value.</span></div>
+<div class="line"><a name="l13034"></a><span class="lineno">13034</span>&#160;    VMA_SORT(m_Blocks.begin(), m_Blocks.end(), BlockPointerLess());</div>
+<div class="line"><a name="l13035"></a><span class="lineno">13035</span>&#160;}</div>
+<div class="line"><a name="l13036"></a><span class="lineno">13036</span>&#160; </div>
+<div class="line"><a name="l13037"></a><span class="lineno">13037</span>&#160;VmaDefragmentationAlgorithm_Generic::~VmaDefragmentationAlgorithm_Generic()</div>
+<div class="line"><a name="l13038"></a><span class="lineno">13038</span>&#160;{</div>
+<div class="line"><a name="l13039"></a><span class="lineno">13039</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_Blocks.size(); i--; )</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;        vma_delete(m_hAllocator, m_Blocks[i]);</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;}</div>
+<div class="line"><a name="l13044"></a><span class="lineno">13044</span>&#160; </div>
+<div class="line"><a name="l13045"></a><span class="lineno">13045</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="l13046"></a><span class="lineno">13046</span>&#160;{</div>
+<div class="line"><a name="l13047"></a><span class="lineno">13047</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="l13048"></a><span class="lineno">13048</span>&#160;    <span class="keywordflow">if</span>(hAlloc-&gt;GetLastUseFrameIndex() != VMA_FRAME_INDEX_LOST)</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;        VmaDeviceMemoryBlock* pBlock = hAlloc-&gt;GetBlock();</div>
+<div class="line"><a name="l13051"></a><span class="lineno">13051</span>&#160;        BlockInfoVector::iterator it = VmaBinaryFindFirstNotLess(m_Blocks.begin(), m_Blocks.end(), pBlock, BlockPointerLess());</div>
+<div class="line"><a name="l13052"></a><span class="lineno">13052</span>&#160;        <span class="keywordflow">if</span>(it != m_Blocks.end() &amp;&amp; (*it)-&gt;m_pBlock == pBlock)</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;            AllocationInfo allocInfo = AllocationInfo(hAlloc, pChanged);</div>
+<div class="line"><a name="l13055"></a><span class="lineno">13055</span>&#160;            (*it)-&gt;m_Allocations.push_back(allocInfo);</div>
+<div class="line"><a name="l13056"></a><span class="lineno">13056</span>&#160;        }</div>
+<div class="line"><a name="l13057"></a><span class="lineno">13057</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l13058"></a><span class="lineno">13058</span>&#160;        {</div>
+<div class="line"><a name="l13059"></a><span class="lineno">13059</span>&#160;            VMA_ASSERT(0);</div>
+<div class="line"><a name="l13060"></a><span class="lineno">13060</span>&#160;        }</div>
+<div class="line"><a name="l13061"></a><span class="lineno">13061</span>&#160; </div>
+<div class="line"><a name="l13062"></a><span class="lineno">13062</span>&#160;        ++m_AllocationCount;</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; </div>
+<div class="line"><a name="l13066"></a><span class="lineno">13066</span>&#160;VkResult VmaDefragmentationAlgorithm_Generic::DefragmentRound(</div>
+<div class="line"><a name="l13067"></a><span class="lineno">13067</span>&#160;    VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
+<div class="line"><a name="l13068"></a><span class="lineno">13068</span>&#160;    VkDeviceSize maxBytesToMove,</div>
+<div class="line"><a name="l13069"></a><span class="lineno">13069</span>&#160;    uint32_t maxAllocationsToMove)</div>
+<div class="line"><a name="l13070"></a><span class="lineno">13070</span>&#160;{</div>
+<div class="line"><a name="l13071"></a><span class="lineno">13071</span>&#160;    <span class="keywordflow">if</span>(m_Blocks.empty())</div>
+<div class="line"><a name="l13072"></a><span class="lineno">13072</span>&#160;    {</div>
+<div class="line"><a name="l13073"></a><span class="lineno">13073</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</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; </div>
+<div class="line"><a name="l13076"></a><span class="lineno">13076</span>&#160;    <span class="comment">// This is a choice based on research.</span></div>
+<div class="line"><a name="l13077"></a><span class="lineno">13077</span>&#160;    <span class="comment">// Option 1:</span></div>
+<div class="line"><a name="l13078"></a><span class="lineno">13078</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="l13079"></a><span class="lineno">13079</span>&#160;    <span class="comment">// Option 2:</span></div>
+<div class="line"><a name="l13080"></a><span class="lineno">13080</span>&#160;    <span class="comment">//uint32_t strategy = VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT;</span></div>
+<div class="line"><a name="l13081"></a><span class="lineno">13081</span>&#160;    <span class="comment">// Option 3:</span></div>
+<div class="line"><a name="l13082"></a><span class="lineno">13082</span>&#160;    <span class="comment">//uint32_t strategy = VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT;</span></div>
+<div class="line"><a name="l13083"></a><span class="lineno">13083</span>&#160; </div>
+<div class="line"><a name="l13084"></a><span class="lineno">13084</span>&#160;    <span class="keywordtype">size_t</span> srcBlockMinIndex = 0;</div>
+<div class="line"><a name="l13085"></a><span class="lineno">13085</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="l13086"></a><span class="lineno">13086</span>&#160;    <span class="comment">/*</span></div>
+<div class="line"><a name="l13087"></a><span class="lineno">13087</span>&#160;<span class="comment">    if(m_AlgorithmFlags &amp; VMA_DEFRAGMENTATION_FAST_ALGORITHM_BIT)</span></div>
+<div class="line"><a name="l13088"></a><span class="lineno">13088</span>&#160;<span class="comment">    {</span></div>
+<div class="line"><a name="l13089"></a><span class="lineno">13089</span>&#160;<span class="comment">        const size_t blocksWithNonMovableCount = CalcBlocksWithNonMovableCount();</span></div>
+<div class="line"><a name="l13090"></a><span class="lineno">13090</span>&#160;<span class="comment">        if(blocksWithNonMovableCount &gt; 0)</span></div>
+<div class="line"><a name="l13091"></a><span class="lineno">13091</span>&#160;<span class="comment">        {</span></div>
+<div class="line"><a name="l13092"></a><span class="lineno">13092</span>&#160;<span class="comment">            srcBlockMinIndex = blocksWithNonMovableCount - 1;</span></div>
+<div class="line"><a name="l13093"></a><span class="lineno">13093</span>&#160;<span class="comment">        }</span></div>
+<div class="line"><a name="l13094"></a><span class="lineno">13094</span>&#160;<span class="comment">    }</span></div>
+<div class="line"><a name="l13095"></a><span class="lineno">13095</span>&#160;<span class="comment">    */</span></div>
+<div class="line"><a name="l13096"></a><span class="lineno">13096</span>&#160; </div>
+<div class="line"><a name="l13097"></a><span class="lineno">13097</span>&#160;    <span class="keywordtype">size_t</span> srcBlockIndex = m_Blocks.size() - 1;</div>
+<div class="line"><a name="l13098"></a><span class="lineno">13098</span>&#160;    <span class="keywordtype">size_t</span> srcAllocIndex = SIZE_MAX;</div>
+<div class="line"><a name="l13099"></a><span class="lineno">13099</span>&#160;    <span class="keywordflow">for</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;        <span class="comment">// 1. Find next allocation to move.</span></div>
+<div class="line"><a name="l13102"></a><span class="lineno">13102</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="l13103"></a><span class="lineno">13103</span>&#160;        <span class="comment">// 1.2. Then start from last to first m_Allocations.</span></div>
+<div class="line"><a name="l13104"></a><span class="lineno">13104</span>&#160;        <span class="keywordflow">while</span>(srcAllocIndex &gt;= m_Blocks[srcBlockIndex]-&gt;m_Allocations.size())</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="keywordflow">if</span>(m_Blocks[srcBlockIndex]-&gt;m_Allocations.empty())</div>
+<div class="line"><a name="l13107"></a><span class="lineno">13107</span>&#160;            {</div>
+<div class="line"><a name="l13108"></a><span class="lineno">13108</span>&#160;                <span class="comment">// Finished: no more allocations to process.</span></div>
+<div class="line"><a name="l13109"></a><span class="lineno">13109</span>&#160;                <span class="keywordflow">if</span>(srcBlockIndex == srcBlockMinIndex)</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;                    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l13112"></a><span class="lineno">13112</span>&#160;                }</div>
+<div class="line"><a name="l13113"></a><span class="lineno">13113</span>&#160;                <span class="keywordflow">else</span></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;                    --srcBlockIndex;</div>
+<div class="line"><a name="l13116"></a><span class="lineno">13116</span>&#160;                    srcAllocIndex = SIZE_MAX;</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">else</span></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;                srcAllocIndex = m_Blocks[srcBlockIndex]-&gt;m_Allocations.size() - 1;</div>
+<div class="line"><a name="l13122"></a><span class="lineno">13122</span>&#160;            }</div>
+<div class="line"><a name="l13123"></a><span class="lineno">13123</span>&#160;        }</div>
+<div class="line"><a name="l13124"></a><span class="lineno">13124</span>&#160;        </div>
+<div class="line"><a name="l13125"></a><span class="lineno">13125</span>&#160;        BlockInfo* pSrcBlockInfo = m_Blocks[srcBlockIndex];</div>
+<div class="line"><a name="l13126"></a><span class="lineno">13126</span>&#160;        AllocationInfo&amp; allocInfo = pSrcBlockInfo-&gt;m_Allocations[srcAllocIndex];</div>
+<div class="line"><a name="l13127"></a><span class="lineno">13127</span>&#160; </div>
+<div class="line"><a name="l13128"></a><span class="lineno">13128</span>&#160;        <span class="keyword">const</span> VkDeviceSize size = allocInfo.m_hAllocation-&gt;GetSize();</div>
+<div class="line"><a name="l13129"></a><span class="lineno">13129</span>&#160;        <span class="keyword">const</span> VkDeviceSize srcOffset = allocInfo.m_hAllocation-&gt;GetOffset();</div>
+<div class="line"><a name="l13130"></a><span class="lineno">13130</span>&#160;        <span class="keyword">const</span> VkDeviceSize alignment = allocInfo.m_hAllocation-&gt;GetAlignment();</div>
+<div class="line"><a name="l13131"></a><span class="lineno">13131</span>&#160;        <span class="keyword">const</span> VmaSuballocationType suballocType = allocInfo.m_hAllocation-&gt;GetSuballocationType();</div>
+<div class="line"><a name="l13132"></a><span class="lineno">13132</span>&#160; </div>
+<div class="line"><a name="l13133"></a><span class="lineno">13133</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="l13134"></a><span class="lineno">13134</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="l13135"></a><span class="lineno">13135</span>&#160;        {</div>
+<div class="line"><a name="l13136"></a><span class="lineno">13136</span>&#160;            BlockInfo* pDstBlockInfo = m_Blocks[dstBlockIndex];</div>
+<div class="line"><a name="l13137"></a><span class="lineno">13137</span>&#160;            VmaAllocationRequest dstAllocRequest;</div>
+<div class="line"><a name="l13138"></a><span class="lineno">13138</span>&#160;            <span class="keywordflow">if</span>(pDstBlockInfo-&gt;m_pBlock-&gt;m_pMetadata-&gt;CreateAllocationRequest(</div>
+<div class="line"><a name="l13139"></a><span class="lineno">13139</span>&#160;                m_CurrentFrameIndex,</div>
+<div class="line"><a name="l13140"></a><span class="lineno">13140</span>&#160;                m_pBlockVector-&gt;GetFrameInUseCount(),</div>
+<div class="line"><a name="l13141"></a><span class="lineno">13141</span>&#160;                m_pBlockVector-&gt;GetBufferImageGranularity(),</div>
+<div class="line"><a name="l13142"></a><span class="lineno">13142</span>&#160;                size,</div>
+<div class="line"><a name="l13143"></a><span class="lineno">13143</span>&#160;                alignment,</div>
+<div class="line"><a name="l13144"></a><span class="lineno">13144</span>&#160;                <span class="keyword">false</span>, <span class="comment">// upperAddress</span></div>
+<div class="line"><a name="l13145"></a><span class="lineno">13145</span>&#160;                suballocType,</div>
+<div class="line"><a name="l13146"></a><span class="lineno">13146</span>&#160;                <span class="keyword">false</span>, <span class="comment">// canMakeOtherLost</span></div>
+<div class="line"><a name="l13147"></a><span class="lineno">13147</span>&#160;                strategy,</div>
+<div class="line"><a name="l13148"></a><span class="lineno">13148</span>&#160;                &amp;dstAllocRequest) &amp;&amp;</div>
+<div class="line"><a name="l13149"></a><span class="lineno">13149</span>&#160;            MoveMakesSense(</div>
+<div class="line"><a name="l13150"></a><span class="lineno">13150</span>&#160;                dstBlockIndex, dstAllocRequest.offset, srcBlockIndex, srcOffset))</div>
+<div class="line"><a name="l13151"></a><span class="lineno">13151</span>&#160;            {</div>
+<div class="line"><a name="l13152"></a><span class="lineno">13152</span>&#160;                VMA_ASSERT(dstAllocRequest.itemsToMakeLostCount == 0);</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;                <span class="comment">// Reached limit on number of allocations or bytes to move.</span></div>
+<div class="line"><a name="l13155"></a><span class="lineno">13155</span>&#160;                <span class="keywordflow">if</span>((m_AllocationsMoved + 1 &gt; maxAllocationsToMove) ||</div>
+<div class="line"><a name="l13156"></a><span class="lineno">13156</span>&#160;                    (m_BytesMoved + size &gt; maxBytesToMove))</div>
+<div class="line"><a name="l13157"></a><span class="lineno">13157</span>&#160;                {</div>
+<div class="line"><a name="l13158"></a><span class="lineno">13158</span>&#160;                    <span class="keywordflow">return</span> VK_SUCCESS;</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; </div>
+<div class="line"><a name="l13161"></a><span class="lineno">13161</span>&#160;                VmaDefragmentationMove move;</div>
+<div class="line"><a name="l13162"></a><span class="lineno">13162</span>&#160;                move.srcBlockIndex = pSrcBlockInfo-&gt;m_OriginalBlockIndex;</div>
+<div class="line"><a name="l13163"></a><span class="lineno">13163</span>&#160;                move.dstBlockIndex = pDstBlockInfo-&gt;m_OriginalBlockIndex;</div>
+<div class="line"><a name="l13164"></a><span class="lineno">13164</span>&#160;                move.srcOffset = srcOffset;</div>
+<div class="line"><a name="l13165"></a><span class="lineno">13165</span>&#160;                move.dstOffset = dstAllocRequest.offset;</div>
+<div class="line"><a name="l13166"></a><span class="lineno">13166</span>&#160;                move.size = size;</div>
+<div class="line"><a name="l13167"></a><span class="lineno">13167</span>&#160;                moves.push_back(move);</div>
+<div class="line"><a name="l13168"></a><span class="lineno">13168</span>&#160; </div>
+<div class="line"><a name="l13169"></a><span class="lineno">13169</span>&#160;                pDstBlockInfo-&gt;m_pBlock-&gt;m_pMetadata-&gt;Alloc(</div>
+<div class="line"><a name="l13170"></a><span class="lineno">13170</span>&#160;                    dstAllocRequest,</div>
+<div class="line"><a name="l13171"></a><span class="lineno">13171</span>&#160;                    suballocType,</div>
+<div class="line"><a name="l13172"></a><span class="lineno">13172</span>&#160;                    size,</div>
+<div class="line"><a name="l13173"></a><span class="lineno">13173</span>&#160;                    allocInfo.m_hAllocation);</div>
+<div class="line"><a name="l13174"></a><span class="lineno">13174</span>&#160;                pSrcBlockInfo-&gt;m_pBlock-&gt;m_pMetadata-&gt;FreeAtOffset(srcOffset);</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;                allocInfo.m_hAllocation-&gt;ChangeBlockAllocation(m_hAllocator, pDstBlockInfo-&gt;m_pBlock, dstAllocRequest.offset);</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="keywordflow">if</span>(allocInfo.m_pChanged != VMA_NULL)</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;                    *allocInfo.m_pChanged = VK_TRUE;</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;                ++m_AllocationsMoved;</div>
+<div class="line"><a name="l13184"></a><span class="lineno">13184</span>&#160;                m_BytesMoved += size;</div>
 <div class="line"><a name="l13185"></a><span class="lineno">13185</span>&#160; </div>
-<div class="line"><a name="l13186"></a><span class="lineno">13186</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="l13186"></a><span class="lineno">13186</span>&#160;                VmaVectorRemove(pSrcBlockInfo-&gt;m_Allocations, srcAllocIndex);</div>
 <div class="line"><a name="l13187"></a><span class="lineno">13187</span>&#160; </div>
-<div class="line"><a name="l13188"></a><span class="lineno">13188</span>&#160;        <span class="keywordflow">if</span>(srcAllocIndex &gt; 0)</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;            --srcAllocIndex;</div>
-<div class="line"><a name="l13191"></a><span class="lineno">13191</span>&#160;        }</div>
-<div class="line"><a name="l13192"></a><span class="lineno">13192</span>&#160;        <span class="keywordflow">else</span></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>(srcBlockIndex &gt; 0)</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;                --srcBlockIndex;</div>
-<div class="line"><a name="l13197"></a><span class="lineno">13197</span>&#160;                srcAllocIndex = SIZE_MAX;</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;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l13200"></a><span class="lineno">13200</span>&#160;            {</div>
-<div class="line"><a name="l13201"></a><span class="lineno">13201</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l13202"></a><span class="lineno">13202</span>&#160;            }</div>
-<div class="line"><a name="l13203"></a><span class="lineno">13203</span>&#160;        }</div>
-<div class="line"><a name="l13204"></a><span class="lineno">13204</span>&#160;    }</div>
-<div class="line"><a name="l13205"></a><span class="lineno">13205</span>&#160;}</div>
-<div class="line"><a name="l13206"></a><span class="lineno">13206</span>&#160; </div>
-<div class="line"><a name="l13207"></a><span class="lineno">13207</span>&#160;<span class="keywordtype">size_t</span> VmaDefragmentationAlgorithm_Generic::CalcBlocksWithNonMovableCount()<span class="keyword"> const</span></div>
-<div class="line"><a name="l13208"></a><span class="lineno">13208</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l13209"></a><span class="lineno">13209</span>&#160;    <span class="keywordtype">size_t</span> result = 0;</div>
-<div class="line"><a name="l13210"></a><span class="lineno">13210</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="l13211"></a><span class="lineno">13211</span>&#160;    {</div>
-<div class="line"><a name="l13212"></a><span class="lineno">13212</span>&#160;        <span class="keywordflow">if</span>(m_Blocks[i]-&gt;m_HasNonMovableAllocations)</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;            ++result;</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;    <span class="keywordflow">return</span> result;</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; </div>
-<div class="line"><a name="l13220"></a><span class="lineno">13220</span>&#160;VkResult VmaDefragmentationAlgorithm_Generic::Defragment(</div>
-<div class="line"><a name="l13221"></a><span class="lineno">13221</span>&#160;    VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
-<div class="line"><a name="l13222"></a><span class="lineno">13222</span>&#160;    VkDeviceSize maxBytesToMove,</div>
-<div class="line"><a name="l13223"></a><span class="lineno">13223</span>&#160;    uint32_t maxAllocationsToMove)</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;    <span class="keywordflow">if</span>(!m_AllAllocations &amp;&amp; m_AllocationCount == 0)</div>
-<div class="line"><a name="l13226"></a><span class="lineno">13226</span>&#160;    {</div>
-<div class="line"><a name="l13227"></a><span class="lineno">13227</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l13228"></a><span class="lineno">13228</span>&#160;    }</div>
-<div class="line"><a name="l13229"></a><span class="lineno">13229</span>&#160; </div>
-<div class="line"><a name="l13230"></a><span class="lineno">13230</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_Blocks.size();</div>
-<div class="line"><a name="l13231"></a><span class="lineno">13231</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="l13188"></a><span class="lineno">13188</span>&#160;                <span class="keywordflow">break</span>;</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;        }</div>
+<div class="line"><a name="l13191"></a><span class="lineno">13191</span>&#160; </div>
+<div class="line"><a name="l13192"></a><span class="lineno">13192</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="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>(srcAllocIndex &gt; 0)</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;            --srcAllocIndex;</div>
+<div class="line"><a name="l13197"></a><span class="lineno">13197</span>&#160;        }</div>
+<div class="line"><a name="l13198"></a><span class="lineno">13198</span>&#160;        <span class="keywordflow">else</span></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;            <span class="keywordflow">if</span>(srcBlockIndex &gt; 0)</div>
+<div class="line"><a name="l13201"></a><span class="lineno">13201</span>&#160;            {</div>
+<div class="line"><a name="l13202"></a><span class="lineno">13202</span>&#160;                --srcBlockIndex;</div>
+<div class="line"><a name="l13203"></a><span class="lineno">13203</span>&#160;                srcAllocIndex = SIZE_MAX;</div>
+<div class="line"><a name="l13204"></a><span class="lineno">13204</span>&#160;            }</div>
+<div class="line"><a name="l13205"></a><span class="lineno">13205</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l13206"></a><span class="lineno">13206</span>&#160;            {</div>
+<div class="line"><a name="l13207"></a><span class="lineno">13207</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l13208"></a><span class="lineno">13208</span>&#160;            }</div>
+<div class="line"><a name="l13209"></a><span class="lineno">13209</span>&#160;        }</div>
+<div class="line"><a name="l13210"></a><span class="lineno">13210</span>&#160;    }</div>
+<div class="line"><a name="l13211"></a><span class="lineno">13211</span>&#160;}</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;<span class="keywordtype">size_t</span> VmaDefragmentationAlgorithm_Generic::CalcBlocksWithNonMovableCount()<span class="keyword"> const</span></div>
+<div class="line"><a name="l13214"></a><span class="lineno">13214</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l13215"></a><span class="lineno">13215</span>&#160;    <span class="keywordtype">size_t</span> result = 0;</div>
+<div class="line"><a name="l13216"></a><span class="lineno">13216</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="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">if</span>(m_Blocks[i]-&gt;m_HasNonMovableAllocations)</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;            ++result;</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;    }</div>
+<div class="line"><a name="l13223"></a><span class="lineno">13223</span>&#160;    <span class="keywordflow">return</span> result;</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; </div>
+<div class="line"><a name="l13226"></a><span class="lineno">13226</span>&#160;VkResult VmaDefragmentationAlgorithm_Generic::Defragment(</div>
+<div class="line"><a name="l13227"></a><span class="lineno">13227</span>&#160;    VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
+<div class="line"><a name="l13228"></a><span class="lineno">13228</span>&#160;    VkDeviceSize maxBytesToMove,</div>
+<div class="line"><a name="l13229"></a><span class="lineno">13229</span>&#160;    uint32_t maxAllocationsToMove)</div>
+<div class="line"><a name="l13230"></a><span class="lineno">13230</span>&#160;{</div>
+<div class="line"><a name="l13231"></a><span class="lineno">13231</span>&#160;    <span class="keywordflow">if</span>(!m_AllAllocations &amp;&amp; m_AllocationCount == 0)</div>
 <div class="line"><a name="l13232"></a><span class="lineno">13232</span>&#160;    {</div>
-<div class="line"><a name="l13233"></a><span class="lineno">13233</span>&#160;        BlockInfo* pBlockInfo = m_Blocks[blockIndex];</div>
-<div class="line"><a name="l13234"></a><span class="lineno">13234</span>&#160; </div>
-<div class="line"><a name="l13235"></a><span class="lineno">13235</span>&#160;        <span class="keywordflow">if</span>(m_AllAllocations)</div>
-<div class="line"><a name="l13236"></a><span class="lineno">13236</span>&#160;        {</div>
-<div class="line"><a name="l13237"></a><span class="lineno">13237</span>&#160;            VmaBlockMetadata_Generic* pMetadata = (VmaBlockMetadata_Generic*)pBlockInfo-&gt;m_pBlock-&gt;m_pMetadata;</div>
-<div class="line"><a name="l13238"></a><span class="lineno">13238</span>&#160;            <span class="keywordflow">for</span>(VmaSuballocationList::const_iterator it = pMetadata-&gt;m_Suballocations.begin();</div>
-<div class="line"><a name="l13239"></a><span class="lineno">13239</span>&#160;                it != pMetadata-&gt;m_Suballocations.end();</div>
-<div class="line"><a name="l13240"></a><span class="lineno">13240</span>&#160;                ++it)</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;                <span class="keywordflow">if</span>(it-&gt;type != VMA_SUBALLOCATION_TYPE_FREE)</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;                    AllocationInfo allocInfo = AllocationInfo(it-&gt;hAllocation, VMA_NULL);</div>
-<div class="line"><a name="l13245"></a><span class="lineno">13245</span>&#160;                    pBlockInfo-&gt;m_Allocations.push_back(allocInfo);</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;            }</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; </div>
-<div class="line"><a name="l13250"></a><span class="lineno">13250</span>&#160;        pBlockInfo-&gt;CalcHasNonMovableAllocations();</div>
-<div class="line"><a name="l13251"></a><span class="lineno">13251</span>&#160;        </div>
-<div class="line"><a name="l13252"></a><span class="lineno">13252</span>&#160;        <span class="comment">// This is a choice based on research.</span></div>
-<div class="line"><a name="l13253"></a><span class="lineno">13253</span>&#160;        <span class="comment">// Option 1:</span></div>
-<div class="line"><a name="l13254"></a><span class="lineno">13254</span>&#160;        pBlockInfo-&gt;SortAllocationsByOffsetDescending();</div>
-<div class="line"><a name="l13255"></a><span class="lineno">13255</span>&#160;        <span class="comment">// Option 2:</span></div>
-<div class="line"><a name="l13256"></a><span class="lineno">13256</span>&#160;        <span class="comment">//pBlockInfo-&gt;SortAllocationsBySizeDescending();</span></div>
-<div class="line"><a name="l13257"></a><span class="lineno">13257</span>&#160;    }</div>
-<div class="line"><a name="l13258"></a><span class="lineno">13258</span>&#160; </div>
-<div class="line"><a name="l13259"></a><span class="lineno">13259</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="l13260"></a><span class="lineno">13260</span>&#160;    VMA_SORT(m_Blocks.begin(), m_Blocks.end(), BlockInfoCompareMoveDestination());</div>
-<div class="line"><a name="l13261"></a><span class="lineno">13261</span>&#160; </div>
-<div class="line"><a name="l13262"></a><span class="lineno">13262</span>&#160;    <span class="comment">// This is a choice based on research.</span></div>
-<div class="line"><a name="l13263"></a><span class="lineno">13263</span>&#160;    <span class="keyword">const</span> uint32_t roundCount = 2;</div>
+<div class="line"><a name="l13233"></a><span class="lineno">13233</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l13234"></a><span class="lineno">13234</span>&#160;    }</div>
+<div class="line"><a name="l13235"></a><span class="lineno">13235</span>&#160; </div>
+<div class="line"><a name="l13236"></a><span class="lineno">13236</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_Blocks.size();</div>
+<div class="line"><a name="l13237"></a><span class="lineno">13237</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="l13238"></a><span class="lineno">13238</span>&#160;    {</div>
+<div class="line"><a name="l13239"></a><span class="lineno">13239</span>&#160;        BlockInfo* pBlockInfo = m_Blocks[blockIndex];</div>
+<div class="line"><a name="l13240"></a><span class="lineno">13240</span>&#160; </div>
+<div class="line"><a name="l13241"></a><span class="lineno">13241</span>&#160;        <span class="keywordflow">if</span>(m_AllAllocations)</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;            VmaBlockMetadata_Generic* pMetadata = (VmaBlockMetadata_Generic*)pBlockInfo-&gt;m_pBlock-&gt;m_pMetadata;</div>
+<div class="line"><a name="l13244"></a><span class="lineno">13244</span>&#160;            <span class="keywordflow">for</span>(VmaSuballocationList::const_iterator it = pMetadata-&gt;m_Suballocations.begin();</div>
+<div class="line"><a name="l13245"></a><span class="lineno">13245</span>&#160;                it != pMetadata-&gt;m_Suballocations.end();</div>
+<div class="line"><a name="l13246"></a><span class="lineno">13246</span>&#160;                ++it)</div>
+<div class="line"><a name="l13247"></a><span class="lineno">13247</span>&#160;            {</div>
+<div class="line"><a name="l13248"></a><span class="lineno">13248</span>&#160;                <span class="keywordflow">if</span>(it-&gt;type != VMA_SUBALLOCATION_TYPE_FREE)</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;                    AllocationInfo allocInfo = AllocationInfo(it-&gt;hAllocation, VMA_NULL);</div>
+<div class="line"><a name="l13251"></a><span class="lineno">13251</span>&#160;                    pBlockInfo-&gt;m_Allocations.push_back(allocInfo);</div>
+<div class="line"><a name="l13252"></a><span class="lineno">13252</span>&#160;                }</div>
+<div class="line"><a name="l13253"></a><span class="lineno">13253</span>&#160;            }</div>
+<div class="line"><a name="l13254"></a><span class="lineno">13254</span>&#160;        }</div>
+<div class="line"><a name="l13255"></a><span class="lineno">13255</span>&#160; </div>
+<div class="line"><a name="l13256"></a><span class="lineno">13256</span>&#160;        pBlockInfo-&gt;CalcHasNonMovableAllocations();</div>
+<div class="line"><a name="l13257"></a><span class="lineno">13257</span>&#160;        </div>
+<div class="line"><a name="l13258"></a><span class="lineno">13258</span>&#160;        <span class="comment">// This is a choice based on research.</span></div>
+<div class="line"><a name="l13259"></a><span class="lineno">13259</span>&#160;        <span class="comment">// Option 1:</span></div>
+<div class="line"><a name="l13260"></a><span class="lineno">13260</span>&#160;        pBlockInfo-&gt;SortAllocationsByOffsetDescending();</div>
+<div class="line"><a name="l13261"></a><span class="lineno">13261</span>&#160;        <span class="comment">// Option 2:</span></div>
+<div class="line"><a name="l13262"></a><span class="lineno">13262</span>&#160;        <span class="comment">//pBlockInfo-&gt;SortAllocationsBySizeDescending();</span></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; </div>
-<div class="line"><a name="l13265"></a><span class="lineno">13265</span>&#160;    <span class="comment">// Execute defragmentation rounds (the main part).</span></div>
-<div class="line"><a name="l13266"></a><span class="lineno">13266</span>&#160;    VkResult result = VK_SUCCESS;</div>
-<div class="line"><a name="l13267"></a><span class="lineno">13267</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="l13268"></a><span class="lineno">13268</span>&#160;    {</div>
-<div class="line"><a name="l13269"></a><span class="lineno">13269</span>&#160;        result = DefragmentRound(moves, maxBytesToMove, maxAllocationsToMove);</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; </div>
-<div class="line"><a name="l13272"></a><span class="lineno">13272</span>&#160;    <span class="keywordflow">return</span> result;</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; </div>
-<div class="line"><a name="l13275"></a><span class="lineno">13275</span>&#160;<span class="keywordtype">bool</span> VmaDefragmentationAlgorithm_Generic::MoveMakesSense(</div>
-<div class="line"><a name="l13276"></a><span class="lineno">13276</span>&#160;        <span class="keywordtype">size_t</span> dstBlockIndex, VkDeviceSize dstOffset,</div>
-<div class="line"><a name="l13277"></a><span class="lineno">13277</span>&#160;        <span class="keywordtype">size_t</span> srcBlockIndex, VkDeviceSize srcOffset)</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>(dstBlockIndex &lt; srcBlockIndex)</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="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l13282"></a><span class="lineno">13282</span>&#160;    }</div>
-<div class="line"><a name="l13283"></a><span class="lineno">13283</span>&#160;    <span class="keywordflow">if</span>(dstBlockIndex &gt; srcBlockIndex)</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="keywordflow">return</span> <span class="keyword">false</span>;</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;    <span class="keywordflow">if</span>(dstOffset &lt; srcOffset)</div>
-<div class="line"><a name="l13288"></a><span class="lineno">13288</span>&#160;    {</div>
-<div class="line"><a name="l13289"></a><span class="lineno">13289</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</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">return</span> <span class="keyword">false</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; </div>
-<div class="line"><a name="l13295"></a><span class="lineno">13295</span>&#160;<span class="comment">// VmaDefragmentationAlgorithm_Fast</span></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;VmaDefragmentationAlgorithm_Fast::VmaDefragmentationAlgorithm_Fast(</div>
-<div class="line"><a name="l13298"></a><span class="lineno">13298</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
-<div class="line"><a name="l13299"></a><span class="lineno">13299</span>&#160;    VmaBlockVector* pBlockVector,</div>
-<div class="line"><a name="l13300"></a><span class="lineno">13300</span>&#160;    uint32_t currentFrameIndex,</div>
-<div class="line"><a name="l13301"></a><span class="lineno">13301</span>&#160;    <span class="keywordtype">bool</span> overlappingMoveSupported) :</div>
-<div class="line"><a name="l13302"></a><span class="lineno">13302</span>&#160;    VmaDefragmentationAlgorithm(hAllocator, pBlockVector, currentFrameIndex),</div>
-<div class="line"><a name="l13303"></a><span class="lineno">13303</span>&#160;    m_OverlappingMoveSupported(overlappingMoveSupported),</div>
-<div class="line"><a name="l13304"></a><span class="lineno">13304</span>&#160;    m_AllocationCount(0),</div>
-<div class="line"><a name="l13305"></a><span class="lineno">13305</span>&#160;    m_AllAllocations(false),</div>
-<div class="line"><a name="l13306"></a><span class="lineno">13306</span>&#160;    m_BytesMoved(0),</div>
-<div class="line"><a name="l13307"></a><span class="lineno">13307</span>&#160;    m_AllocationsMoved(0),</div>
-<div class="line"><a name="l13308"></a><span class="lineno">13308</span>&#160;    m_BlockInfos(VmaStlAllocator&lt;BlockInfo&gt;(hAllocator-&gt;GetAllocationCallbacks()))</div>
-<div class="line"><a name="l13309"></a><span class="lineno">13309</span>&#160;{</div>
-<div class="line"><a name="l13310"></a><span class="lineno">13310</span>&#160;    VMA_ASSERT(VMA_DEBUG_MARGIN == 0);</div>
-<div class="line"><a name="l13311"></a><span class="lineno">13311</span>&#160; </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; </div>
-<div class="line"><a name="l13314"></a><span class="lineno">13314</span>&#160;VmaDefragmentationAlgorithm_Fast::~VmaDefragmentationAlgorithm_Fast()</div>
+<div class="line"><a name="l13265"></a><span class="lineno">13265</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="l13266"></a><span class="lineno">13266</span>&#160;    VMA_SORT(m_Blocks.begin(), m_Blocks.end(), BlockInfoCompareMoveDestination());</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;    <span class="comment">// This is a choice based on research.</span></div>
+<div class="line"><a name="l13269"></a><span class="lineno">13269</span>&#160;    <span class="keyword">const</span> uint32_t roundCount = 2;</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">// Execute defragmentation rounds (the main part).</span></div>
+<div class="line"><a name="l13272"></a><span class="lineno">13272</span>&#160;    VkResult result = VK_SUCCESS;</div>
+<div class="line"><a name="l13273"></a><span class="lineno">13273</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="l13274"></a><span class="lineno">13274</span>&#160;    {</div>
+<div class="line"><a name="l13275"></a><span class="lineno">13275</span>&#160;        result = DefragmentRound(moves, maxBytesToMove, maxAllocationsToMove);</div>
+<div class="line"><a name="l13276"></a><span class="lineno">13276</span>&#160;    }</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">return</span> result;</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; </div>
+<div class="line"><a name="l13281"></a><span class="lineno">13281</span>&#160;<span class="keywordtype">bool</span> VmaDefragmentationAlgorithm_Generic::MoveMakesSense(</div>
+<div class="line"><a name="l13282"></a><span class="lineno">13282</span>&#160;        <span class="keywordtype">size_t</span> dstBlockIndex, VkDeviceSize dstOffset,</div>
+<div class="line"><a name="l13283"></a><span class="lineno">13283</span>&#160;        <span class="keywordtype">size_t</span> srcBlockIndex, VkDeviceSize srcOffset)</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="keywordflow">if</span>(dstBlockIndex &lt; srcBlockIndex)</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;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l13288"></a><span class="lineno">13288</span>&#160;    }</div>
+<div class="line"><a name="l13289"></a><span class="lineno">13289</span>&#160;    <span class="keywordflow">if</span>(dstBlockIndex &gt; srcBlockIndex)</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">return</span> <span class="keyword">false</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">if</span>(dstOffset &lt; srcOffset)</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;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</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="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l13298"></a><span class="lineno">13298</span>&#160;}</div>
+<div class="line"><a name="l13299"></a><span class="lineno">13299</span>&#160; </div>
+<div class="line"><a name="l13301"></a><span class="lineno">13301</span>&#160;<span class="comment">// VmaDefragmentationAlgorithm_Fast</span></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;VmaDefragmentationAlgorithm_Fast::VmaDefragmentationAlgorithm_Fast(</div>
+<div class="line"><a name="l13304"></a><span class="lineno">13304</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
+<div class="line"><a name="l13305"></a><span class="lineno">13305</span>&#160;    VmaBlockVector* pBlockVector,</div>
+<div class="line"><a name="l13306"></a><span class="lineno">13306</span>&#160;    uint32_t currentFrameIndex,</div>
+<div class="line"><a name="l13307"></a><span class="lineno">13307</span>&#160;    <span class="keywordtype">bool</span> overlappingMoveSupported) :</div>
+<div class="line"><a name="l13308"></a><span class="lineno">13308</span>&#160;    VmaDefragmentationAlgorithm(hAllocator, pBlockVector, currentFrameIndex),</div>
+<div class="line"><a name="l13309"></a><span class="lineno">13309</span>&#160;    m_OverlappingMoveSupported(overlappingMoveSupported),</div>
+<div class="line"><a name="l13310"></a><span class="lineno">13310</span>&#160;    m_AllocationCount(0),</div>
+<div class="line"><a name="l13311"></a><span class="lineno">13311</span>&#160;    m_AllAllocations(false),</div>
+<div class="line"><a name="l13312"></a><span class="lineno">13312</span>&#160;    m_BytesMoved(0),</div>
+<div class="line"><a name="l13313"></a><span class="lineno">13313</span>&#160;    m_AllocationsMoved(0),</div>
+<div class="line"><a name="l13314"></a><span class="lineno">13314</span>&#160;    m_BlockInfos(VmaStlAllocator&lt;BlockInfo&gt;(hAllocator-&gt;GetAllocationCallbacks()))</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;}</div>
+<div class="line"><a name="l13316"></a><span class="lineno">13316</span>&#160;    VMA_ASSERT(VMA_DEBUG_MARGIN == 0);</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;VkResult VmaDefragmentationAlgorithm_Fast::Defragment(</div>
-<div class="line"><a name="l13319"></a><span class="lineno">13319</span>&#160;    VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
-<div class="line"><a name="l13320"></a><span class="lineno">13320</span>&#160;    VkDeviceSize maxBytesToMove,</div>
-<div class="line"><a name="l13321"></a><span class="lineno">13321</span>&#160;    uint32_t maxAllocationsToMove)</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;    VMA_ASSERT(m_AllAllocations || m_pBlockVector-&gt;CalcAllocationCount() == m_AllocationCount);</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;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_pBlockVector-&gt;GetBlockCount();</div>
-<div class="line"><a name="l13326"></a><span class="lineno">13326</span>&#160;    <span class="keywordflow">if</span>(blockCount == 0 || maxBytesToMove == 0 || maxAllocationsToMove == 0)</div>
-<div class="line"><a name="l13327"></a><span class="lineno">13327</span>&#160;    {</div>
-<div class="line"><a name="l13328"></a><span class="lineno">13328</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l13329"></a><span class="lineno">13329</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;VmaDefragmentationAlgorithm_Fast::~VmaDefragmentationAlgorithm_Fast()</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;}</div>
+<div class="line"><a name="l13323"></a><span class="lineno">13323</span>&#160; </div>
+<div class="line"><a name="l13324"></a><span class="lineno">13324</span>&#160;VkResult VmaDefragmentationAlgorithm_Fast::Defragment(</div>
+<div class="line"><a name="l13325"></a><span class="lineno">13325</span>&#160;    VmaVector&lt; VmaDefragmentationMove, VmaStlAllocator&lt;VmaDefragmentationMove&gt; &gt;&amp; moves,</div>
+<div class="line"><a name="l13326"></a><span class="lineno">13326</span>&#160;    VkDeviceSize maxBytesToMove,</div>
+<div class="line"><a name="l13327"></a><span class="lineno">13327</span>&#160;    uint32_t maxAllocationsToMove)</div>
+<div class="line"><a name="l13328"></a><span class="lineno">13328</span>&#160;{</div>
+<div class="line"><a name="l13329"></a><span class="lineno">13329</span>&#160;    VMA_ASSERT(m_AllAllocations || m_pBlockVector-&gt;CalcAllocationCount() == m_AllocationCount);</div>
 <div class="line"><a name="l13330"></a><span class="lineno">13330</span>&#160; </div>
-<div class="line"><a name="l13331"></a><span class="lineno">13331</span>&#160;    PreprocessMetadata();</div>
-<div class="line"><a name="l13332"></a><span class="lineno">13332</span>&#160; </div>
-<div class="line"><a name="l13333"></a><span class="lineno">13333</span>&#160;    <span class="comment">// Sort blocks in order from most destination.</span></div>
-<div class="line"><a name="l13334"></a><span class="lineno">13334</span>&#160; </div>
-<div class="line"><a name="l13335"></a><span class="lineno">13335</span>&#160;    m_BlockInfos.resize(blockCount);</div>
-<div class="line"><a name="l13336"></a><span class="lineno">13336</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="l13337"></a><span class="lineno">13337</span>&#160;    {</div>
-<div class="line"><a name="l13338"></a><span class="lineno">13338</span>&#160;        m_BlockInfos[i].origBlockIndex = i;</div>
-<div class="line"><a name="l13339"></a><span class="lineno">13339</span>&#160;    }</div>
+<div class="line"><a name="l13331"></a><span class="lineno">13331</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_pBlockVector-&gt;GetBlockCount();</div>
+<div class="line"><a name="l13332"></a><span class="lineno">13332</span>&#160;    <span class="keywordflow">if</span>(blockCount == 0 || maxBytesToMove == 0 || maxAllocationsToMove == 0)</div>
+<div class="line"><a name="l13333"></a><span class="lineno">13333</span>&#160;    {</div>
+<div class="line"><a name="l13334"></a><span class="lineno">13334</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l13335"></a><span class="lineno">13335</span>&#160;    }</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;    PreprocessMetadata();</div>
+<div class="line"><a name="l13338"></a><span class="lineno">13338</span>&#160; </div>
+<div class="line"><a name="l13339"></a><span class="lineno">13339</span>&#160;    <span class="comment">// Sort blocks in order from most destination.</span></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;    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="l13342"></a><span class="lineno">13342</span>&#160;        <span class="keywordflow">return</span> m_pBlockVector-&gt;GetBlock(lhs.origBlockIndex)-&gt;m_pMetadata-&gt;GetSumFreeSize() &lt;</div>
-<div class="line"><a name="l13343"></a><span class="lineno">13343</span>&#160;            m_pBlockVector-&gt;GetBlock(rhs.origBlockIndex)-&gt;m_pMetadata-&gt;GetSumFreeSize();</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;    <span class="comment">// THE MAIN ALGORITHM</span></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;    FreeSpaceDatabase freeSpaceDb;</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="keywordtype">size_t</span> dstBlockInfoIndex = 0;</div>
-<div class="line"><a name="l13351"></a><span class="lineno">13351</span>&#160;    <span class="keywordtype">size_t</span> dstOrigBlockIndex = m_BlockInfos[dstBlockInfoIndex].origBlockIndex;</div>
-<div class="line"><a name="l13352"></a><span class="lineno">13352</span>&#160;    VmaDeviceMemoryBlock* pDstBlock = m_pBlockVector-&gt;GetBlock(dstOrigBlockIndex);</div>
-<div class="line"><a name="l13353"></a><span class="lineno">13353</span>&#160;    VmaBlockMetadata_Generic* pDstMetadata = (VmaBlockMetadata_Generic*)pDstBlock-&gt;m_pMetadata;</div>
-<div class="line"><a name="l13354"></a><span class="lineno">13354</span>&#160;    VkDeviceSize dstBlockSize = pDstMetadata-&gt;GetSize();</div>
-<div class="line"><a name="l13355"></a><span class="lineno">13355</span>&#160;    VkDeviceSize dstOffset = 0;</div>
-<div class="line"><a name="l13356"></a><span class="lineno">13356</span>&#160; </div>
-<div class="line"><a name="l13357"></a><span class="lineno">13357</span>&#160;    <span class="keywordtype">bool</span> end = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l13358"></a><span class="lineno">13358</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="l13359"></a><span class="lineno">13359</span>&#160;    {</div>
-<div class="line"><a name="l13360"></a><span class="lineno">13360</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> srcOrigBlockIndex = m_BlockInfos[srcBlockInfoIndex].origBlockIndex;</div>
-<div class="line"><a name="l13361"></a><span class="lineno">13361</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pSrcBlock = m_pBlockVector-&gt;GetBlock(srcOrigBlockIndex);</div>
-<div class="line"><a name="l13362"></a><span class="lineno">13362</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pSrcMetadata = (VmaBlockMetadata_Generic*)pSrcBlock-&gt;m_pMetadata;</div>
-<div class="line"><a name="l13363"></a><span class="lineno">13363</span>&#160;        <span class="keywordflow">for</span>(VmaSuballocationList::iterator srcSuballocIt = pSrcMetadata-&gt;m_Suballocations.begin();</div>
-<div class="line"><a name="l13364"></a><span class="lineno">13364</span>&#160;            !end &amp;&amp; srcSuballocIt != pSrcMetadata-&gt;m_Suballocations.end(); )</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;            VmaAllocation_T* <span class="keyword">const</span> pAlloc = srcSuballocIt-&gt;hAllocation;</div>
-<div class="line"><a name="l13367"></a><span class="lineno">13367</span>&#160;            <span class="keyword">const</span> VkDeviceSize srcAllocAlignment = pAlloc-&gt;GetAlignment();</div>
-<div class="line"><a name="l13368"></a><span class="lineno">13368</span>&#160;            <span class="keyword">const</span> VkDeviceSize srcAllocSize = srcSuballocIt-&gt;size;</div>
-<div class="line"><a name="l13369"></a><span class="lineno">13369</span>&#160;            <span class="keywordflow">if</span>(m_AllocationsMoved == maxAllocationsToMove ||</div>
-<div class="line"><a name="l13370"></a><span class="lineno">13370</span>&#160;                m_BytesMoved + srcAllocSize &gt; maxBytesToMove)</div>
-<div class="line"><a name="l13371"></a><span class="lineno">13371</span>&#160;            {</div>
-<div class="line"><a name="l13372"></a><span class="lineno">13372</span>&#160;                end = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l13373"></a><span class="lineno">13373</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l13374"></a><span class="lineno">13374</span>&#160;            }</div>
-<div class="line"><a name="l13375"></a><span class="lineno">13375</span>&#160;            <span class="keyword">const</span> VkDeviceSize srcAllocOffset = srcSuballocIt-&gt;offset;</div>
-<div class="line"><a name="l13376"></a><span class="lineno">13376</span>&#160; </div>
-<div class="line"><a name="l13377"></a><span class="lineno">13377</span>&#160;            <span class="comment">// Try to place it in one of free spaces from the database.</span></div>
-<div class="line"><a name="l13378"></a><span class="lineno">13378</span>&#160;            <span class="keywordtype">size_t</span> freeSpaceInfoIndex;</div>
-<div class="line"><a name="l13379"></a><span class="lineno">13379</span>&#160;            VkDeviceSize dstAllocOffset;</div>
-<div class="line"><a name="l13380"></a><span class="lineno">13380</span>&#160;            <span class="keywordflow">if</span>(freeSpaceDb.Fetch(srcAllocAlignment, srcAllocSize,</div>
-<div class="line"><a name="l13381"></a><span class="lineno">13381</span>&#160;                freeSpaceInfoIndex, dstAllocOffset))</div>
-<div class="line"><a name="l13382"></a><span class="lineno">13382</span>&#160;            {</div>
-<div class="line"><a name="l13383"></a><span class="lineno">13383</span>&#160;                <span class="keywordtype">size_t</span> freeSpaceOrigBlockIndex = m_BlockInfos[freeSpaceInfoIndex].origBlockIndex;</div>
-<div class="line"><a name="l13384"></a><span class="lineno">13384</span>&#160;                VmaDeviceMemoryBlock* pFreeSpaceBlock = m_pBlockVector-&gt;GetBlock(freeSpaceOrigBlockIndex);</div>
-<div class="line"><a name="l13385"></a><span class="lineno">13385</span>&#160;                VmaBlockMetadata_Generic* pFreeSpaceMetadata = (VmaBlockMetadata_Generic*)pFreeSpaceBlock-&gt;m_pMetadata;</div>
-<div class="line"><a name="l13386"></a><span class="lineno">13386</span>&#160; </div>
-<div class="line"><a name="l13387"></a><span class="lineno">13387</span>&#160;                <span class="comment">// Same block</span></div>
-<div class="line"><a name="l13388"></a><span class="lineno">13388</span>&#160;                <span class="keywordflow">if</span>(freeSpaceInfoIndex == srcBlockInfoIndex)</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;                    VMA_ASSERT(dstAllocOffset &lt;= srcAllocOffset);</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;                    <span class="comment">// MOVE OPTION 1: Move the allocation inside the same block by decreasing offset.</span></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;                    VmaSuballocation suballoc = *srcSuballocIt;</div>
-<div class="line"><a name="l13395"></a><span class="lineno">13395</span>&#160;                    suballoc.offset = dstAllocOffset;</div>
-<div class="line"><a name="l13396"></a><span class="lineno">13396</span>&#160;                    suballoc.hAllocation-&gt;ChangeOffset(dstAllocOffset);</div>
-<div class="line"><a name="l13397"></a><span class="lineno">13397</span>&#160;                    m_BytesMoved += srcAllocSize;</div>
-<div class="line"><a name="l13398"></a><span class="lineno">13398</span>&#160;                    ++m_AllocationsMoved;</div>
-<div class="line"><a name="l13399"></a><span class="lineno">13399</span>&#160;                    </div>
-<div class="line"><a name="l13400"></a><span class="lineno">13400</span>&#160;                    VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;</div>
-<div class="line"><a name="l13401"></a><span class="lineno">13401</span>&#160;                    ++nextSuballocIt;</div>
-<div class="line"><a name="l13402"></a><span class="lineno">13402</span>&#160;                    pSrcMetadata-&gt;m_Suballocations.erase(srcSuballocIt);</div>
-<div class="line"><a name="l13403"></a><span class="lineno">13403</span>&#160;                    srcSuballocIt = nextSuballocIt;</div>
-<div class="line"><a name="l13404"></a><span class="lineno">13404</span>&#160; </div>
-<div class="line"><a name="l13405"></a><span class="lineno">13405</span>&#160;                    InsertSuballoc(pFreeSpaceMetadata, suballoc);</div>
-<div class="line"><a name="l13406"></a><span class="lineno">13406</span>&#160; </div>
-<div class="line"><a name="l13407"></a><span class="lineno">13407</span>&#160;                    VmaDefragmentationMove move = {</div>
-<div class="line"><a name="l13408"></a><span class="lineno">13408</span>&#160;                        srcOrigBlockIndex, freeSpaceOrigBlockIndex,</div>
-<div class="line"><a name="l13409"></a><span class="lineno">13409</span>&#160;                        srcAllocOffset, dstAllocOffset,</div>
-<div class="line"><a name="l13410"></a><span class="lineno">13410</span>&#160;                        srcAllocSize };</div>
-<div class="line"><a name="l13411"></a><span class="lineno">13411</span>&#160;                    moves.push_back(move);</div>
-<div class="line"><a name="l13412"></a><span class="lineno">13412</span>&#160;                }</div>
-<div class="line"><a name="l13413"></a><span class="lineno">13413</span>&#160;                <span class="comment">// Different block</span></div>
-<div class="line"><a name="l13414"></a><span class="lineno">13414</span>&#160;                <span class="keywordflow">else</span></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="comment">// MOVE OPTION 2: Move the allocation to a different block.</span></div>
-<div class="line"><a name="l13417"></a><span class="lineno">13417</span>&#160; </div>
-<div class="line"><a name="l13418"></a><span class="lineno">13418</span>&#160;                    VMA_ASSERT(freeSpaceInfoIndex &lt; srcBlockInfoIndex);</div>
-<div class="line"><a name="l13419"></a><span class="lineno">13419</span>&#160; </div>
-<div class="line"><a name="l13420"></a><span class="lineno">13420</span>&#160;                    VmaSuballocation suballoc = *srcSuballocIt;</div>
-<div class="line"><a name="l13421"></a><span class="lineno">13421</span>&#160;                    suballoc.offset = dstAllocOffset;</div>
-<div class="line"><a name="l13422"></a><span class="lineno">13422</span>&#160;                    suballoc.hAllocation-&gt;ChangeBlockAllocation(m_hAllocator, pFreeSpaceBlock, dstAllocOffset);</div>
-<div class="line"><a name="l13423"></a><span class="lineno">13423</span>&#160;                    m_BytesMoved += srcAllocSize;</div>
-<div class="line"><a name="l13424"></a><span class="lineno">13424</span>&#160;                    ++m_AllocationsMoved;</div>
+<div class="line"><a name="l13341"></a><span class="lineno">13341</span>&#160;    m_BlockInfos.resize(blockCount);</div>
+<div class="line"><a name="l13342"></a><span class="lineno">13342</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="l13343"></a><span class="lineno">13343</span>&#160;    {</div>
+<div class="line"><a name="l13344"></a><span class="lineno">13344</span>&#160;        m_BlockInfos[i].origBlockIndex = i;</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;    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="l13348"></a><span class="lineno">13348</span>&#160;        <span class="keywordflow">return</span> m_pBlockVector-&gt;GetBlock(lhs.origBlockIndex)-&gt;m_pMetadata-&gt;GetSumFreeSize() &lt;</div>
+<div class="line"><a name="l13349"></a><span class="lineno">13349</span>&#160;            m_pBlockVector-&gt;GetBlock(rhs.origBlockIndex)-&gt;m_pMetadata-&gt;GetSumFreeSize();</div>
+<div class="line"><a name="l13350"></a><span class="lineno">13350</span>&#160;    });</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;    <span class="comment">// THE MAIN ALGORITHM</span></div>
+<div class="line"><a name="l13353"></a><span class="lineno">13353</span>&#160; </div>
+<div class="line"><a name="l13354"></a><span class="lineno">13354</span>&#160;    FreeSpaceDatabase freeSpaceDb;</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;    <span class="keywordtype">size_t</span> dstBlockInfoIndex = 0;</div>
+<div class="line"><a name="l13357"></a><span class="lineno">13357</span>&#160;    <span class="keywordtype">size_t</span> dstOrigBlockIndex = m_BlockInfos[dstBlockInfoIndex].origBlockIndex;</div>
+<div class="line"><a name="l13358"></a><span class="lineno">13358</span>&#160;    VmaDeviceMemoryBlock* pDstBlock = m_pBlockVector-&gt;GetBlock(dstOrigBlockIndex);</div>
+<div class="line"><a name="l13359"></a><span class="lineno">13359</span>&#160;    VmaBlockMetadata_Generic* pDstMetadata = (VmaBlockMetadata_Generic*)pDstBlock-&gt;m_pMetadata;</div>
+<div class="line"><a name="l13360"></a><span class="lineno">13360</span>&#160;    VkDeviceSize dstBlockSize = pDstMetadata-&gt;GetSize();</div>
+<div class="line"><a name="l13361"></a><span class="lineno">13361</span>&#160;    VkDeviceSize dstOffset = 0;</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="keywordtype">bool</span> end = <span class="keyword">false</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> srcBlockInfoIndex = 0; !end &amp;&amp; srcBlockInfoIndex &lt; blockCount; ++srcBlockInfoIndex)</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;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> srcOrigBlockIndex = m_BlockInfos[srcBlockInfoIndex].origBlockIndex;</div>
+<div class="line"><a name="l13367"></a><span class="lineno">13367</span>&#160;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pSrcBlock = m_pBlockVector-&gt;GetBlock(srcOrigBlockIndex);</div>
+<div class="line"><a name="l13368"></a><span class="lineno">13368</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pSrcMetadata = (VmaBlockMetadata_Generic*)pSrcBlock-&gt;m_pMetadata;</div>
+<div class="line"><a name="l13369"></a><span class="lineno">13369</span>&#160;        <span class="keywordflow">for</span>(VmaSuballocationList::iterator srcSuballocIt = pSrcMetadata-&gt;m_Suballocations.begin();</div>
+<div class="line"><a name="l13370"></a><span class="lineno">13370</span>&#160;            !end &amp;&amp; srcSuballocIt != pSrcMetadata-&gt;m_Suballocations.end(); )</div>
+<div class="line"><a name="l13371"></a><span class="lineno">13371</span>&#160;        {</div>
+<div class="line"><a name="l13372"></a><span class="lineno">13372</span>&#160;            VmaAllocation_T* <span class="keyword">const</span> pAlloc = srcSuballocIt-&gt;hAllocation;</div>
+<div class="line"><a name="l13373"></a><span class="lineno">13373</span>&#160;            <span class="keyword">const</span> VkDeviceSize srcAllocAlignment = pAlloc-&gt;GetAlignment();</div>
+<div class="line"><a name="l13374"></a><span class="lineno">13374</span>&#160;            <span class="keyword">const</span> VkDeviceSize srcAllocSize = srcSuballocIt-&gt;size;</div>
+<div class="line"><a name="l13375"></a><span class="lineno">13375</span>&#160;            <span class="keywordflow">if</span>(m_AllocationsMoved == maxAllocationsToMove ||</div>
+<div class="line"><a name="l13376"></a><span class="lineno">13376</span>&#160;                m_BytesMoved + srcAllocSize &gt; maxBytesToMove)</div>
+<div class="line"><a name="l13377"></a><span class="lineno">13377</span>&#160;            {</div>
+<div class="line"><a name="l13378"></a><span class="lineno">13378</span>&#160;                end = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l13379"></a><span class="lineno">13379</span>&#160;                <span class="keywordflow">break</span>;</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 srcAllocOffset = srcSuballocIt-&gt;offset;</div>
+<div class="line"><a name="l13382"></a><span class="lineno">13382</span>&#160; </div>
+<div class="line"><a name="l13383"></a><span class="lineno">13383</span>&#160;            <span class="comment">// Try to place it in one of free spaces from the database.</span></div>
+<div class="line"><a name="l13384"></a><span class="lineno">13384</span>&#160;            <span class="keywordtype">size_t</span> freeSpaceInfoIndex;</div>
+<div class="line"><a name="l13385"></a><span class="lineno">13385</span>&#160;            VkDeviceSize dstAllocOffset;</div>
+<div class="line"><a name="l13386"></a><span class="lineno">13386</span>&#160;            <span class="keywordflow">if</span>(freeSpaceDb.Fetch(srcAllocAlignment, srcAllocSize,</div>
+<div class="line"><a name="l13387"></a><span class="lineno">13387</span>&#160;                freeSpaceInfoIndex, dstAllocOffset))</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="keywordtype">size_t</span> freeSpaceOrigBlockIndex = m_BlockInfos[freeSpaceInfoIndex].origBlockIndex;</div>
+<div class="line"><a name="l13390"></a><span class="lineno">13390</span>&#160;                VmaDeviceMemoryBlock* pFreeSpaceBlock = m_pBlockVector-&gt;GetBlock(freeSpaceOrigBlockIndex);</div>
+<div class="line"><a name="l13391"></a><span class="lineno">13391</span>&#160;                VmaBlockMetadata_Generic* pFreeSpaceMetadata = (VmaBlockMetadata_Generic*)pFreeSpaceBlock-&gt;m_pMetadata;</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;                <span class="comment">// Same block</span></div>
+<div class="line"><a name="l13394"></a><span class="lineno">13394</span>&#160;                <span class="keywordflow">if</span>(freeSpaceInfoIndex == srcBlockInfoIndex)</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;                    VMA_ASSERT(dstAllocOffset &lt;= srcAllocOffset);</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">// MOVE OPTION 1: Move the allocation inside the same block by decreasing offset.</span></div>
+<div class="line"><a name="l13399"></a><span class="lineno">13399</span>&#160; </div>
+<div class="line"><a name="l13400"></a><span class="lineno">13400</span>&#160;                    VmaSuballocation suballoc = *srcSuballocIt;</div>
+<div class="line"><a name="l13401"></a><span class="lineno">13401</span>&#160;                    suballoc.offset = dstAllocOffset;</div>
+<div class="line"><a name="l13402"></a><span class="lineno">13402</span>&#160;                    suballoc.hAllocation-&gt;ChangeOffset(dstAllocOffset);</div>
+<div class="line"><a name="l13403"></a><span class="lineno">13403</span>&#160;                    m_BytesMoved += srcAllocSize;</div>
+<div class="line"><a name="l13404"></a><span class="lineno">13404</span>&#160;                    ++m_AllocationsMoved;</div>
+<div class="line"><a name="l13405"></a><span class="lineno">13405</span>&#160;                    </div>
+<div class="line"><a name="l13406"></a><span class="lineno">13406</span>&#160;                    VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;</div>
+<div class="line"><a name="l13407"></a><span class="lineno">13407</span>&#160;                    ++nextSuballocIt;</div>
+<div class="line"><a name="l13408"></a><span class="lineno">13408</span>&#160;                    pSrcMetadata-&gt;m_Suballocations.erase(srcSuballocIt);</div>
+<div class="line"><a name="l13409"></a><span class="lineno">13409</span>&#160;                    srcSuballocIt = nextSuballocIt;</div>
+<div class="line"><a name="l13410"></a><span class="lineno">13410</span>&#160; </div>
+<div class="line"><a name="l13411"></a><span class="lineno">13411</span>&#160;                    InsertSuballoc(pFreeSpaceMetadata, suballoc);</div>
+<div class="line"><a name="l13412"></a><span class="lineno">13412</span>&#160; </div>
+<div class="line"><a name="l13413"></a><span class="lineno">13413</span>&#160;                    VmaDefragmentationMove move = {</div>
+<div class="line"><a name="l13414"></a><span class="lineno">13414</span>&#160;                        srcOrigBlockIndex, freeSpaceOrigBlockIndex,</div>
+<div class="line"><a name="l13415"></a><span class="lineno">13415</span>&#160;                        srcAllocOffset, dstAllocOffset,</div>
+<div class="line"><a name="l13416"></a><span class="lineno">13416</span>&#160;                        srcAllocSize };</div>
+<div class="line"><a name="l13417"></a><span class="lineno">13417</span>&#160;                    moves.push_back(move);</div>
+<div class="line"><a name="l13418"></a><span class="lineno">13418</span>&#160;                }</div>
+<div class="line"><a name="l13419"></a><span class="lineno">13419</span>&#160;                <span class="comment">// Different block</span></div>
+<div class="line"><a name="l13420"></a><span class="lineno">13420</span>&#160;                <span class="keywordflow">else</span></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;                    <span class="comment">// MOVE OPTION 2: Move the allocation to a different block.</span></div>
+<div class="line"><a name="l13423"></a><span class="lineno">13423</span>&#160; </div>
+<div class="line"><a name="l13424"></a><span class="lineno">13424</span>&#160;                    VMA_ASSERT(freeSpaceInfoIndex &lt; srcBlockInfoIndex);</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;                    VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;</div>
-<div class="line"><a name="l13427"></a><span class="lineno">13427</span>&#160;                    ++nextSuballocIt;</div>
-<div class="line"><a name="l13428"></a><span class="lineno">13428</span>&#160;                    pSrcMetadata-&gt;m_Suballocations.erase(srcSuballocIt);</div>
-<div class="line"><a name="l13429"></a><span class="lineno">13429</span>&#160;                    srcSuballocIt = nextSuballocIt;</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;                    InsertSuballoc(pFreeSpaceMetadata, suballoc);</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;                    VmaDefragmentationMove move = {</div>
-<div class="line"><a name="l13434"></a><span class="lineno">13434</span>&#160;                        srcOrigBlockIndex, freeSpaceOrigBlockIndex,</div>
-<div class="line"><a name="l13435"></a><span class="lineno">13435</span>&#160;                        srcAllocOffset, dstAllocOffset,</div>
-<div class="line"><a name="l13436"></a><span class="lineno">13436</span>&#160;                        srcAllocSize };</div>
-<div class="line"><a name="l13437"></a><span class="lineno">13437</span>&#160;                    moves.push_back(move);</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;            }</div>
-<div class="line"><a name="l13440"></a><span class="lineno">13440</span>&#160;            <span class="keywordflow">else</span></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;                dstAllocOffset = VmaAlignUp(dstOffset, srcAllocAlignment);</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;                <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="l13445"></a><span class="lineno">13445</span>&#160;                <span class="keywordflow">while</span>(dstBlockInfoIndex &lt; srcBlockInfoIndex &amp;&amp;</div>
-<div class="line"><a name="l13446"></a><span class="lineno">13446</span>&#160;                    dstAllocOffset + srcAllocSize &gt; dstBlockSize)</div>
-<div class="line"><a name="l13447"></a><span class="lineno">13447</span>&#160;                {</div>
-<div class="line"><a name="l13448"></a><span class="lineno">13448</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="l13449"></a><span class="lineno">13449</span>&#160;                    freeSpaceDb.Register(dstBlockInfoIndex, dstOffset, dstBlockSize - dstOffset);</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;                    ++dstBlockInfoIndex;</div>
-<div class="line"><a name="l13452"></a><span class="lineno">13452</span>&#160;                    dstOrigBlockIndex = m_BlockInfos[dstBlockInfoIndex].origBlockIndex;</div>
-<div class="line"><a name="l13453"></a><span class="lineno">13453</span>&#160;                    pDstBlock = m_pBlockVector-&gt;GetBlock(dstOrigBlockIndex);</div>
-<div class="line"><a name="l13454"></a><span class="lineno">13454</span>&#160;                    pDstMetadata = (VmaBlockMetadata_Generic*)pDstBlock-&gt;m_pMetadata;</div>
-<div class="line"><a name="l13455"></a><span class="lineno">13455</span>&#160;                    dstBlockSize = pDstMetadata-&gt;GetSize();</div>
-<div class="line"><a name="l13456"></a><span class="lineno">13456</span>&#160;                    dstOffset = 0;</div>
-<div class="line"><a name="l13457"></a><span class="lineno">13457</span>&#160;                    dstAllocOffset = 0;</div>
-<div class="line"><a name="l13458"></a><span class="lineno">13458</span>&#160;                }</div>
-<div class="line"><a name="l13459"></a><span class="lineno">13459</span>&#160; </div>
-<div class="line"><a name="l13460"></a><span class="lineno">13460</span>&#160;                <span class="comment">// Same block</span></div>
-<div class="line"><a name="l13461"></a><span class="lineno">13461</span>&#160;                <span class="keywordflow">if</span>(dstBlockInfoIndex == srcBlockInfoIndex)</div>
-<div class="line"><a name="l13462"></a><span class="lineno">13462</span>&#160;                {</div>
-<div class="line"><a name="l13463"></a><span class="lineno">13463</span>&#160;                    VMA_ASSERT(dstAllocOffset &lt;= srcAllocOffset);</div>
-<div class="line"><a name="l13464"></a><span class="lineno">13464</span>&#160; </div>
-<div class="line"><a name="l13465"></a><span class="lineno">13465</span>&#160;                    <span class="keyword">const</span> <span class="keywordtype">bool</span> overlap = dstAllocOffset + srcAllocSize &gt; srcAllocOffset;</div>
-<div class="line"><a name="l13466"></a><span class="lineno">13466</span>&#160; </div>
-<div class="line"><a name="l13467"></a><span class="lineno">13467</span>&#160;                    <span class="keywordtype">bool</span> skipOver = overlap;</div>
-<div class="line"><a name="l13468"></a><span class="lineno">13468</span>&#160;                    <span class="keywordflow">if</span>(overlap &amp;&amp; m_OverlappingMoveSupported &amp;&amp; dstAllocOffset &lt; srcAllocOffset)</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;                        <span class="comment">// If destination and source place overlap, skip if it would move it</span></div>
-<div class="line"><a name="l13471"></a><span class="lineno">13471</span>&#160;                        <span class="comment">// by only &lt; 1/64 of its size.</span></div>
-<div class="line"><a name="l13472"></a><span class="lineno">13472</span>&#160;                        skipOver = (srcAllocOffset - dstAllocOffset) * 64 &lt; srcAllocSize;</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; </div>
-<div class="line"><a name="l13475"></a><span class="lineno">13475</span>&#160;                    <span class="keywordflow">if</span>(skipOver)</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;                        freeSpaceDb.Register(dstBlockInfoIndex, dstOffset, srcAllocOffset - dstOffset);</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;                        dstOffset = srcAllocOffset + srcAllocSize;</div>
-<div class="line"><a name="l13480"></a><span class="lineno">13480</span>&#160;                        ++srcSuballocIt;</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="comment">// MOVE OPTION 1: Move the allocation inside the same block by decreasing offset.</span></div>
-<div class="line"><a name="l13483"></a><span class="lineno">13483</span>&#160;                    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l13484"></a><span class="lineno">13484</span>&#160;                    {</div>
-<div class="line"><a name="l13485"></a><span class="lineno">13485</span>&#160;                        srcSuballocIt-&gt;offset = dstAllocOffset;</div>
-<div class="line"><a name="l13486"></a><span class="lineno">13486</span>&#160;                        srcSuballocIt-&gt;hAllocation-&gt;ChangeOffset(dstAllocOffset);</div>
-<div class="line"><a name="l13487"></a><span class="lineno">13487</span>&#160;                        dstOffset = dstAllocOffset + srcAllocSize;</div>
-<div class="line"><a name="l13488"></a><span class="lineno">13488</span>&#160;                        m_BytesMoved += srcAllocSize;</div>
-<div class="line"><a name="l13489"></a><span class="lineno">13489</span>&#160;                        ++m_AllocationsMoved;</div>
-<div class="line"><a name="l13490"></a><span class="lineno">13490</span>&#160;                        ++srcSuballocIt;</div>
-<div class="line"><a name="l13491"></a><span class="lineno">13491</span>&#160;                        VmaDefragmentationMove move = {</div>
-<div class="line"><a name="l13492"></a><span class="lineno">13492</span>&#160;                            srcOrigBlockIndex, dstOrigBlockIndex,</div>
-<div class="line"><a name="l13493"></a><span class="lineno">13493</span>&#160;                            srcAllocOffset, dstAllocOffset,</div>
-<div class="line"><a name="l13494"></a><span class="lineno">13494</span>&#160;                            srcAllocSize };</div>
-<div class="line"><a name="l13495"></a><span class="lineno">13495</span>&#160;                        moves.push_back(move);</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;                }</div>
-<div class="line"><a name="l13498"></a><span class="lineno">13498</span>&#160;                <span class="comment">// Different block</span></div>
-<div class="line"><a name="l13499"></a><span class="lineno">13499</span>&#160;                <span class="keywordflow">else</span></div>
-<div class="line"><a name="l13500"></a><span class="lineno">13500</span>&#160;                {</div>
-<div class="line"><a name="l13501"></a><span class="lineno">13501</span>&#160;                    <span class="comment">// MOVE OPTION 2: Move the allocation to a different block.</span></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;                    VMA_ASSERT(dstBlockInfoIndex &lt; srcBlockInfoIndex);</div>
-<div class="line"><a name="l13504"></a><span class="lineno">13504</span>&#160;                    VMA_ASSERT(dstAllocOffset + srcAllocSize &lt;= dstBlockSize);</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;                    VmaSuballocation suballoc = *srcSuballocIt;</div>
-<div class="line"><a name="l13507"></a><span class="lineno">13507</span>&#160;                    suballoc.offset = dstAllocOffset;</div>
-<div class="line"><a name="l13508"></a><span class="lineno">13508</span>&#160;                    suballoc.hAllocation-&gt;ChangeBlockAllocation(m_hAllocator, pDstBlock, dstAllocOffset);</div>
-<div class="line"><a name="l13509"></a><span class="lineno">13509</span>&#160;                    dstOffset = dstAllocOffset + srcAllocSize;</div>
-<div class="line"><a name="l13510"></a><span class="lineno">13510</span>&#160;                    m_BytesMoved += srcAllocSize;</div>
-<div class="line"><a name="l13511"></a><span class="lineno">13511</span>&#160;                    ++m_AllocationsMoved;</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;                    VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;</div>
-<div class="line"><a name="l13514"></a><span class="lineno">13514</span>&#160;                    ++nextSuballocIt;</div>
-<div class="line"><a name="l13515"></a><span class="lineno">13515</span>&#160;                    pSrcMetadata-&gt;m_Suballocations.erase(srcSuballocIt);</div>
-<div class="line"><a name="l13516"></a><span class="lineno">13516</span>&#160;                    srcSuballocIt = nextSuballocIt;</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;                    pDstMetadata-&gt;m_Suballocations.push_back(suballoc);</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;                    VmaDefragmentationMove move = {</div>
-<div class="line"><a name="l13521"></a><span class="lineno">13521</span>&#160;                        srcOrigBlockIndex, dstOrigBlockIndex,</div>
-<div class="line"><a name="l13522"></a><span class="lineno">13522</span>&#160;                        srcAllocOffset, dstAllocOffset,</div>
-<div class="line"><a name="l13523"></a><span class="lineno">13523</span>&#160;                        srcAllocSize };</div>
-<div class="line"><a name="l13524"></a><span class="lineno">13524</span>&#160;                    moves.push_back(move);</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;            }</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; </div>
-<div class="line"><a name="l13530"></a><span class="lineno">13530</span>&#160;    m_BlockInfos.clear();</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;    PostprocessMetadata();</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="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l13535"></a><span class="lineno">13535</span>&#160;}</div>
-<div class="line"><a name="l13536"></a><span class="lineno">13536</span>&#160; </div>
-<div class="line"><a name="l13537"></a><span class="lineno">13537</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationAlgorithm_Fast::PreprocessMetadata()</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="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_pBlockVector-&gt;GetBlockCount();</div>
-<div class="line"><a name="l13540"></a><span class="lineno">13540</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="l13541"></a><span class="lineno">13541</span>&#160;    {</div>
-<div class="line"><a name="l13542"></a><span class="lineno">13542</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pMetadata =</div>
-<div class="line"><a name="l13543"></a><span class="lineno">13543</span>&#160;            (VmaBlockMetadata_Generic*)m_pBlockVector-&gt;GetBlock(blockIndex)-&gt;m_pMetadata;</div>
-<div class="line"><a name="l13544"></a><span class="lineno">13544</span>&#160;        pMetadata-&gt;m_FreeCount = 0;</div>
-<div class="line"><a name="l13545"></a><span class="lineno">13545</span>&#160;        pMetadata-&gt;m_SumFreeSize = pMetadata-&gt;GetSize();</div>
-<div class="line"><a name="l13546"></a><span class="lineno">13546</span>&#160;        pMetadata-&gt;m_FreeSuballocationsBySize.clear();</div>
-<div class="line"><a name="l13547"></a><span class="lineno">13547</span>&#160;        <span class="keywordflow">for</span>(VmaSuballocationList::iterator it = pMetadata-&gt;m_Suballocations.begin();</div>
-<div class="line"><a name="l13548"></a><span class="lineno">13548</span>&#160;            it != pMetadata-&gt;m_Suballocations.end(); )</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;            <span class="keywordflow">if</span>(it-&gt;type == VMA_SUBALLOCATION_TYPE_FREE)</div>
-<div class="line"><a name="l13551"></a><span class="lineno">13551</span>&#160;            {</div>
-<div class="line"><a name="l13552"></a><span class="lineno">13552</span>&#160;                VmaSuballocationList::iterator nextIt = it;</div>
-<div class="line"><a name="l13553"></a><span class="lineno">13553</span>&#160;                ++nextIt;</div>
-<div class="line"><a name="l13554"></a><span class="lineno">13554</span>&#160;                pMetadata-&gt;m_Suballocations.erase(it);</div>
-<div class="line"><a name="l13555"></a><span class="lineno">13555</span>&#160;                it = nextIt;</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;            <span class="keywordflow">else</span></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;                ++it;</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;    }</div>
-<div class="line"><a name="l13563"></a><span class="lineno">13563</span>&#160;}</div>
-<div class="line"><a name="l13564"></a><span class="lineno">13564</span>&#160; </div>
-<div class="line"><a name="l13565"></a><span class="lineno">13565</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationAlgorithm_Fast::PostprocessMetadata()</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;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_pBlockVector-&gt;GetBlockCount();</div>
-<div class="line"><a name="l13568"></a><span class="lineno">13568</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="l13569"></a><span class="lineno">13569</span>&#160;    {</div>
-<div class="line"><a name="l13570"></a><span class="lineno">13570</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pMetadata =</div>
-<div class="line"><a name="l13571"></a><span class="lineno">13571</span>&#160;            (VmaBlockMetadata_Generic*)m_pBlockVector-&gt;GetBlock(blockIndex)-&gt;m_pMetadata;</div>
-<div class="line"><a name="l13572"></a><span class="lineno">13572</span>&#160;        <span class="keyword">const</span> VkDeviceSize blockSize = pMetadata-&gt;GetSize();</div>
-<div class="line"><a name="l13573"></a><span class="lineno">13573</span>&#160;        </div>
-<div class="line"><a name="l13574"></a><span class="lineno">13574</span>&#160;        <span class="comment">// No allocations in this block - entire area is free.</span></div>
-<div class="line"><a name="l13575"></a><span class="lineno">13575</span>&#160;        <span class="keywordflow">if</span>(pMetadata-&gt;m_Suballocations.empty())</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;            pMetadata-&gt;m_FreeCount = 1;</div>
-<div class="line"><a name="l13578"></a><span class="lineno">13578</span>&#160;            <span class="comment">//pMetadata-&gt;m_SumFreeSize is already set to blockSize.</span></div>
-<div class="line"><a name="l13579"></a><span class="lineno">13579</span>&#160;            VmaSuballocation suballoc = {</div>
-<div class="line"><a name="l13580"></a><span class="lineno">13580</span>&#160;                0, <span class="comment">// offset</span></div>
-<div class="line"><a name="l13581"></a><span class="lineno">13581</span>&#160;                blockSize, <span class="comment">// size</span></div>
-<div class="line"><a name="l13582"></a><span class="lineno">13582</span>&#160;                VMA_NULL, <span class="comment">// hAllocation</span></div>
-<div class="line"><a name="l13583"></a><span class="lineno">13583</span>&#160;                VMA_SUBALLOCATION_TYPE_FREE };</div>
-<div class="line"><a name="l13584"></a><span class="lineno">13584</span>&#160;            pMetadata-&gt;m_Suballocations.push_back(suballoc);</div>
-<div class="line"><a name="l13585"></a><span class="lineno">13585</span>&#160;            pMetadata-&gt;RegisterFreeSuballocation(pMetadata-&gt;m_Suballocations.begin());</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="comment">// There are some allocations in this block.</span></div>
-<div class="line"><a name="l13588"></a><span class="lineno">13588</span>&#160;        <span class="keywordflow">else</span></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;            VkDeviceSize offset = 0;</div>
-<div class="line"><a name="l13591"></a><span class="lineno">13591</span>&#160;            VmaSuballocationList::iterator it;</div>
-<div class="line"><a name="l13592"></a><span class="lineno">13592</span>&#160;            <span class="keywordflow">for</span>(it = pMetadata-&gt;m_Suballocations.begin();</div>
-<div class="line"><a name="l13593"></a><span class="lineno">13593</span>&#160;                it != pMetadata-&gt;m_Suballocations.end();</div>
-<div class="line"><a name="l13594"></a><span class="lineno">13594</span>&#160;                ++it)</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(it-&gt;type != VMA_SUBALLOCATION_TYPE_FREE);</div>
-<div class="line"><a name="l13597"></a><span class="lineno">13597</span>&#160;                VMA_ASSERT(it-&gt;offset &gt;= offset);</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="comment">// Need to insert preceding free space.</span></div>
-<div class="line"><a name="l13600"></a><span class="lineno">13600</span>&#160;                <span class="keywordflow">if</span>(it-&gt;offset &gt; offset)</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;                    ++pMetadata-&gt;m_FreeCount;</div>
-<div class="line"><a name="l13603"></a><span class="lineno">13603</span>&#160;                    <span class="keyword">const</span> VkDeviceSize freeSize = it-&gt;offset - offset;</div>
-<div class="line"><a name="l13604"></a><span class="lineno">13604</span>&#160;                    VmaSuballocation suballoc = {</div>
-<div class="line"><a name="l13605"></a><span class="lineno">13605</span>&#160;                        offset, <span class="comment">// offset</span></div>
-<div class="line"><a name="l13606"></a><span class="lineno">13606</span>&#160;                        freeSize, <span class="comment">// size</span></div>
-<div class="line"><a name="l13607"></a><span class="lineno">13607</span>&#160;                        VMA_NULL, <span class="comment">// hAllocation</span></div>
-<div class="line"><a name="l13608"></a><span class="lineno">13608</span>&#160;                        VMA_SUBALLOCATION_TYPE_FREE };</div>
-<div class="line"><a name="l13609"></a><span class="lineno">13609</span>&#160;                    VmaSuballocationList::iterator precedingFreeIt = pMetadata-&gt;m_Suballocations.insert(it, suballoc);</div>
-<div class="line"><a name="l13610"></a><span class="lineno">13610</span>&#160;                    <span class="keywordflow">if</span>(freeSize &gt;= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)</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;                        pMetadata-&gt;m_FreeSuballocationsBySize.push_back(precedingFreeIt);</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;                pMetadata-&gt;m_SumFreeSize -= it-&gt;size;</div>
-<div class="line"><a name="l13617"></a><span class="lineno">13617</span>&#160;                offset = it-&gt;offset + it-&gt;size;</div>
-<div class="line"><a name="l13618"></a><span class="lineno">13618</span>&#160;            }</div>
-<div class="line"><a name="l13619"></a><span class="lineno">13619</span>&#160; </div>
-<div class="line"><a name="l13620"></a><span class="lineno">13620</span>&#160;            <span class="comment">// Need to insert trailing free space.</span></div>
-<div class="line"><a name="l13621"></a><span class="lineno">13621</span>&#160;            <span class="keywordflow">if</span>(offset &lt; blockSize)</div>
-<div class="line"><a name="l13622"></a><span class="lineno">13622</span>&#160;            {</div>
-<div class="line"><a name="l13623"></a><span class="lineno">13623</span>&#160;                ++pMetadata-&gt;m_FreeCount;</div>
-<div class="line"><a name="l13624"></a><span class="lineno">13624</span>&#160;                <span class="keyword">const</span> VkDeviceSize freeSize = blockSize - offset;</div>
-<div class="line"><a name="l13625"></a><span class="lineno">13625</span>&#160;                VmaSuballocation suballoc = {</div>
-<div class="line"><a name="l13626"></a><span class="lineno">13626</span>&#160;                    offset, <span class="comment">// offset</span></div>
-<div class="line"><a name="l13627"></a><span class="lineno">13627</span>&#160;                    freeSize, <span class="comment">// size</span></div>
-<div class="line"><a name="l13628"></a><span class="lineno">13628</span>&#160;                    VMA_NULL, <span class="comment">// hAllocation</span></div>
-<div class="line"><a name="l13629"></a><span class="lineno">13629</span>&#160;                    VMA_SUBALLOCATION_TYPE_FREE };</div>
-<div class="line"><a name="l13630"></a><span class="lineno">13630</span>&#160;                VMA_ASSERT(it == pMetadata-&gt;m_Suballocations.end());</div>
-<div class="line"><a name="l13631"></a><span class="lineno">13631</span>&#160;                VmaSuballocationList::iterator trailingFreeIt = pMetadata-&gt;m_Suballocations.insert(it, suballoc);</div>
-<div class="line"><a name="l13632"></a><span class="lineno">13632</span>&#160;                <span class="keywordflow">if</span>(freeSize &gt; VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)</div>
-<div class="line"><a name="l13633"></a><span class="lineno">13633</span>&#160;                {</div>
-<div class="line"><a name="l13634"></a><span class="lineno">13634</span>&#160;                    pMetadata-&gt;m_FreeSuballocationsBySize.push_back(trailingFreeIt);</div>
-<div class="line"><a name="l13635"></a><span class="lineno">13635</span>&#160;                }</div>
-<div class="line"><a name="l13636"></a><span class="lineno">13636</span>&#160;            }</div>
-<div class="line"><a name="l13637"></a><span class="lineno">13637</span>&#160; </div>
-<div class="line"><a name="l13638"></a><span class="lineno">13638</span>&#160;            VMA_SORT(</div>
-<div class="line"><a name="l13639"></a><span class="lineno">13639</span>&#160;                pMetadata-&gt;m_FreeSuballocationsBySize.begin(),</div>
-<div class="line"><a name="l13640"></a><span class="lineno">13640</span>&#160;                pMetadata-&gt;m_FreeSuballocationsBySize.end(),</div>
-<div class="line"><a name="l13641"></a><span class="lineno">13641</span>&#160;                VmaSuballocationItemSizeLess());</div>
-<div class="line"><a name="l13642"></a><span class="lineno">13642</span>&#160;        }</div>
+<div class="line"><a name="l13426"></a><span class="lineno">13426</span>&#160;                    VmaSuballocation suballoc = *srcSuballocIt;</div>
+<div class="line"><a name="l13427"></a><span class="lineno">13427</span>&#160;                    suballoc.offset = dstAllocOffset;</div>
+<div class="line"><a name="l13428"></a><span class="lineno">13428</span>&#160;                    suballoc.hAllocation-&gt;ChangeBlockAllocation(m_hAllocator, pFreeSpaceBlock, dstAllocOffset);</div>
+<div class="line"><a name="l13429"></a><span class="lineno">13429</span>&#160;                    m_BytesMoved += srcAllocSize;</div>
+<div class="line"><a name="l13430"></a><span class="lineno">13430</span>&#160;                    ++m_AllocationsMoved;</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;                    VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;</div>
+<div class="line"><a name="l13433"></a><span class="lineno">13433</span>&#160;                    ++nextSuballocIt;</div>
+<div class="line"><a name="l13434"></a><span class="lineno">13434</span>&#160;                    pSrcMetadata-&gt;m_Suballocations.erase(srcSuballocIt);</div>
+<div class="line"><a name="l13435"></a><span class="lineno">13435</span>&#160;                    srcSuballocIt = nextSuballocIt;</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;                    InsertSuballoc(pFreeSpaceMetadata, suballoc);</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;                    VmaDefragmentationMove move = {</div>
+<div class="line"><a name="l13440"></a><span class="lineno">13440</span>&#160;                        srcOrigBlockIndex, freeSpaceOrigBlockIndex,</div>
+<div class="line"><a name="l13441"></a><span class="lineno">13441</span>&#160;                        srcAllocOffset, dstAllocOffset,</div>
+<div class="line"><a name="l13442"></a><span class="lineno">13442</span>&#160;                        srcAllocSize };</div>
+<div class="line"><a name="l13443"></a><span class="lineno">13443</span>&#160;                    moves.push_back(move);</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">else</span></div>
+<div class="line"><a name="l13447"></a><span class="lineno">13447</span>&#160;            {</div>
+<div class="line"><a name="l13448"></a><span class="lineno">13448</span>&#160;                dstAllocOffset = VmaAlignUp(dstOffset, srcAllocAlignment);</div>
+<div class="line"><a name="l13449"></a><span class="lineno">13449</span>&#160; </div>
+<div class="line"><a name="l13450"></a><span class="lineno">13450</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="l13451"></a><span class="lineno">13451</span>&#160;                <span class="keywordflow">while</span>(dstBlockInfoIndex &lt; srcBlockInfoIndex &amp;&amp;</div>
+<div class="line"><a name="l13452"></a><span class="lineno">13452</span>&#160;                    dstAllocOffset + srcAllocSize &gt; dstBlockSize)</div>
+<div class="line"><a name="l13453"></a><span class="lineno">13453</span>&#160;                {</div>
+<div class="line"><a name="l13454"></a><span class="lineno">13454</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="l13455"></a><span class="lineno">13455</span>&#160;                    freeSpaceDb.Register(dstBlockInfoIndex, dstOffset, dstBlockSize - dstOffset);</div>
+<div class="line"><a name="l13456"></a><span class="lineno">13456</span>&#160; </div>
+<div class="line"><a name="l13457"></a><span class="lineno">13457</span>&#160;                    ++dstBlockInfoIndex;</div>
+<div class="line"><a name="l13458"></a><span class="lineno">13458</span>&#160;                    dstOrigBlockIndex = m_BlockInfos[dstBlockInfoIndex].origBlockIndex;</div>
+<div class="line"><a name="l13459"></a><span class="lineno">13459</span>&#160;                    pDstBlock = m_pBlockVector-&gt;GetBlock(dstOrigBlockIndex);</div>
+<div class="line"><a name="l13460"></a><span class="lineno">13460</span>&#160;                    pDstMetadata = (VmaBlockMetadata_Generic*)pDstBlock-&gt;m_pMetadata;</div>
+<div class="line"><a name="l13461"></a><span class="lineno">13461</span>&#160;                    dstBlockSize = pDstMetadata-&gt;GetSize();</div>
+<div class="line"><a name="l13462"></a><span class="lineno">13462</span>&#160;                    dstOffset = 0;</div>
+<div class="line"><a name="l13463"></a><span class="lineno">13463</span>&#160;                    dstAllocOffset = 0;</div>
+<div class="line"><a name="l13464"></a><span class="lineno">13464</span>&#160;                }</div>
+<div class="line"><a name="l13465"></a><span class="lineno">13465</span>&#160; </div>
+<div class="line"><a name="l13466"></a><span class="lineno">13466</span>&#160;                <span class="comment">// Same block</span></div>
+<div class="line"><a name="l13467"></a><span class="lineno">13467</span>&#160;                <span class="keywordflow">if</span>(dstBlockInfoIndex == srcBlockInfoIndex)</div>
+<div class="line"><a name="l13468"></a><span class="lineno">13468</span>&#160;                {</div>
+<div class="line"><a name="l13469"></a><span class="lineno">13469</span>&#160;                    VMA_ASSERT(dstAllocOffset &lt;= srcAllocOffset);</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;                    <span class="keyword">const</span> <span class="keywordtype">bool</span> overlap = dstAllocOffset + srcAllocSize &gt; srcAllocOffset;</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="keywordtype">bool</span> skipOver = overlap;</div>
+<div class="line"><a name="l13474"></a><span class="lineno">13474</span>&#160;                    <span class="keywordflow">if</span>(overlap &amp;&amp; m_OverlappingMoveSupported &amp;&amp; dstAllocOffset &lt; srcAllocOffset)</div>
+<div class="line"><a name="l13475"></a><span class="lineno">13475</span>&#160;                    {</div>
+<div class="line"><a name="l13476"></a><span class="lineno">13476</span>&#160;                        <span class="comment">// If destination and source place overlap, skip if it would move it</span></div>
+<div class="line"><a name="l13477"></a><span class="lineno">13477</span>&#160;                        <span class="comment">// by only &lt; 1/64 of its size.</span></div>
+<div class="line"><a name="l13478"></a><span class="lineno">13478</span>&#160;                        skipOver = (srcAllocOffset - dstAllocOffset) * 64 &lt; srcAllocSize;</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; </div>
+<div class="line"><a name="l13481"></a><span class="lineno">13481</span>&#160;                    <span class="keywordflow">if</span>(skipOver)</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;                        freeSpaceDb.Register(dstBlockInfoIndex, dstOffset, srcAllocOffset - dstOffset);</div>
+<div class="line"><a name="l13484"></a><span class="lineno">13484</span>&#160; </div>
+<div class="line"><a name="l13485"></a><span class="lineno">13485</span>&#160;                        dstOffset = srcAllocOffset + srcAllocSize;</div>
+<div class="line"><a name="l13486"></a><span class="lineno">13486</span>&#160;                        ++srcSuballocIt;</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">// MOVE OPTION 1: Move the allocation inside the same block by decreasing offset.</span></div>
+<div class="line"><a name="l13489"></a><span class="lineno">13489</span>&#160;                    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l13490"></a><span class="lineno">13490</span>&#160;                    {</div>
+<div class="line"><a name="l13491"></a><span class="lineno">13491</span>&#160;                        srcSuballocIt-&gt;offset = dstAllocOffset;</div>
+<div class="line"><a name="l13492"></a><span class="lineno">13492</span>&#160;                        srcSuballocIt-&gt;hAllocation-&gt;ChangeOffset(dstAllocOffset);</div>
+<div class="line"><a name="l13493"></a><span class="lineno">13493</span>&#160;                        dstOffset = dstAllocOffset + srcAllocSize;</div>
+<div class="line"><a name="l13494"></a><span class="lineno">13494</span>&#160;                        m_BytesMoved += srcAllocSize;</div>
+<div class="line"><a name="l13495"></a><span class="lineno">13495</span>&#160;                        ++m_AllocationsMoved;</div>
+<div class="line"><a name="l13496"></a><span class="lineno">13496</span>&#160;                        ++srcSuballocIt;</div>
+<div class="line"><a name="l13497"></a><span class="lineno">13497</span>&#160;                        VmaDefragmentationMove move = {</div>
+<div class="line"><a name="l13498"></a><span class="lineno">13498</span>&#160;                            srcOrigBlockIndex, dstOrigBlockIndex,</div>
+<div class="line"><a name="l13499"></a><span class="lineno">13499</span>&#160;                            srcAllocOffset, dstAllocOffset,</div>
+<div class="line"><a name="l13500"></a><span class="lineno">13500</span>&#160;                            srcAllocSize };</div>
+<div class="line"><a name="l13501"></a><span class="lineno">13501</span>&#160;                        moves.push_back(move);</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;                }</div>
+<div class="line"><a name="l13504"></a><span class="lineno">13504</span>&#160;                <span class="comment">// Different block</span></div>
+<div class="line"><a name="l13505"></a><span class="lineno">13505</span>&#160;                <span class="keywordflow">else</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="comment">// MOVE OPTION 2: Move the allocation to a different block.</span></div>
+<div class="line"><a name="l13508"></a><span class="lineno">13508</span>&#160; </div>
+<div class="line"><a name="l13509"></a><span class="lineno">13509</span>&#160;                    VMA_ASSERT(dstBlockInfoIndex &lt; srcBlockInfoIndex);</div>
+<div class="line"><a name="l13510"></a><span class="lineno">13510</span>&#160;                    VMA_ASSERT(dstAllocOffset + srcAllocSize &lt;= dstBlockSize);</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;                    VmaSuballocation suballoc = *srcSuballocIt;</div>
+<div class="line"><a name="l13513"></a><span class="lineno">13513</span>&#160;                    suballoc.offset = dstAllocOffset;</div>
+<div class="line"><a name="l13514"></a><span class="lineno">13514</span>&#160;                    suballoc.hAllocation-&gt;ChangeBlockAllocation(m_hAllocator, pDstBlock, dstAllocOffset);</div>
+<div class="line"><a name="l13515"></a><span class="lineno">13515</span>&#160;                    dstOffset = dstAllocOffset + srcAllocSize;</div>
+<div class="line"><a name="l13516"></a><span class="lineno">13516</span>&#160;                    m_BytesMoved += srcAllocSize;</div>
+<div class="line"><a name="l13517"></a><span class="lineno">13517</span>&#160;                    ++m_AllocationsMoved;</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;                    VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;</div>
+<div class="line"><a name="l13520"></a><span class="lineno">13520</span>&#160;                    ++nextSuballocIt;</div>
+<div class="line"><a name="l13521"></a><span class="lineno">13521</span>&#160;                    pSrcMetadata-&gt;m_Suballocations.erase(srcSuballocIt);</div>
+<div class="line"><a name="l13522"></a><span class="lineno">13522</span>&#160;                    srcSuballocIt = nextSuballocIt;</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;                    pDstMetadata-&gt;m_Suballocations.push_back(suballoc);</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;                    VmaDefragmentationMove move = {</div>
+<div class="line"><a name="l13527"></a><span class="lineno">13527</span>&#160;                        srcOrigBlockIndex, dstOrigBlockIndex,</div>
+<div class="line"><a name="l13528"></a><span class="lineno">13528</span>&#160;                        srcAllocOffset, dstAllocOffset,</div>
+<div class="line"><a name="l13529"></a><span class="lineno">13529</span>&#160;                        srcAllocSize };</div>
+<div class="line"><a name="l13530"></a><span class="lineno">13530</span>&#160;                    moves.push_back(move);</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;            }</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;    }</div>
+<div class="line"><a name="l13535"></a><span class="lineno">13535</span>&#160; </div>
+<div class="line"><a name="l13536"></a><span class="lineno">13536</span>&#160;    m_BlockInfos.clear();</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;    PostprocessMetadata();</div>
+<div class="line"><a name="l13539"></a><span class="lineno">13539</span>&#160; </div>
+<div class="line"><a name="l13540"></a><span class="lineno">13540</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</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; </div>
+<div class="line"><a name="l13543"></a><span class="lineno">13543</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationAlgorithm_Fast::PreprocessMetadata()</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="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_pBlockVector-&gt;GetBlockCount();</div>
+<div class="line"><a name="l13546"></a><span class="lineno">13546</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="l13547"></a><span class="lineno">13547</span>&#160;    {</div>
+<div class="line"><a name="l13548"></a><span class="lineno">13548</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pMetadata =</div>
+<div class="line"><a name="l13549"></a><span class="lineno">13549</span>&#160;            (VmaBlockMetadata_Generic*)m_pBlockVector-&gt;GetBlock(blockIndex)-&gt;m_pMetadata;</div>
+<div class="line"><a name="l13550"></a><span class="lineno">13550</span>&#160;        pMetadata-&gt;m_FreeCount = 0;</div>
+<div class="line"><a name="l13551"></a><span class="lineno">13551</span>&#160;        pMetadata-&gt;m_SumFreeSize = pMetadata-&gt;GetSize();</div>
+<div class="line"><a name="l13552"></a><span class="lineno">13552</span>&#160;        pMetadata-&gt;m_FreeSuballocationsBySize.clear();</div>
+<div class="line"><a name="l13553"></a><span class="lineno">13553</span>&#160;        <span class="keywordflow">for</span>(VmaSuballocationList::iterator it = pMetadata-&gt;m_Suballocations.begin();</div>
+<div class="line"><a name="l13554"></a><span class="lineno">13554</span>&#160;            it != pMetadata-&gt;m_Suballocations.end(); )</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;            <span class="keywordflow">if</span>(it-&gt;type == VMA_SUBALLOCATION_TYPE_FREE)</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;                VmaSuballocationList::iterator nextIt = it;</div>
+<div class="line"><a name="l13559"></a><span class="lineno">13559</span>&#160;                ++nextIt;</div>
+<div class="line"><a name="l13560"></a><span class="lineno">13560</span>&#160;                pMetadata-&gt;m_Suballocations.erase(it);</div>
+<div class="line"><a name="l13561"></a><span class="lineno">13561</span>&#160;                it = nextIt;</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="keywordflow">else</span></div>
+<div class="line"><a name="l13564"></a><span class="lineno">13564</span>&#160;            {</div>
+<div class="line"><a name="l13565"></a><span class="lineno">13565</span>&#160;                ++it;</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;        }</div>
+<div class="line"><a name="l13568"></a><span class="lineno">13568</span>&#160;    }</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;<span class="keywordtype">void</span> VmaDefragmentationAlgorithm_Fast::PostprocessMetadata()</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;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockCount = m_pBlockVector-&gt;GetBlockCount();</div>
+<div class="line"><a name="l13574"></a><span class="lineno">13574</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="l13575"></a><span class="lineno">13575</span>&#160;    {</div>
+<div class="line"><a name="l13576"></a><span class="lineno">13576</span>&#160;        VmaBlockMetadata_Generic* <span class="keyword">const</span> pMetadata =</div>
+<div class="line"><a name="l13577"></a><span class="lineno">13577</span>&#160;            (VmaBlockMetadata_Generic*)m_pBlockVector-&gt;GetBlock(blockIndex)-&gt;m_pMetadata;</div>
+<div class="line"><a name="l13578"></a><span class="lineno">13578</span>&#160;        <span class="keyword">const</span> VkDeviceSize blockSize = pMetadata-&gt;GetSize();</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="comment">// No allocations in this block - entire area is free.</span></div>
+<div class="line"><a name="l13581"></a><span class="lineno">13581</span>&#160;        <span class="keywordflow">if</span>(pMetadata-&gt;m_Suballocations.empty())</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;            pMetadata-&gt;m_FreeCount = 1;</div>
+<div class="line"><a name="l13584"></a><span class="lineno">13584</span>&#160;            <span class="comment">//pMetadata-&gt;m_SumFreeSize is already set to blockSize.</span></div>
+<div class="line"><a name="l13585"></a><span class="lineno">13585</span>&#160;            VmaSuballocation suballoc = {</div>
+<div class="line"><a name="l13586"></a><span class="lineno">13586</span>&#160;                0, <span class="comment">// offset</span></div>
+<div class="line"><a name="l13587"></a><span class="lineno">13587</span>&#160;                blockSize, <span class="comment">// size</span></div>
+<div class="line"><a name="l13588"></a><span class="lineno">13588</span>&#160;                VMA_NULL, <span class="comment">// hAllocation</span></div>
+<div class="line"><a name="l13589"></a><span class="lineno">13589</span>&#160;                VMA_SUBALLOCATION_TYPE_FREE };</div>
+<div class="line"><a name="l13590"></a><span class="lineno">13590</span>&#160;            pMetadata-&gt;m_Suballocations.push_back(suballoc);</div>
+<div class="line"><a name="l13591"></a><span class="lineno">13591</span>&#160;            pMetadata-&gt;RegisterFreeSuballocation(pMetadata-&gt;m_Suballocations.begin());</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;        <span class="comment">// There are some allocations in this block.</span></div>
+<div class="line"><a name="l13594"></a><span class="lineno">13594</span>&#160;        <span class="keywordflow">else</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;            VkDeviceSize offset = 0;</div>
+<div class="line"><a name="l13597"></a><span class="lineno">13597</span>&#160;            VmaSuballocationList::iterator it;</div>
+<div class="line"><a name="l13598"></a><span class="lineno">13598</span>&#160;            <span class="keywordflow">for</span>(it = pMetadata-&gt;m_Suballocations.begin();</div>
+<div class="line"><a name="l13599"></a><span class="lineno">13599</span>&#160;                it != pMetadata-&gt;m_Suballocations.end();</div>
+<div class="line"><a name="l13600"></a><span class="lineno">13600</span>&#160;                ++it)</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;                VMA_ASSERT(it-&gt;type != VMA_SUBALLOCATION_TYPE_FREE);</div>
+<div class="line"><a name="l13603"></a><span class="lineno">13603</span>&#160;                VMA_ASSERT(it-&gt;offset &gt;= offset);</div>
+<div class="line"><a name="l13604"></a><span class="lineno">13604</span>&#160; </div>
+<div class="line"><a name="l13605"></a><span class="lineno">13605</span>&#160;                <span class="comment">// Need to insert preceding free space.</span></div>
+<div class="line"><a name="l13606"></a><span class="lineno">13606</span>&#160;                <span class="keywordflow">if</span>(it-&gt;offset &gt; offset)</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;                    ++pMetadata-&gt;m_FreeCount;</div>
+<div class="line"><a name="l13609"></a><span class="lineno">13609</span>&#160;                    <span class="keyword">const</span> VkDeviceSize freeSize = it-&gt;offset - offset;</div>
+<div class="line"><a name="l13610"></a><span class="lineno">13610</span>&#160;                    VmaSuballocation suballoc = {</div>
+<div class="line"><a name="l13611"></a><span class="lineno">13611</span>&#160;                        offset, <span class="comment">// offset</span></div>
+<div class="line"><a name="l13612"></a><span class="lineno">13612</span>&#160;                        freeSize, <span class="comment">// size</span></div>
+<div class="line"><a name="l13613"></a><span class="lineno">13613</span>&#160;                        VMA_NULL, <span class="comment">// hAllocation</span></div>
+<div class="line"><a name="l13614"></a><span class="lineno">13614</span>&#160;                        VMA_SUBALLOCATION_TYPE_FREE };</div>
+<div class="line"><a name="l13615"></a><span class="lineno">13615</span>&#160;                    VmaSuballocationList::iterator precedingFreeIt = pMetadata-&gt;m_Suballocations.insert(it, suballoc);</div>
+<div class="line"><a name="l13616"></a><span class="lineno">13616</span>&#160;                    <span class="keywordflow">if</span>(freeSize &gt;= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)</div>
+<div class="line"><a name="l13617"></a><span class="lineno">13617</span>&#160;                    {</div>
+<div class="line"><a name="l13618"></a><span class="lineno">13618</span>&#160;                        pMetadata-&gt;m_FreeSuballocationsBySize.push_back(precedingFreeIt);</div>
+<div class="line"><a name="l13619"></a><span class="lineno">13619</span>&#160;                    }</div>
+<div class="line"><a name="l13620"></a><span class="lineno">13620</span>&#160;                }</div>
+<div class="line"><a name="l13621"></a><span class="lineno">13621</span>&#160; </div>
+<div class="line"><a name="l13622"></a><span class="lineno">13622</span>&#160;                pMetadata-&gt;m_SumFreeSize -= it-&gt;size;</div>
+<div class="line"><a name="l13623"></a><span class="lineno">13623</span>&#160;                offset = it-&gt;offset + it-&gt;size;</div>
+<div class="line"><a name="l13624"></a><span class="lineno">13624</span>&#160;            }</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;            <span class="comment">// Need to insert trailing free space.</span></div>
+<div class="line"><a name="l13627"></a><span class="lineno">13627</span>&#160;            <span class="keywordflow">if</span>(offset &lt; blockSize)</div>
+<div class="line"><a name="l13628"></a><span class="lineno">13628</span>&#160;            {</div>
+<div class="line"><a name="l13629"></a><span class="lineno">13629</span>&#160;                ++pMetadata-&gt;m_FreeCount;</div>
+<div class="line"><a name="l13630"></a><span class="lineno">13630</span>&#160;                <span class="keyword">const</span> VkDeviceSize freeSize = blockSize - offset;</div>
+<div class="line"><a name="l13631"></a><span class="lineno">13631</span>&#160;                VmaSuballocation suballoc = {</div>
+<div class="line"><a name="l13632"></a><span class="lineno">13632</span>&#160;                    offset, <span class="comment">// offset</span></div>
+<div class="line"><a name="l13633"></a><span class="lineno">13633</span>&#160;                    freeSize, <span class="comment">// size</span></div>
+<div class="line"><a name="l13634"></a><span class="lineno">13634</span>&#160;                    VMA_NULL, <span class="comment">// hAllocation</span></div>
+<div class="line"><a name="l13635"></a><span class="lineno">13635</span>&#160;                    VMA_SUBALLOCATION_TYPE_FREE };</div>
+<div class="line"><a name="l13636"></a><span class="lineno">13636</span>&#160;                VMA_ASSERT(it == pMetadata-&gt;m_Suballocations.end());</div>
+<div class="line"><a name="l13637"></a><span class="lineno">13637</span>&#160;                VmaSuballocationList::iterator trailingFreeIt = pMetadata-&gt;m_Suballocations.insert(it, suballoc);</div>
+<div class="line"><a name="l13638"></a><span class="lineno">13638</span>&#160;                <span class="keywordflow">if</span>(freeSize &gt; VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)</div>
+<div class="line"><a name="l13639"></a><span class="lineno">13639</span>&#160;                {</div>
+<div class="line"><a name="l13640"></a><span class="lineno">13640</span>&#160;                    pMetadata-&gt;m_FreeSuballocationsBySize.push_back(trailingFreeIt);</div>
+<div class="line"><a name="l13641"></a><span class="lineno">13641</span>&#160;                }</div>
+<div class="line"><a name="l13642"></a><span class="lineno">13642</span>&#160;            }</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;        VMA_HEAVY_ASSERT(pMetadata-&gt;Validate());</div>
-<div class="line"><a name="l13645"></a><span class="lineno">13645</span>&#160;    }</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; </div>
-<div class="line"><a name="l13648"></a><span class="lineno">13648</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="l13649"></a><span class="lineno">13649</span>&#160;{</div>
-<div class="line"><a name="l13650"></a><span class="lineno">13650</span>&#160;    <span class="comment">// TODO: Optimize somehow. Remember iterator instead of searching for it linearly.</span></div>
-<div class="line"><a name="l13651"></a><span class="lineno">13651</span>&#160;    VmaSuballocationList::iterator it = pMetadata-&gt;m_Suballocations.begin();</div>
-<div class="line"><a name="l13652"></a><span class="lineno">13652</span>&#160;    <span class="keywordflow">while</span>(it != pMetadata-&gt;m_Suballocations.end())</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;        <span class="keywordflow">if</span>(it-&gt;offset &lt; suballoc.offset)</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;            ++it;</div>
-<div class="line"><a name="l13657"></a><span class="lineno">13657</span>&#160;        }</div>
-<div class="line"><a name="l13658"></a><span class="lineno">13658</span>&#160;    }</div>
-<div class="line"><a name="l13659"></a><span class="lineno">13659</span>&#160;    pMetadata-&gt;m_Suballocations.insert(it, suballoc);</div>
-<div class="line"><a name="l13660"></a><span class="lineno">13660</span>&#160;}</div>
-<div class="line"><a name="l13661"></a><span class="lineno">13661</span>&#160; </div>
-<div class="line"><a name="l13663"></a><span class="lineno">13663</span>&#160;<span class="comment">// VmaBlockVectorDefragmentationContext</span></div>
-<div class="line"><a name="l13664"></a><span class="lineno">13664</span>&#160; </div>
-<div class="line"><a name="l13665"></a><span class="lineno">13665</span>&#160;VmaBlockVectorDefragmentationContext::VmaBlockVectorDefragmentationContext(</div>
-<div class="line"><a name="l13666"></a><span class="lineno">13666</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
-<div class="line"><a name="l13667"></a><span class="lineno">13667</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> hCustomPool,</div>
-<div class="line"><a name="l13668"></a><span class="lineno">13668</span>&#160;    VmaBlockVector* pBlockVector,</div>
-<div class="line"><a name="l13669"></a><span class="lineno">13669</span>&#160;    uint32_t currFrameIndex) :</div>
-<div class="line"><a name="l13670"></a><span class="lineno">13670</span>&#160;    res(VK_SUCCESS),</div>
-<div class="line"><a name="l13671"></a><span class="lineno">13671</span>&#160;    mutexLocked(false),</div>
-<div class="line"><a name="l13672"></a><span class="lineno">13672</span>&#160;    blockContexts(VmaStlAllocator&lt;VmaBlockDefragmentationContext&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
-<div class="line"><a name="l13673"></a><span class="lineno">13673</span>&#160;    m_hAllocator(hAllocator),</div>
-<div class="line"><a name="l13674"></a><span class="lineno">13674</span>&#160;    m_hCustomPool(hCustomPool),</div>
-<div class="line"><a name="l13675"></a><span class="lineno">13675</span>&#160;    m_pBlockVector(pBlockVector),</div>
-<div class="line"><a name="l13676"></a><span class="lineno">13676</span>&#160;    m_CurrFrameIndex(currFrameIndex),</div>
-<div class="line"><a name="l13677"></a><span class="lineno">13677</span>&#160;    m_pAlgorithm(VMA_NULL),</div>
-<div class="line"><a name="l13678"></a><span class="lineno">13678</span>&#160;    m_Allocations(VmaStlAllocator&lt;AllocInfo&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
-<div class="line"><a name="l13679"></a><span class="lineno">13679</span>&#160;    m_AllAllocations(false)</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;}</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;VmaBlockVectorDefragmentationContext::~VmaBlockVectorDefragmentationContext()</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;    vma_delete(m_hAllocator, m_pAlgorithm);</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; </div>
-<div class="line"><a name="l13688"></a><span class="lineno">13688</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="l13689"></a><span class="lineno">13689</span>&#160;{</div>
-<div class="line"><a name="l13690"></a><span class="lineno">13690</span>&#160;    AllocInfo info = { hAlloc, pChanged };</div>
-<div class="line"><a name="l13691"></a><span class="lineno">13691</span>&#160;    m_Allocations.push_back(info);</div>
+<div class="line"><a name="l13644"></a><span class="lineno">13644</span>&#160;            VMA_SORT(</div>
+<div class="line"><a name="l13645"></a><span class="lineno">13645</span>&#160;                pMetadata-&gt;m_FreeSuballocationsBySize.begin(),</div>
+<div class="line"><a name="l13646"></a><span class="lineno">13646</span>&#160;                pMetadata-&gt;m_FreeSuballocationsBySize.end(),</div>
+<div class="line"><a name="l13647"></a><span class="lineno">13647</span>&#160;                VmaSuballocationItemSizeLess());</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; </div>
+<div class="line"><a name="l13650"></a><span class="lineno">13650</span>&#160;        VMA_HEAVY_ASSERT(pMetadata-&gt;Validate());</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;}</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;<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="l13655"></a><span class="lineno">13655</span>&#160;{</div>
+<div class="line"><a name="l13656"></a><span class="lineno">13656</span>&#160;    <span class="comment">// TODO: Optimize somehow. Remember iterator instead of searching for it linearly.</span></div>
+<div class="line"><a name="l13657"></a><span class="lineno">13657</span>&#160;    VmaSuballocationList::iterator it = pMetadata-&gt;m_Suballocations.begin();</div>
+<div class="line"><a name="l13658"></a><span class="lineno">13658</span>&#160;    <span class="keywordflow">while</span>(it != pMetadata-&gt;m_Suballocations.end())</div>
+<div class="line"><a name="l13659"></a><span class="lineno">13659</span>&#160;    {</div>
+<div class="line"><a name="l13660"></a><span class="lineno">13660</span>&#160;        <span class="keywordflow">if</span>(it-&gt;offset &lt; suballoc.offset)</div>
+<div class="line"><a name="l13661"></a><span class="lineno">13661</span>&#160;        {</div>
+<div class="line"><a name="l13662"></a><span class="lineno">13662</span>&#160;            ++it;</div>
+<div class="line"><a name="l13663"></a><span class="lineno">13663</span>&#160;        }</div>
+<div class="line"><a name="l13664"></a><span class="lineno">13664</span>&#160;    }</div>
+<div class="line"><a name="l13665"></a><span class="lineno">13665</span>&#160;    pMetadata-&gt;m_Suballocations.insert(it, suballoc);</div>
+<div class="line"><a name="l13666"></a><span class="lineno">13666</span>&#160;}</div>
+<div class="line"><a name="l13667"></a><span class="lineno">13667</span>&#160; </div>
+<div class="line"><a name="l13669"></a><span class="lineno">13669</span>&#160;<span class="comment">// VmaBlockVectorDefragmentationContext</span></div>
+<div class="line"><a name="l13670"></a><span class="lineno">13670</span>&#160; </div>
+<div class="line"><a name="l13671"></a><span class="lineno">13671</span>&#160;VmaBlockVectorDefragmentationContext::VmaBlockVectorDefragmentationContext(</div>
+<div class="line"><a name="l13672"></a><span class="lineno">13672</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
+<div class="line"><a name="l13673"></a><span class="lineno">13673</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> hCustomPool,</div>
+<div class="line"><a name="l13674"></a><span class="lineno">13674</span>&#160;    VmaBlockVector* pBlockVector,</div>
+<div class="line"><a name="l13675"></a><span class="lineno">13675</span>&#160;    uint32_t currFrameIndex) :</div>
+<div class="line"><a name="l13676"></a><span class="lineno">13676</span>&#160;    res(VK_SUCCESS),</div>
+<div class="line"><a name="l13677"></a><span class="lineno">13677</span>&#160;    mutexLocked(false),</div>
+<div class="line"><a name="l13678"></a><span class="lineno">13678</span>&#160;    blockContexts(VmaStlAllocator&lt;VmaBlockDefragmentationContext&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
+<div class="line"><a name="l13679"></a><span class="lineno">13679</span>&#160;    m_hAllocator(hAllocator),</div>
+<div class="line"><a name="l13680"></a><span class="lineno">13680</span>&#160;    m_hCustomPool(hCustomPool),</div>
+<div class="line"><a name="l13681"></a><span class="lineno">13681</span>&#160;    m_pBlockVector(pBlockVector),</div>
+<div class="line"><a name="l13682"></a><span class="lineno">13682</span>&#160;    m_CurrFrameIndex(currFrameIndex),</div>
+<div class="line"><a name="l13683"></a><span class="lineno">13683</span>&#160;    m_pAlgorithm(VMA_NULL),</div>
+<div class="line"><a name="l13684"></a><span class="lineno">13684</span>&#160;    m_Allocations(VmaStlAllocator&lt;AllocInfo&gt;(hAllocator-&gt;GetAllocationCallbacks())),</div>
+<div class="line"><a name="l13685"></a><span class="lineno">13685</span>&#160;    m_AllAllocations(false)</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;}</div>
+<div class="line"><a name="l13688"></a><span class="lineno">13688</span>&#160; </div>
+<div class="line"><a name="l13689"></a><span class="lineno">13689</span>&#160;VmaBlockVectorDefragmentationContext::~VmaBlockVectorDefragmentationContext()</div>
+<div class="line"><a name="l13690"></a><span class="lineno">13690</span>&#160;{</div>
+<div class="line"><a name="l13691"></a><span class="lineno">13691</span>&#160;    vma_delete(m_hAllocator, m_pAlgorithm);</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; </div>
-<div class="line"><a name="l13694"></a><span class="lineno">13694</span>&#160;<span class="keywordtype">void</span> VmaBlockVectorDefragmentationContext::Begin(<span class="keywordtype">bool</span> overlappingMoveSupported)</div>
+<div class="line"><a name="l13694"></a><span class="lineno">13694</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="l13695"></a><span class="lineno">13695</span>&#160;{</div>
-<div class="line"><a name="l13696"></a><span class="lineno">13696</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">bool</span> allAllocations = m_AllAllocations ||</div>
-<div class="line"><a name="l13697"></a><span class="lineno">13697</span>&#160;        m_Allocations.size() == m_pBlockVector-&gt;CalcAllocationCount();</div>
-<div class="line"><a name="l13698"></a><span class="lineno">13698</span>&#160; </div>
-<div class="line"><a name="l13699"></a><span class="lineno">13699</span>&#160;<span class="comment">    /********************************</span></div>
-<div class="line"><a name="l13700"></a><span class="lineno">13700</span>&#160;<span class="comment">    HERE IS THE CHOICE OF DEFRAGMENTATION ALGORITHM.</span></div>
-<div class="line"><a name="l13701"></a><span class="lineno">13701</span>&#160;<span class="comment">    ********************************/</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="comment">/*</span></div>
-<div class="line"><a name="l13704"></a><span class="lineno">13704</span>&#160;<span class="comment">    Fast algorithm is supported only when certain criteria are met:</span></div>
-<div class="line"><a name="l13705"></a><span class="lineno">13705</span>&#160;<span class="comment">    - VMA_DEBUG_MARGIN is 0.</span></div>
-<div class="line"><a name="l13706"></a><span class="lineno">13706</span>&#160;<span class="comment">    - All allocations in this block vector are moveable.</span></div>
-<div class="line"><a name="l13707"></a><span class="lineno">13707</span>&#160;<span class="comment">    - There is no possibility of image/buffer granularity conflict.</span></div>
-<div class="line"><a name="l13708"></a><span class="lineno">13708</span>&#160;<span class="comment">    */</span></div>
-<div class="line"><a name="l13709"></a><span class="lineno">13709</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_MARGIN == 0 &amp;&amp;</div>
-<div class="line"><a name="l13710"></a><span class="lineno">13710</span>&#160;        allAllocations &amp;&amp;</div>
-<div class="line"><a name="l13711"></a><span class="lineno">13711</span>&#160;        !m_pBlockVector-&gt;IsBufferImageGranularityConflictPossible())</div>
-<div class="line"><a name="l13712"></a><span class="lineno">13712</span>&#160;    {</div>
-<div class="line"><a name="l13713"></a><span class="lineno">13713</span>&#160;        m_pAlgorithm = vma_new(m_hAllocator, VmaDefragmentationAlgorithm_Fast)(</div>
-<div class="line"><a name="l13714"></a><span class="lineno">13714</span>&#160;            m_hAllocator, m_pBlockVector, m_CurrFrameIndex, overlappingMoveSupported);</div>
-<div class="line"><a name="l13715"></a><span class="lineno">13715</span>&#160;    }</div>
-<div class="line"><a name="l13716"></a><span class="lineno">13716</span>&#160;    <span class="keywordflow">else</span></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;        m_pAlgorithm = vma_new(m_hAllocator, VmaDefragmentationAlgorithm_Generic)(</div>
-<div class="line"><a name="l13719"></a><span class="lineno">13719</span>&#160;            m_hAllocator, m_pBlockVector, m_CurrFrameIndex, overlappingMoveSupported);</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; </div>
-<div class="line"><a name="l13722"></a><span class="lineno">13722</span>&#160;    <span class="keywordflow">if</span>(allAllocations)</div>
+<div class="line"><a name="l13696"></a><span class="lineno">13696</span>&#160;    AllocInfo info = { hAlloc, pChanged };</div>
+<div class="line"><a name="l13697"></a><span class="lineno">13697</span>&#160;    m_Allocations.push_back(info);</div>
+<div class="line"><a name="l13698"></a><span class="lineno">13698</span>&#160;}</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="keywordtype">void</span> VmaBlockVectorDefragmentationContext::Begin(<span class="keywordtype">bool</span> overlappingMoveSupported)</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="keyword">const</span> <span class="keywordtype">bool</span> allAllocations = m_AllAllocations ||</div>
+<div class="line"><a name="l13703"></a><span class="lineno">13703</span>&#160;        m_Allocations.size() == m_pBlockVector-&gt;CalcAllocationCount();</div>
+<div class="line"><a name="l13704"></a><span class="lineno">13704</span>&#160; </div>
+<div class="line"><a name="l13705"></a><span class="lineno">13705</span>&#160;<span class="comment">    /********************************</span></div>
+<div class="line"><a name="l13706"></a><span class="lineno">13706</span>&#160;<span class="comment">    HERE IS THE CHOICE OF DEFRAGMENTATION ALGORITHM.</span></div>
+<div class="line"><a name="l13707"></a><span class="lineno">13707</span>&#160;<span class="comment">    ********************************/</span></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="comment">/*</span></div>
+<div class="line"><a name="l13710"></a><span class="lineno">13710</span>&#160;<span class="comment">    Fast algorithm is supported only when certain criteria are met:</span></div>
+<div class="line"><a name="l13711"></a><span class="lineno">13711</span>&#160;<span class="comment">    - VMA_DEBUG_MARGIN is 0.</span></div>
+<div class="line"><a name="l13712"></a><span class="lineno">13712</span>&#160;<span class="comment">    - All allocations in this block vector are moveable.</span></div>
+<div class="line"><a name="l13713"></a><span class="lineno">13713</span>&#160;<span class="comment">    - There is no possibility of image/buffer granularity conflict.</span></div>
+<div class="line"><a name="l13714"></a><span class="lineno">13714</span>&#160;<span class="comment">    */</span></div>
+<div class="line"><a name="l13715"></a><span class="lineno">13715</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_MARGIN == 0 &amp;&amp;</div>
+<div class="line"><a name="l13716"></a><span class="lineno">13716</span>&#160;        allAllocations &amp;&amp;</div>
+<div class="line"><a name="l13717"></a><span class="lineno">13717</span>&#160;        !m_pBlockVector-&gt;IsBufferImageGranularityConflictPossible())</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;        m_pAlgorithm = vma_new(m_hAllocator, VmaDefragmentationAlgorithm_Fast)(</div>
+<div class="line"><a name="l13720"></a><span class="lineno">13720</span>&#160;            m_hAllocator, m_pBlockVector, m_CurrFrameIndex, overlappingMoveSupported);</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;    <span class="keywordflow">else</span></div>
 <div class="line"><a name="l13723"></a><span class="lineno">13723</span>&#160;    {</div>
-<div class="line"><a name="l13724"></a><span class="lineno">13724</span>&#160;        m_pAlgorithm-&gt;AddAll();</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">else</span></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="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="l13729"></a><span class="lineno">13729</span>&#160;        {</div>
-<div class="line"><a name="l13730"></a><span class="lineno">13730</span>&#160;            m_pAlgorithm-&gt;AddAllocation(m_Allocations[i].hAlloc, m_Allocations[i].pChanged);</div>
-<div class="line"><a name="l13731"></a><span class="lineno">13731</span>&#160;        }</div>
-<div class="line"><a name="l13732"></a><span class="lineno">13732</span>&#160;    }</div>
-<div class="line"><a name="l13733"></a><span class="lineno">13733</span>&#160;}</div>
-<div class="line"><a name="l13734"></a><span class="lineno">13734</span>&#160; </div>
-<div class="line"><a name="l13736"></a><span class="lineno">13736</span>&#160;<span class="comment">// VmaDefragmentationContext</span></div>
-<div class="line"><a name="l13737"></a><span class="lineno">13737</span>&#160; </div>
-<div class="line"><a name="l13738"></a><span class="lineno">13738</span>&#160;VmaDefragmentationContext_T::VmaDefragmentationContext_T(</div>
-<div class="line"><a name="l13739"></a><span class="lineno">13739</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
-<div class="line"><a name="l13740"></a><span class="lineno">13740</span>&#160;    uint32_t currFrameIndex,</div>
-<div class="line"><a name="l13741"></a><span class="lineno">13741</span>&#160;    uint32_t flags,</div>
-<div class="line"><a name="l13742"></a><span class="lineno">13742</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats) :</div>
-<div class="line"><a name="l13743"></a><span class="lineno">13743</span>&#160;    m_hAllocator(hAllocator),</div>
-<div class="line"><a name="l13744"></a><span class="lineno">13744</span>&#160;    m_CurrFrameIndex(currFrameIndex),</div>
-<div class="line"><a name="l13745"></a><span class="lineno">13745</span>&#160;    m_Flags(flags),</div>
-<div class="line"><a name="l13746"></a><span class="lineno">13746</span>&#160;    m_pStats(pStats),</div>
-<div class="line"><a name="l13747"></a><span class="lineno">13747</span>&#160;    m_CustomPoolContexts(VmaStlAllocator&lt;VmaBlockVectorDefragmentationContext*&gt;(hAllocator-&gt;GetAllocationCallbacks()))</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;    memset(m_DefaultPoolContexts, 0, <span class="keyword">sizeof</span>(m_DefaultPoolContexts));</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; </div>
-<div class="line"><a name="l13752"></a><span class="lineno">13752</span>&#160;VmaDefragmentationContext_T::~VmaDefragmentationContext_T()</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="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_CustomPoolContexts.size(); i--; )</div>
-<div class="line"><a name="l13755"></a><span class="lineno">13755</span>&#160;    {</div>
-<div class="line"><a name="l13756"></a><span class="lineno">13756</span>&#160;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_CustomPoolContexts[i];</div>
-<div class="line"><a name="l13757"></a><span class="lineno">13757</span>&#160;        pBlockVectorCtx-&gt;GetBlockVector()-&gt;DefragmentationEnd(pBlockVectorCtx, m_pStats);</div>
-<div class="line"><a name="l13758"></a><span class="lineno">13758</span>&#160;        vma_delete(m_hAllocator, pBlockVectorCtx);</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;    <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="l13724"></a><span class="lineno">13724</span>&#160;        m_pAlgorithm = vma_new(m_hAllocator, VmaDefragmentationAlgorithm_Generic)(</div>
+<div class="line"><a name="l13725"></a><span class="lineno">13725</span>&#160;            m_hAllocator, m_pBlockVector, m_CurrFrameIndex, overlappingMoveSupported);</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="keywordflow">if</span>(allAllocations)</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;        m_pAlgorithm-&gt;AddAll();</div>
+<div class="line"><a name="l13731"></a><span class="lineno">13731</span>&#160;    }</div>
+<div class="line"><a name="l13732"></a><span class="lineno">13732</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l13733"></a><span class="lineno">13733</span>&#160;    {</div>
+<div class="line"><a name="l13734"></a><span class="lineno">13734</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="l13735"></a><span class="lineno">13735</span>&#160;        {</div>
+<div class="line"><a name="l13736"></a><span class="lineno">13736</span>&#160;            m_pAlgorithm-&gt;AddAllocation(m_Allocations[i].hAlloc, m_Allocations[i].pChanged);</div>
+<div class="line"><a name="l13737"></a><span class="lineno">13737</span>&#160;        }</div>
+<div class="line"><a name="l13738"></a><span class="lineno">13738</span>&#160;    }</div>
+<div class="line"><a name="l13739"></a><span class="lineno">13739</span>&#160;}</div>
+<div class="line"><a name="l13740"></a><span class="lineno">13740</span>&#160; </div>
+<div class="line"><a name="l13742"></a><span class="lineno">13742</span>&#160;<span class="comment">// VmaDefragmentationContext</span></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;VmaDefragmentationContext_T::VmaDefragmentationContext_T(</div>
+<div class="line"><a name="l13745"></a><span class="lineno">13745</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> hAllocator,</div>
+<div class="line"><a name="l13746"></a><span class="lineno">13746</span>&#160;    uint32_t currFrameIndex,</div>
+<div class="line"><a name="l13747"></a><span class="lineno">13747</span>&#160;    uint32_t flags,</div>
+<div class="line"><a name="l13748"></a><span class="lineno">13748</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats) :</div>
+<div class="line"><a name="l13749"></a><span class="lineno">13749</span>&#160;    m_hAllocator(hAllocator),</div>
+<div class="line"><a name="l13750"></a><span class="lineno">13750</span>&#160;    m_CurrFrameIndex(currFrameIndex),</div>
+<div class="line"><a name="l13751"></a><span class="lineno">13751</span>&#160;    m_Flags(flags),</div>
+<div class="line"><a name="l13752"></a><span class="lineno">13752</span>&#160;    m_pStats(pStats),</div>
+<div class="line"><a name="l13753"></a><span class="lineno">13753</span>&#160;    m_CustomPoolContexts(VmaStlAllocator&lt;VmaBlockVectorDefragmentationContext*&gt;(hAllocator-&gt;GetAllocationCallbacks()))</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;    memset(m_DefaultPoolContexts, 0, <span class="keyword">sizeof</span>(m_DefaultPoolContexts));</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; </div>
+<div class="line"><a name="l13758"></a><span class="lineno">13758</span>&#160;VmaDefragmentationContext_T::~VmaDefragmentationContext_T()</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;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_CustomPoolContexts.size(); i--; )</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;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_DefaultPoolContexts[i];</div>
-<div class="line"><a name="l13763"></a><span class="lineno">13763</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx)</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;            pBlockVectorCtx-&gt;GetBlockVector()-&gt;DefragmentationEnd(pBlockVectorCtx, m_pStats);</div>
-<div class="line"><a name="l13766"></a><span class="lineno">13766</span>&#160;            vma_delete(m_hAllocator, pBlockVectorCtx);</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;    }</div>
-<div class="line"><a name="l13769"></a><span class="lineno">13769</span>&#160;}</div>
-<div class="line"><a name="l13770"></a><span class="lineno">13770</span>&#160; </div>
-<div class="line"><a name="l13771"></a><span class="lineno">13771</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationContext_T::AddPools(uint32_t poolCount, <a class="code" href="struct_vma_pool.html">VmaPool</a>* pPools)</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="keywordflow">for</span>(uint32_t poolIndex = 0; poolIndex &lt; poolCount; ++poolIndex)</div>
-<div class="line"><a name="l13774"></a><span class="lineno">13774</span>&#160;    {</div>
-<div class="line"><a name="l13775"></a><span class="lineno">13775</span>&#160;        <a class="code" href="struct_vma_pool.html">VmaPool</a> pool = pPools[poolIndex];</div>
-<div class="line"><a name="l13776"></a><span class="lineno">13776</span>&#160;        VMA_ASSERT(pool);</div>
-<div class="line"><a name="l13777"></a><span class="lineno">13777</span>&#160;        <span class="comment">// Pools with algorithm other than default are not defragmented.</span></div>
-<div class="line"><a name="l13778"></a><span class="lineno">13778</span>&#160;        <span class="keywordflow">if</span>(pool-&gt;m_BlockVector.GetAlgorithm() == 0)</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;            VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;</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;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_CustomPoolContexts.size(); i--; )</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="keywordflow">if</span>(m_CustomPoolContexts[i]-&gt;GetCustomPool() == pool)</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;                    pBlockVectorDefragCtx = m_CustomPoolContexts[i];</div>
-<div class="line"><a name="l13787"></a><span class="lineno">13787</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l13788"></a><span class="lineno">13788</span>&#160;                }</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;            </div>
-<div class="line"><a name="l13791"></a><span class="lineno">13791</span>&#160;            <span class="keywordflow">if</span>(!pBlockVectorDefragCtx)</div>
-<div class="line"><a name="l13792"></a><span class="lineno">13792</span>&#160;            {</div>
-<div class="line"><a name="l13793"></a><span class="lineno">13793</span>&#160;                pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(</div>
-<div class="line"><a name="l13794"></a><span class="lineno">13794</span>&#160;                    m_hAllocator,</div>
-<div class="line"><a name="l13795"></a><span class="lineno">13795</span>&#160;                    pool,</div>
-<div class="line"><a name="l13796"></a><span class="lineno">13796</span>&#160;                    &amp;pool-&gt;m_BlockVector,</div>
-<div class="line"><a name="l13797"></a><span class="lineno">13797</span>&#160;                    m_CurrFrameIndex);</div>
-<div class="line"><a name="l13798"></a><span class="lineno">13798</span>&#160;                m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);</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;            pBlockVectorDefragCtx-&gt;AddAll();</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;}</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="keywordtype">void</span> VmaDefragmentationContext_T::AddAllocations(</div>
-<div class="line"><a name="l13807"></a><span class="lineno">13807</span>&#160;    uint32_t allocationCount,</div>
-<div class="line"><a name="l13808"></a><span class="lineno">13808</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations,</div>
-<div class="line"><a name="l13809"></a><span class="lineno">13809</span>&#160;    VkBool32* pAllocationsChanged)</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="comment">// Dispatch pAllocations among defragmentators. Create them when necessary.</span></div>
-<div class="line"><a name="l13812"></a><span class="lineno">13812</span>&#160;    <span class="keywordflow">for</span>(uint32_t allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</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> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAlloc = pAllocations[allocIndex];</div>
-<div class="line"><a name="l13815"></a><span class="lineno">13815</span>&#160;        VMA_ASSERT(hAlloc);</div>
-<div class="line"><a name="l13816"></a><span class="lineno">13816</span>&#160;        <span class="comment">// DedicatedAlloc cannot be defragmented.</span></div>
-<div class="line"><a name="l13817"></a><span class="lineno">13817</span>&#160;        <span class="keywordflow">if</span>((hAlloc-&gt;GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK) &amp;&amp;</div>
-<div class="line"><a name="l13818"></a><span class="lineno">13818</span>&#160;            <span class="comment">// Lost allocation cannot be defragmented.</span></div>
-<div class="line"><a name="l13819"></a><span class="lineno">13819</span>&#160;            (hAlloc-&gt;GetLastUseFrameIndex() != VMA_FRAME_INDEX_LOST))</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;            VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;</div>
-<div class="line"><a name="l13822"></a><span class="lineno">13822</span>&#160; </div>
-<div class="line"><a name="l13823"></a><span class="lineno">13823</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="l13824"></a><span class="lineno">13824</span>&#160;            <span class="comment">// This allocation belongs to custom pool.</span></div>
-<div class="line"><a name="l13825"></a><span class="lineno">13825</span>&#160;            <span class="keywordflow">if</span>(hAllocPool != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l13826"></a><span class="lineno">13826</span>&#160;            {</div>
-<div class="line"><a name="l13827"></a><span class="lineno">13827</span>&#160;                <span class="comment">// Pools with algorithm other than default are not defragmented.</span></div>
-<div class="line"><a name="l13828"></a><span class="lineno">13828</span>&#160;                <span class="keywordflow">if</span>(hAllocPool-&gt;m_BlockVector.GetAlgorithm() == 0)</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="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_CustomPoolContexts.size(); i--; )</div>
-<div class="line"><a name="l13831"></a><span class="lineno">13831</span>&#160;                    {</div>
-<div class="line"><a name="l13832"></a><span class="lineno">13832</span>&#160;                        <span class="keywordflow">if</span>(m_CustomPoolContexts[i]-&gt;GetCustomPool() == hAllocPool)</div>
-<div class="line"><a name="l13833"></a><span class="lineno">13833</span>&#160;                        {</div>
-<div class="line"><a name="l13834"></a><span class="lineno">13834</span>&#160;                            pBlockVectorDefragCtx = m_CustomPoolContexts[i];</div>
-<div class="line"><a name="l13835"></a><span class="lineno">13835</span>&#160;                            <span class="keywordflow">break</span>;</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;                    }</div>
-<div class="line"><a name="l13838"></a><span class="lineno">13838</span>&#160;                    <span class="keywordflow">if</span>(!pBlockVectorDefragCtx)</div>
-<div class="line"><a name="l13839"></a><span class="lineno">13839</span>&#160;                    {</div>
-<div class="line"><a name="l13840"></a><span class="lineno">13840</span>&#160;                        pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(</div>
-<div class="line"><a name="l13841"></a><span class="lineno">13841</span>&#160;                            m_hAllocator,</div>
-<div class="line"><a name="l13842"></a><span class="lineno">13842</span>&#160;                            hAllocPool,</div>
-<div class="line"><a name="l13843"></a><span class="lineno">13843</span>&#160;                            &amp;hAllocPool-&gt;m_BlockVector,</div>
-<div class="line"><a name="l13844"></a><span class="lineno">13844</span>&#160;                            m_CurrFrameIndex);</div>
-<div class="line"><a name="l13845"></a><span class="lineno">13845</span>&#160;                        m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);</div>
-<div class="line"><a name="l13846"></a><span class="lineno">13846</span>&#160;                    }</div>
-<div class="line"><a name="l13847"></a><span class="lineno">13847</span>&#160;                }</div>
-<div class="line"><a name="l13848"></a><span class="lineno">13848</span>&#160;            }</div>
-<div class="line"><a name="l13849"></a><span class="lineno">13849</span>&#160;            <span class="comment">// This allocation belongs to default pool.</span></div>
-<div class="line"><a name="l13850"></a><span class="lineno">13850</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l13851"></a><span class="lineno">13851</span>&#160;            {</div>
-<div class="line"><a name="l13852"></a><span class="lineno">13852</span>&#160;                <span class="keyword">const</span> uint32_t memTypeIndex = hAlloc-&gt;GetMemoryTypeIndex();</div>
-<div class="line"><a name="l13853"></a><span class="lineno">13853</span>&#160;                pBlockVectorDefragCtx = m_DefaultPoolContexts[memTypeIndex];</div>
-<div class="line"><a name="l13854"></a><span class="lineno">13854</span>&#160;                <span class="keywordflow">if</span>(!pBlockVectorDefragCtx)</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;                    pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(</div>
-<div class="line"><a name="l13857"></a><span class="lineno">13857</span>&#160;                        m_hAllocator,</div>
-<div class="line"><a name="l13858"></a><span class="lineno">13858</span>&#160;                        VMA_NULL, <span class="comment">// hCustomPool</span></div>
-<div class="line"><a name="l13859"></a><span class="lineno">13859</span>&#160;                        m_hAllocator-&gt;m_pBlockVectors[memTypeIndex],</div>
-<div class="line"><a name="l13860"></a><span class="lineno">13860</span>&#160;                        m_CurrFrameIndex);</div>
-<div class="line"><a name="l13861"></a><span class="lineno">13861</span>&#160;                    m_DefaultPoolContexts[memTypeIndex] = pBlockVectorDefragCtx;</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;            }</div>
-<div class="line"><a name="l13864"></a><span class="lineno">13864</span>&#160; </div>
-<div class="line"><a name="l13865"></a><span class="lineno">13865</span>&#160;            <span class="keywordflow">if</span>(pBlockVectorDefragCtx)</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;                VkBool32* <span class="keyword">const</span> pChanged = (pAllocationsChanged != VMA_NULL) ?</div>
-<div class="line"><a name="l13868"></a><span class="lineno">13868</span>&#160;                    &amp;pAllocationsChanged[allocIndex] : VMA_NULL;</div>
-<div class="line"><a name="l13869"></a><span class="lineno">13869</span>&#160;                pBlockVectorDefragCtx-&gt;AddAllocation(hAlloc, pChanged);</div>
-<div class="line"><a name="l13870"></a><span class="lineno">13870</span>&#160;            }</div>
-<div class="line"><a name="l13871"></a><span class="lineno">13871</span>&#160;        }</div>
-<div class="line"><a name="l13872"></a><span class="lineno">13872</span>&#160;    }</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; </div>
-<div class="line"><a name="l13875"></a><span class="lineno">13875</span>&#160;VkResult VmaDefragmentationContext_T::Defragment(</div>
-<div class="line"><a name="l13876"></a><span class="lineno">13876</span>&#160;    VkDeviceSize maxCpuBytesToMove, uint32_t maxCpuAllocationsToMove,</div>
-<div class="line"><a name="l13877"></a><span class="lineno">13877</span>&#160;    VkDeviceSize maxGpuBytesToMove, uint32_t maxGpuAllocationsToMove,</div>
-<div class="line"><a name="l13878"></a><span class="lineno">13878</span>&#160;    VkCommandBuffer commandBuffer, <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats)</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="keywordflow">if</span>(pStats)</div>
-<div class="line"><a name="l13881"></a><span class="lineno">13881</span>&#160;    {</div>
-<div class="line"><a name="l13882"></a><span class="lineno">13882</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="l13883"></a><span class="lineno">13883</span>&#160;    }</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="keywordflow">if</span>(commandBuffer == VK_NULL_HANDLE)</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;        maxGpuBytesToMove = 0;</div>
-<div class="line"><a name="l13888"></a><span class="lineno">13888</span>&#160;        maxGpuAllocationsToMove = 0;</div>
+<div class="line"><a name="l13762"></a><span class="lineno">13762</span>&#160;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_CustomPoolContexts[i];</div>
+<div class="line"><a name="l13763"></a><span class="lineno">13763</span>&#160;        pBlockVectorCtx-&gt;GetBlockVector()-&gt;DefragmentationEnd(pBlockVectorCtx, m_pStats);</div>
+<div class="line"><a name="l13764"></a><span class="lineno">13764</span>&#160;        vma_delete(m_hAllocator, pBlockVectorCtx);</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;    <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="l13767"></a><span class="lineno">13767</span>&#160;    {</div>
+<div class="line"><a name="l13768"></a><span class="lineno">13768</span>&#160;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_DefaultPoolContexts[i];</div>
+<div class="line"><a name="l13769"></a><span class="lineno">13769</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx)</div>
+<div class="line"><a name="l13770"></a><span class="lineno">13770</span>&#160;        {</div>
+<div class="line"><a name="l13771"></a><span class="lineno">13771</span>&#160;            pBlockVectorCtx-&gt;GetBlockVector()-&gt;DefragmentationEnd(pBlockVectorCtx, m_pStats);</div>
+<div class="line"><a name="l13772"></a><span class="lineno">13772</span>&#160;            vma_delete(m_hAllocator, pBlockVectorCtx);</div>
+<div class="line"><a name="l13773"></a><span class="lineno">13773</span>&#160;        }</div>
+<div class="line"><a name="l13774"></a><span class="lineno">13774</span>&#160;    }</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; </div>
+<div class="line"><a name="l13777"></a><span class="lineno">13777</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationContext_T::AddPools(uint32_t poolCount, <a class="code" href="struct_vma_pool.html">VmaPool</a>* pPools)</div>
+<div class="line"><a name="l13778"></a><span class="lineno">13778</span>&#160;{</div>
+<div class="line"><a name="l13779"></a><span class="lineno">13779</span>&#160;    <span class="keywordflow">for</span>(uint32_t poolIndex = 0; poolIndex &lt; poolCount; ++poolIndex)</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;        <a class="code" href="struct_vma_pool.html">VmaPool</a> pool = pPools[poolIndex];</div>
+<div class="line"><a name="l13782"></a><span class="lineno">13782</span>&#160;        VMA_ASSERT(pool);</div>
+<div class="line"><a name="l13783"></a><span class="lineno">13783</span>&#160;        <span class="comment">// Pools with algorithm other than default are not defragmented.</span></div>
+<div class="line"><a name="l13784"></a><span class="lineno">13784</span>&#160;        <span class="keywordflow">if</span>(pool-&gt;m_BlockVector.GetAlgorithm() == 0)</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;            VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;</div>
+<div class="line"><a name="l13787"></a><span class="lineno">13787</span>&#160;            </div>
+<div class="line"><a name="l13788"></a><span class="lineno">13788</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = m_CustomPoolContexts.size(); i--; )</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;                <span class="keywordflow">if</span>(m_CustomPoolContexts[i]-&gt;GetCustomPool() == pool)</div>
+<div class="line"><a name="l13791"></a><span class="lineno">13791</span>&#160;                {</div>
+<div class="line"><a name="l13792"></a><span class="lineno">13792</span>&#160;                    pBlockVectorDefragCtx = m_CustomPoolContexts[i];</div>
+<div class="line"><a name="l13793"></a><span class="lineno">13793</span>&#160;                    <span class="keywordflow">break</span>;</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;            }</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;            <span class="keywordflow">if</span>(!pBlockVectorDefragCtx)</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;                pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(</div>
+<div class="line"><a name="l13800"></a><span class="lineno">13800</span>&#160;                    m_hAllocator,</div>
+<div class="line"><a name="l13801"></a><span class="lineno">13801</span>&#160;                    pool,</div>
+<div class="line"><a name="l13802"></a><span class="lineno">13802</span>&#160;                    &amp;pool-&gt;m_BlockVector,</div>
+<div class="line"><a name="l13803"></a><span class="lineno">13803</span>&#160;                    m_CurrFrameIndex);</div>
+<div class="line"><a name="l13804"></a><span class="lineno">13804</span>&#160;                m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);</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; </div>
+<div class="line"><a name="l13807"></a><span class="lineno">13807</span>&#160;            pBlockVectorDefragCtx-&gt;AddAll();</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;    }</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; </div>
+<div class="line"><a name="l13812"></a><span class="lineno">13812</span>&#160;<span class="keywordtype">void</span> VmaDefragmentationContext_T::AddAllocations(</div>
+<div class="line"><a name="l13813"></a><span class="lineno">13813</span>&#160;    uint32_t allocationCount,</div>
+<div class="line"><a name="l13814"></a><span class="lineno">13814</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations,</div>
+<div class="line"><a name="l13815"></a><span class="lineno">13815</span>&#160;    VkBool32* pAllocationsChanged)</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;    <span class="comment">// Dispatch pAllocations among defragmentators. Create them when necessary.</span></div>
+<div class="line"><a name="l13818"></a><span class="lineno">13818</span>&#160;    <span class="keywordflow">for</span>(uint32_t allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</div>
+<div class="line"><a name="l13819"></a><span class="lineno">13819</span>&#160;    {</div>
+<div class="line"><a name="l13820"></a><span class="lineno">13820</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="l13821"></a><span class="lineno">13821</span>&#160;        VMA_ASSERT(hAlloc);</div>
+<div class="line"><a name="l13822"></a><span class="lineno">13822</span>&#160;        <span class="comment">// DedicatedAlloc cannot be defragmented.</span></div>
+<div class="line"><a name="l13823"></a><span class="lineno">13823</span>&#160;        <span class="keywordflow">if</span>((hAlloc-&gt;GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK) &amp;&amp;</div>
+<div class="line"><a name="l13824"></a><span class="lineno">13824</span>&#160;            <span class="comment">// Lost allocation cannot be defragmented.</span></div>
+<div class="line"><a name="l13825"></a><span class="lineno">13825</span>&#160;            (hAlloc-&gt;GetLastUseFrameIndex() != VMA_FRAME_INDEX_LOST))</div>
+<div class="line"><a name="l13826"></a><span class="lineno">13826</span>&#160;        {</div>
+<div class="line"><a name="l13827"></a><span class="lineno">13827</span>&#160;            VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;</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;            <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="l13830"></a><span class="lineno">13830</span>&#160;            <span class="comment">// This allocation belongs to custom pool.</span></div>
+<div class="line"><a name="l13831"></a><span class="lineno">13831</span>&#160;            <span class="keywordflow">if</span>(hAllocPool != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l13832"></a><span class="lineno">13832</span>&#160;            {</div>
+<div class="line"><a name="l13833"></a><span class="lineno">13833</span>&#160;                <span class="comment">// Pools with algorithm other than default are not defragmented.</span></div>
+<div class="line"><a name="l13834"></a><span class="lineno">13834</span>&#160;                <span class="keywordflow">if</span>(hAllocPool-&gt;m_BlockVector.GetAlgorithm() == 0)</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">for</span>(<span class="keywordtype">size_t</span> i = m_CustomPoolContexts.size(); i--; )</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;                        <span class="keywordflow">if</span>(m_CustomPoolContexts[i]-&gt;GetCustomPool() == hAllocPool)</div>
+<div class="line"><a name="l13839"></a><span class="lineno">13839</span>&#160;                        {</div>
+<div class="line"><a name="l13840"></a><span class="lineno">13840</span>&#160;                            pBlockVectorDefragCtx = m_CustomPoolContexts[i];</div>
+<div class="line"><a name="l13841"></a><span class="lineno">13841</span>&#160;                            <span class="keywordflow">break</span>;</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;                    }</div>
+<div class="line"><a name="l13844"></a><span class="lineno">13844</span>&#160;                    <span class="keywordflow">if</span>(!pBlockVectorDefragCtx)</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;                        pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(</div>
+<div class="line"><a name="l13847"></a><span class="lineno">13847</span>&#160;                            m_hAllocator,</div>
+<div class="line"><a name="l13848"></a><span class="lineno">13848</span>&#160;                            hAllocPool,</div>
+<div class="line"><a name="l13849"></a><span class="lineno">13849</span>&#160;                            &amp;hAllocPool-&gt;m_BlockVector,</div>
+<div class="line"><a name="l13850"></a><span class="lineno">13850</span>&#160;                            m_CurrFrameIndex);</div>
+<div class="line"><a name="l13851"></a><span class="lineno">13851</span>&#160;                        m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);</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;            <span class="comment">// This allocation belongs to default pool.</span></div>
+<div class="line"><a name="l13856"></a><span class="lineno">13856</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l13857"></a><span class="lineno">13857</span>&#160;            {</div>
+<div class="line"><a name="l13858"></a><span class="lineno">13858</span>&#160;                <span class="keyword">const</span> uint32_t memTypeIndex = hAlloc-&gt;GetMemoryTypeIndex();</div>
+<div class="line"><a name="l13859"></a><span class="lineno">13859</span>&#160;                pBlockVectorDefragCtx = m_DefaultPoolContexts[memTypeIndex];</div>
+<div class="line"><a name="l13860"></a><span class="lineno">13860</span>&#160;                <span class="keywordflow">if</span>(!pBlockVectorDefragCtx)</div>
+<div class="line"><a name="l13861"></a><span class="lineno">13861</span>&#160;                {</div>
+<div class="line"><a name="l13862"></a><span class="lineno">13862</span>&#160;                    pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(</div>
+<div class="line"><a name="l13863"></a><span class="lineno">13863</span>&#160;                        m_hAllocator,</div>
+<div class="line"><a name="l13864"></a><span class="lineno">13864</span>&#160;                        VMA_NULL, <span class="comment">// hCustomPool</span></div>
+<div class="line"><a name="l13865"></a><span class="lineno">13865</span>&#160;                        m_hAllocator-&gt;m_pBlockVectors[memTypeIndex],</div>
+<div class="line"><a name="l13866"></a><span class="lineno">13866</span>&#160;                        m_CurrFrameIndex);</div>
+<div class="line"><a name="l13867"></a><span class="lineno">13867</span>&#160;                    m_DefaultPoolContexts[memTypeIndex] = pBlockVectorDefragCtx;</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; </div>
+<div class="line"><a name="l13871"></a><span class="lineno">13871</span>&#160;            <span class="keywordflow">if</span>(pBlockVectorDefragCtx)</div>
+<div class="line"><a name="l13872"></a><span class="lineno">13872</span>&#160;            {</div>
+<div class="line"><a name="l13873"></a><span class="lineno">13873</span>&#160;                VkBool32* <span class="keyword">const</span> pChanged = (pAllocationsChanged != VMA_NULL) ?</div>
+<div class="line"><a name="l13874"></a><span class="lineno">13874</span>&#160;                    &amp;pAllocationsChanged[allocIndex] : VMA_NULL;</div>
+<div class="line"><a name="l13875"></a><span class="lineno">13875</span>&#160;                pBlockVectorDefragCtx-&gt;AddAllocation(hAlloc, pChanged);</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;        }</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;}</div>
+<div class="line"><a name="l13880"></a><span class="lineno">13880</span>&#160; </div>
+<div class="line"><a name="l13881"></a><span class="lineno">13881</span>&#160;VkResult VmaDefragmentationContext_T::Defragment(</div>
+<div class="line"><a name="l13882"></a><span class="lineno">13882</span>&#160;    VkDeviceSize maxCpuBytesToMove, uint32_t maxCpuAllocationsToMove,</div>
+<div class="line"><a name="l13883"></a><span class="lineno">13883</span>&#160;    VkDeviceSize maxGpuBytesToMove, uint32_t maxGpuAllocationsToMove,</div>
+<div class="line"><a name="l13884"></a><span class="lineno">13884</span>&#160;    VkCommandBuffer commandBuffer, <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats)</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="keywordflow">if</span>(pStats)</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;        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="l13889"></a><span class="lineno">13889</span>&#160;    }</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;    VkResult res = VK_SUCCESS;</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;    <span class="comment">// Process default pools.</span></div>
-<div class="line"><a name="l13894"></a><span class="lineno">13894</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0;</div>
-<div class="line"><a name="l13895"></a><span class="lineno">13895</span>&#160;        memTypeIndex &lt; m_hAllocator-&gt;GetMemoryTypeCount() &amp;&amp; res &gt;= VK_SUCCESS;</div>
-<div class="line"><a name="l13896"></a><span class="lineno">13896</span>&#160;        ++memTypeIndex)</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;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_DefaultPoolContexts[memTypeIndex];</div>
-<div class="line"><a name="l13899"></a><span class="lineno">13899</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx)</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;            VMA_ASSERT(pBlockVectorCtx-&gt;GetBlockVector());</div>
-<div class="line"><a name="l13902"></a><span class="lineno">13902</span>&#160;            pBlockVectorCtx-&gt;GetBlockVector()-&gt;Defragment(</div>
-<div class="line"><a name="l13903"></a><span class="lineno">13903</span>&#160;                pBlockVectorCtx,</div>
-<div class="line"><a name="l13904"></a><span class="lineno">13904</span>&#160;                pStats,</div>
-<div class="line"><a name="l13905"></a><span class="lineno">13905</span>&#160;                maxCpuBytesToMove, maxCpuAllocationsToMove,</div>
-<div class="line"><a name="l13906"></a><span class="lineno">13906</span>&#160;                maxGpuBytesToMove, maxGpuAllocationsToMove,</div>
-<div class="line"><a name="l13907"></a><span class="lineno">13907</span>&#160;                commandBuffer);</div>
-<div class="line"><a name="l13908"></a><span class="lineno">13908</span>&#160;            <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;res != VK_SUCCESS)</div>
-<div class="line"><a name="l13909"></a><span class="lineno">13909</span>&#160;            {</div>
-<div class="line"><a name="l13910"></a><span class="lineno">13910</span>&#160;                res = pBlockVectorCtx-&gt;res;</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;        }</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;    <span class="comment">// Process custom pools.</span></div>
-<div class="line"><a name="l13916"></a><span class="lineno">13916</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="l13917"></a><span class="lineno">13917</span>&#160;        customCtxIndex &lt; customCtxCount &amp;&amp; res &gt;= VK_SUCCESS;</div>
-<div class="line"><a name="l13918"></a><span class="lineno">13918</span>&#160;        ++customCtxIndex)</div>
-<div class="line"><a name="l13919"></a><span class="lineno">13919</span>&#160;    {</div>
-<div class="line"><a name="l13920"></a><span class="lineno">13920</span>&#160;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_CustomPoolContexts[customCtxIndex];</div>
-<div class="line"><a name="l13921"></a><span class="lineno">13921</span>&#160;        VMA_ASSERT(pBlockVectorCtx &amp;&amp; pBlockVectorCtx-&gt;GetBlockVector());</div>
-<div class="line"><a name="l13922"></a><span class="lineno">13922</span>&#160;        pBlockVectorCtx-&gt;GetBlockVector()-&gt;Defragment(</div>
-<div class="line"><a name="l13923"></a><span class="lineno">13923</span>&#160;            pBlockVectorCtx,</div>
-<div class="line"><a name="l13924"></a><span class="lineno">13924</span>&#160;            pStats,</div>
-<div class="line"><a name="l13925"></a><span class="lineno">13925</span>&#160;            maxCpuBytesToMove, maxCpuAllocationsToMove,</div>
-<div class="line"><a name="l13926"></a><span class="lineno">13926</span>&#160;            maxGpuBytesToMove, maxGpuAllocationsToMove,</div>
-<div class="line"><a name="l13927"></a><span class="lineno">13927</span>&#160;            commandBuffer);</div>
-<div class="line"><a name="l13928"></a><span class="lineno">13928</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;res != VK_SUCCESS)</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;            res = pBlockVectorCtx-&gt;res;</div>
-<div class="line"><a name="l13931"></a><span class="lineno">13931</span>&#160;        }</div>
-<div class="line"><a name="l13932"></a><span class="lineno">13932</span>&#160;    }</div>
-<div class="line"><a name="l13933"></a><span class="lineno">13933</span>&#160; </div>
-<div class="line"><a name="l13934"></a><span class="lineno">13934</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l13935"></a><span class="lineno">13935</span>&#160;}</div>
-<div class="line"><a name="l13936"></a><span class="lineno">13936</span>&#160; </div>
-<div class="line"><a name="l13938"></a><span class="lineno">13938</span>&#160;<span class="comment">// VmaRecorder</span></div>
+<div class="line"><a name="l13891"></a><span class="lineno">13891</span>&#160;    <span class="keywordflow">if</span>(commandBuffer == VK_NULL_HANDLE)</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;        maxGpuBytesToMove = 0;</div>
+<div class="line"><a name="l13894"></a><span class="lineno">13894</span>&#160;        maxGpuAllocationsToMove = 0;</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; </div>
+<div class="line"><a name="l13897"></a><span class="lineno">13897</span>&#160;    VkResult res = VK_SUCCESS;</div>
+<div class="line"><a name="l13898"></a><span class="lineno">13898</span>&#160; </div>
+<div class="line"><a name="l13899"></a><span class="lineno">13899</span>&#160;    <span class="comment">// Process default pools.</span></div>
+<div class="line"><a name="l13900"></a><span class="lineno">13900</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0;</div>
+<div class="line"><a name="l13901"></a><span class="lineno">13901</span>&#160;        memTypeIndex &lt; m_hAllocator-&gt;GetMemoryTypeCount() &amp;&amp; res &gt;= VK_SUCCESS;</div>
+<div class="line"><a name="l13902"></a><span class="lineno">13902</span>&#160;        ++memTypeIndex)</div>
+<div class="line"><a name="l13903"></a><span class="lineno">13903</span>&#160;    {</div>
+<div class="line"><a name="l13904"></a><span class="lineno">13904</span>&#160;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_DefaultPoolContexts[memTypeIndex];</div>
+<div class="line"><a name="l13905"></a><span class="lineno">13905</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx)</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;            VMA_ASSERT(pBlockVectorCtx-&gt;GetBlockVector());</div>
+<div class="line"><a name="l13908"></a><span class="lineno">13908</span>&#160;            pBlockVectorCtx-&gt;GetBlockVector()-&gt;Defragment(</div>
+<div class="line"><a name="l13909"></a><span class="lineno">13909</span>&#160;                pBlockVectorCtx,</div>
+<div class="line"><a name="l13910"></a><span class="lineno">13910</span>&#160;                pStats,</div>
+<div class="line"><a name="l13911"></a><span class="lineno">13911</span>&#160;                maxCpuBytesToMove, maxCpuAllocationsToMove,</div>
+<div class="line"><a name="l13912"></a><span class="lineno">13912</span>&#160;                maxGpuBytesToMove, maxGpuAllocationsToMove,</div>
+<div class="line"><a name="l13913"></a><span class="lineno">13913</span>&#160;                commandBuffer);</div>
+<div class="line"><a name="l13914"></a><span class="lineno">13914</span>&#160;            <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;res != VK_SUCCESS)</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;                res = pBlockVectorCtx-&gt;res;</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;    }</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="comment">// Process custom pools.</span></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> customCtxIndex = 0, customCtxCount = m_CustomPoolContexts.size();</div>
+<div class="line"><a name="l13923"></a><span class="lineno">13923</span>&#160;        customCtxIndex &lt; customCtxCount &amp;&amp; res &gt;= VK_SUCCESS;</div>
+<div class="line"><a name="l13924"></a><span class="lineno">13924</span>&#160;        ++customCtxIndex)</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;        VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_CustomPoolContexts[customCtxIndex];</div>
+<div class="line"><a name="l13927"></a><span class="lineno">13927</span>&#160;        VMA_ASSERT(pBlockVectorCtx &amp;&amp; pBlockVectorCtx-&gt;GetBlockVector());</div>
+<div class="line"><a name="l13928"></a><span class="lineno">13928</span>&#160;        pBlockVectorCtx-&gt;GetBlockVector()-&gt;Defragment(</div>
+<div class="line"><a name="l13929"></a><span class="lineno">13929</span>&#160;            pBlockVectorCtx,</div>
+<div class="line"><a name="l13930"></a><span class="lineno">13930</span>&#160;            pStats,</div>
+<div class="line"><a name="l13931"></a><span class="lineno">13931</span>&#160;            maxCpuBytesToMove, maxCpuAllocationsToMove,</div>
+<div class="line"><a name="l13932"></a><span class="lineno">13932</span>&#160;            maxGpuBytesToMove, maxGpuAllocationsToMove,</div>
+<div class="line"><a name="l13933"></a><span class="lineno">13933</span>&#160;            commandBuffer);</div>
+<div class="line"><a name="l13934"></a><span class="lineno">13934</span>&#160;        <span class="keywordflow">if</span>(pBlockVectorCtx-&gt;res != VK_SUCCESS)</div>
+<div class="line"><a name="l13935"></a><span class="lineno">13935</span>&#160;        {</div>
+<div class="line"><a name="l13936"></a><span class="lineno">13936</span>&#160;            res = pBlockVectorCtx-&gt;res;</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="preprocessor">#if VMA_RECORDING_ENABLED</span></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;VmaRecorder::VmaRecorder() :</div>
-<div class="line"><a name="l13943"></a><span class="lineno">13943</span>&#160;    m_UseMutex(true),</div>
-<div class="line"><a name="l13944"></a><span class="lineno">13944</span>&#160;    m_Flags(0),</div>
-<div class="line"><a name="l13945"></a><span class="lineno">13945</span>&#160;    m_File(VMA_NULL),</div>
-<div class="line"><a name="l13946"></a><span class="lineno">13946</span>&#160;    m_Freq(INT64_MAX),</div>
-<div class="line"><a name="l13947"></a><span class="lineno">13947</span>&#160;    m_StartCounter(INT64_MAX)</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;}</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;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="l13952"></a><span class="lineno">13952</span>&#160;{</div>
-<div class="line"><a name="l13953"></a><span class="lineno">13953</span>&#160;    m_UseMutex = useMutex;</div>
-<div class="line"><a name="l13954"></a><span class="lineno">13954</span>&#160;    m_Flags = settings.<a class="code" href="struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a">flags</a>;</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;    QueryPerformanceFrequency((LARGE_INTEGER*)&amp;m_Freq);</div>
-<div class="line"><a name="l13957"></a><span class="lineno">13957</span>&#160;    QueryPerformanceCounter((LARGE_INTEGER*)&amp;m_StartCounter);</div>
-<div class="line"><a name="l13958"></a><span class="lineno">13958</span>&#160; </div>
-<div class="line"><a name="l13959"></a><span class="lineno">13959</span>&#160;    <span class="comment">// Open file for writing.</span></div>
-<div class="line"><a name="l13960"></a><span class="lineno">13960</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="l13961"></a><span class="lineno">13961</span>&#160;    <span class="keywordflow">if</span>(err != 0)</div>
-<div class="line"><a name="l13962"></a><span class="lineno">13962</span>&#160;    {</div>
-<div class="line"><a name="l13963"></a><span class="lineno">13963</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_INITIALIZATION_FAILED;</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; </div>
-<div class="line"><a name="l13966"></a><span class="lineno">13966</span>&#160;    <span class="comment">// Write header.</span></div>
-<div class="line"><a name="l13967"></a><span class="lineno">13967</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="l13968"></a><span class="lineno">13968</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="l13969"></a><span class="lineno">13969</span>&#160; </div>
-<div class="line"><a name="l13970"></a><span class="lineno">13970</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</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; </div>
-<div class="line"><a name="l13973"></a><span class="lineno">13973</span>&#160;VmaRecorder::~VmaRecorder()</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="keywordflow">if</span>(m_File != VMA_NULL)</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;        fclose(m_File);</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;}</div>
-<div class="line"><a name="l13980"></a><span class="lineno">13980</span>&#160; </div>
-<div class="line"><a name="l13981"></a><span class="lineno">13981</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreateAllocator(uint32_t frameIndex)</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;    CallParams callParams;</div>
-<div class="line"><a name="l13984"></a><span class="lineno">13984</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l13987"></a><span class="lineno">13987</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="l13988"></a><span class="lineno">13988</span>&#160;    Flush();</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; </div>
-<div class="line"><a name="l13991"></a><span class="lineno">13991</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDestroyAllocator(uint32_t frameIndex)</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;    CallParams callParams;</div>
-<div class="line"><a name="l13994"></a><span class="lineno">13994</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l13997"></a><span class="lineno">13997</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="l13998"></a><span class="lineno">13998</span>&#160;    Flush();</div>
-<div class="line"><a name="l13999"></a><span class="lineno">13999</span>&#160;}</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;<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="l14002"></a><span class="lineno">14002</span>&#160;{</div>
-<div class="line"><a name="l14003"></a><span class="lineno">14003</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l14004"></a><span class="lineno">14004</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14007"></a><span class="lineno">14007</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="l14008"></a><span class="lineno">14008</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a>,</div>
-<div class="line"><a name="l14009"></a><span class="lineno">14009</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">flags</a>,</div>
-<div class="line"><a name="l14010"></a><span class="lineno">14010</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676">blockSize</a>,</div>
-<div class="line"><a name="l14011"></a><span class="lineno">14011</span>&#160;        (uint64_t)createInfo.<a class="code" href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae">minBlockCount</a>,</div>
-<div class="line"><a name="l14012"></a><span class="lineno">14012</span>&#160;        (uint64_t)createInfo.<a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a>,</div>
-<div class="line"><a name="l14013"></a><span class="lineno">14013</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa">frameInUseCount</a>,</div>
-<div class="line"><a name="l14014"></a><span class="lineno">14014</span>&#160;        pool);</div>
-<div class="line"><a name="l14015"></a><span class="lineno">14015</span>&#160;    Flush();</div>
-<div class="line"><a name="l14016"></a><span class="lineno">14016</span>&#160;}</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="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="l14019"></a><span class="lineno">14019</span>&#160;{</div>
-<div class="line"><a name="l14020"></a><span class="lineno">14020</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l14021"></a><span class="lineno">14021</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14024"></a><span class="lineno">14024</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="l14025"></a><span class="lineno">14025</span>&#160;        pool);</div>
-<div class="line"><a name="l14026"></a><span class="lineno">14026</span>&#160;    Flush();</div>
-<div class="line"><a name="l14027"></a><span class="lineno">14027</span>&#160;}</div>
+<div class="line"><a name="l13940"></a><span class="lineno">13940</span>&#160;    <span class="keywordflow">return</span> res;</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; </div>
+<div class="line"><a name="l13944"></a><span class="lineno">13944</span>&#160;<span class="comment">// VmaRecorder</span></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="preprocessor">#if VMA_RECORDING_ENABLED</span></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;VmaRecorder::VmaRecorder() :</div>
+<div class="line"><a name="l13949"></a><span class="lineno">13949</span>&#160;    m_UseMutex(true),</div>
+<div class="line"><a name="l13950"></a><span class="lineno">13950</span>&#160;    m_Flags(0),</div>
+<div class="line"><a name="l13951"></a><span class="lineno">13951</span>&#160;    m_File(VMA_NULL),</div>
+<div class="line"><a name="l13952"></a><span class="lineno">13952</span>&#160;    m_Freq(INT64_MAX),</div>
+<div class="line"><a name="l13953"></a><span class="lineno">13953</span>&#160;    m_StartCounter(INT64_MAX)</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;}</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;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="l13958"></a><span class="lineno">13958</span>&#160;{</div>
+<div class="line"><a name="l13959"></a><span class="lineno">13959</span>&#160;    m_UseMutex = useMutex;</div>
+<div class="line"><a name="l13960"></a><span class="lineno">13960</span>&#160;    m_Flags = settings.<a class="code" href="struct_vma_record_settings.html#ad8fdcc92119ae7a8c08c1a564c01d63a">flags</a>;</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;    QueryPerformanceFrequency((LARGE_INTEGER*)&amp;m_Freq);</div>
+<div class="line"><a name="l13963"></a><span class="lineno">13963</span>&#160;    QueryPerformanceCounter((LARGE_INTEGER*)&amp;m_StartCounter);</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="comment">// Open file for writing.</span></div>
+<div class="line"><a name="l13966"></a><span class="lineno">13966</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="l13967"></a><span class="lineno">13967</span>&#160;    <span class="keywordflow">if</span>(err != 0)</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;        <span class="keywordflow">return</span> VK_ERROR_INITIALIZATION_FAILED;</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;    <span class="comment">// Write header.</span></div>
+<div class="line"><a name="l13973"></a><span class="lineno">13973</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="l13974"></a><span class="lineno">13974</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="l13975"></a><span class="lineno">13975</span>&#160; </div>
+<div class="line"><a name="l13976"></a><span class="lineno">13976</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l13977"></a><span class="lineno">13977</span>&#160;}</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;VmaRecorder::~VmaRecorder()</div>
+<div class="line"><a name="l13980"></a><span class="lineno">13980</span>&#160;{</div>
+<div class="line"><a name="l13981"></a><span class="lineno">13981</span>&#160;    <span class="keywordflow">if</span>(m_File != VMA_NULL)</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;        fclose(m_File);</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;<span class="keywordtype">void</span> VmaRecorder::RecordCreateAllocator(uint32_t frameIndex)</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;    CallParams callParams;</div>
+<div class="line"><a name="l13990"></a><span class="lineno">13990</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l13993"></a><span class="lineno">13993</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="l13994"></a><span class="lineno">13994</span>&#160;    Flush();</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; </div>
+<div class="line"><a name="l13997"></a><span class="lineno">13997</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDestroyAllocator(uint32_t frameIndex)</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;    CallParams callParams;</div>
+<div class="line"><a name="l14000"></a><span class="lineno">14000</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14003"></a><span class="lineno">14003</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="l14004"></a><span class="lineno">14004</span>&#160;    Flush();</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; </div>
+<div class="line"><a name="l14007"></a><span class="lineno">14007</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="l14008"></a><span class="lineno">14008</span>&#160;{</div>
+<div class="line"><a name="l14009"></a><span class="lineno">14009</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l14010"></a><span class="lineno">14010</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14013"></a><span class="lineno">14013</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="l14014"></a><span class="lineno">14014</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a>,</div>
+<div class="line"><a name="l14015"></a><span class="lineno">14015</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">flags</a>,</div>
+<div class="line"><a name="l14016"></a><span class="lineno">14016</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676">blockSize</a>,</div>
+<div class="line"><a name="l14017"></a><span class="lineno">14017</span>&#160;        (uint64_t)createInfo.<a class="code" href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae">minBlockCount</a>,</div>
+<div class="line"><a name="l14018"></a><span class="lineno">14018</span>&#160;        (uint64_t)createInfo.<a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a>,</div>
+<div class="line"><a name="l14019"></a><span class="lineno">14019</span>&#160;        createInfo.<a class="code" href="struct_vma_pool_create_info.html#a9437e43ffbb644dbbf7fc4e50cfad6aa">frameInUseCount</a>,</div>
+<div class="line"><a name="l14020"></a><span class="lineno">14020</span>&#160;        pool);</div>
+<div class="line"><a name="l14021"></a><span class="lineno">14021</span>&#160;    Flush();</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; </div>
+<div class="line"><a name="l14024"></a><span class="lineno">14024</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="l14025"></a><span class="lineno">14025</span>&#160;{</div>
+<div class="line"><a name="l14026"></a><span class="lineno">14026</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l14027"></a><span class="lineno">14027</span>&#160;    GetBasicParams(callParams);</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;<span class="keywordtype">void</span> VmaRecorder::RecordAllocateMemory(uint32_t frameIndex,</div>
-<div class="line"><a name="l14030"></a><span class="lineno">14030</span>&#160;        <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
-<div class="line"><a name="l14031"></a><span class="lineno">14031</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="l14032"></a><span class="lineno">14032</span>&#160;        <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14035"></a><span class="lineno">14035</span>&#160;    GetBasicParams(callParams);</div>
-<div class="line"><a name="l14036"></a><span class="lineno">14036</span>&#160; </div>
-<div class="line"><a name="l14037"></a><span class="lineno">14037</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14038"></a><span class="lineno">14038</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="l14039"></a><span class="lineno">14039</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="l14040"></a><span class="lineno">14040</span>&#160;        vkMemReq.size,</div>
-<div class="line"><a name="l14041"></a><span class="lineno">14041</span>&#160;        vkMemReq.alignment,</div>
-<div class="line"><a name="l14042"></a><span class="lineno">14042</span>&#160;        vkMemReq.memoryTypeBits,</div>
-<div class="line"><a name="l14043"></a><span class="lineno">14043</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
-<div class="line"><a name="l14044"></a><span class="lineno">14044</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
-<div class="line"><a name="l14045"></a><span class="lineno">14045</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
-<div class="line"><a name="l14046"></a><span class="lineno">14046</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
-<div class="line"><a name="l14047"></a><span class="lineno">14047</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
-<div class="line"><a name="l14048"></a><span class="lineno">14048</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
-<div class="line"><a name="l14049"></a><span class="lineno">14049</span>&#160;        allocation,</div>
-<div class="line"><a name="l14050"></a><span class="lineno">14050</span>&#160;        userDataStr.GetString());</div>
-<div class="line"><a name="l14051"></a><span class="lineno">14051</span>&#160;    Flush();</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; </div>
-<div class="line"><a name="l14054"></a><span class="lineno">14054</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordAllocateMemoryPages(uint32_t frameIndex,</div>
-<div class="line"><a name="l14055"></a><span class="lineno">14055</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
-<div class="line"><a name="l14056"></a><span class="lineno">14056</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="l14057"></a><span class="lineno">14057</span>&#160;    uint64_t allocationCount,</div>
-<div class="line"><a name="l14058"></a><span class="lineno">14058</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14061"></a><span class="lineno">14061</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14064"></a><span class="lineno">14064</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="l14065"></a><span class="lineno">14065</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="l14066"></a><span class="lineno">14066</span>&#160;        vkMemReq.size,</div>
-<div class="line"><a name="l14067"></a><span class="lineno">14067</span>&#160;        vkMemReq.alignment,</div>
-<div class="line"><a name="l14068"></a><span class="lineno">14068</span>&#160;        vkMemReq.memoryTypeBits,</div>
-<div class="line"><a name="l14069"></a><span class="lineno">14069</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
-<div class="line"><a name="l14070"></a><span class="lineno">14070</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
-<div class="line"><a name="l14071"></a><span class="lineno">14071</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
-<div class="line"><a name="l14072"></a><span class="lineno">14072</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
-<div class="line"><a name="l14073"></a><span class="lineno">14073</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
-<div class="line"><a name="l14074"></a><span class="lineno">14074</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>);</div>
-<div class="line"><a name="l14075"></a><span class="lineno">14075</span>&#160;    PrintPointerList(allocationCount, pAllocations);</div>
-<div class="line"><a name="l14076"></a><span class="lineno">14076</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;,%s\n&quot;</span>, userDataStr.GetString());</div>
-<div class="line"><a name="l14077"></a><span class="lineno">14077</span>&#160;    Flush();</div>
-<div class="line"><a name="l14078"></a><span class="lineno">14078</span>&#160;}</div>
-<div class="line"><a name="l14079"></a><span class="lineno">14079</span>&#160; </div>
-<div class="line"><a name="l14080"></a><span class="lineno">14080</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordAllocateMemoryForBuffer(uint32_t frameIndex,</div>
-<div class="line"><a name="l14081"></a><span class="lineno">14081</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
-<div class="line"><a name="l14082"></a><span class="lineno">14082</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation,</div>
-<div class="line"><a name="l14083"></a><span class="lineno">14083</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation,</div>
-<div class="line"><a name="l14084"></a><span class="lineno">14084</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="l14085"></a><span class="lineno">14085</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l14086"></a><span class="lineno">14086</span>&#160;{</div>
-<div class="line"><a name="l14087"></a><span class="lineno">14087</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l14088"></a><span class="lineno">14088</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14091"></a><span class="lineno">14091</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="l14092"></a><span class="lineno">14092</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="l14093"></a><span class="lineno">14093</span>&#160;        vkMemReq.size,</div>
-<div class="line"><a name="l14094"></a><span class="lineno">14094</span>&#160;        vkMemReq.alignment,</div>
-<div class="line"><a name="l14095"></a><span class="lineno">14095</span>&#160;        vkMemReq.memoryTypeBits,</div>
-<div class="line"><a name="l14096"></a><span class="lineno">14096</span>&#160;        requiresDedicatedAllocation ? 1 : 0,</div>
-<div class="line"><a name="l14097"></a><span class="lineno">14097</span>&#160;        prefersDedicatedAllocation ? 1 : 0,</div>
-<div class="line"><a name="l14098"></a><span class="lineno">14098</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
-<div class="line"><a name="l14099"></a><span class="lineno">14099</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
-<div class="line"><a name="l14100"></a><span class="lineno">14100</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
-<div class="line"><a name="l14101"></a><span class="lineno">14101</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
-<div class="line"><a name="l14102"></a><span class="lineno">14102</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
-<div class="line"><a name="l14103"></a><span class="lineno">14103</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
-<div class="line"><a name="l14104"></a><span class="lineno">14104</span>&#160;        allocation,</div>
-<div class="line"><a name="l14105"></a><span class="lineno">14105</span>&#160;        userDataStr.GetString());</div>
-<div class="line"><a name="l14106"></a><span class="lineno">14106</span>&#160;    Flush();</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="keywordtype">void</span> VmaRecorder::RecordAllocateMemoryForImage(uint32_t frameIndex,</div>
-<div class="line"><a name="l14110"></a><span class="lineno">14110</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
-<div class="line"><a name="l14111"></a><span class="lineno">14111</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation,</div>
-<div class="line"><a name="l14112"></a><span class="lineno">14112</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation,</div>
-<div class="line"><a name="l14113"></a><span class="lineno">14113</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="l14114"></a><span class="lineno">14114</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14117"></a><span class="lineno">14117</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14120"></a><span class="lineno">14120</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="l14121"></a><span class="lineno">14121</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="l14122"></a><span class="lineno">14122</span>&#160;        vkMemReq.size,</div>
-<div class="line"><a name="l14123"></a><span class="lineno">14123</span>&#160;        vkMemReq.alignment,</div>
-<div class="line"><a name="l14124"></a><span class="lineno">14124</span>&#160;        vkMemReq.memoryTypeBits,</div>
-<div class="line"><a name="l14125"></a><span class="lineno">14125</span>&#160;        requiresDedicatedAllocation ? 1 : 0,</div>
-<div class="line"><a name="l14126"></a><span class="lineno">14126</span>&#160;        prefersDedicatedAllocation ? 1 : 0,</div>
-<div class="line"><a name="l14127"></a><span class="lineno">14127</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
-<div class="line"><a name="l14128"></a><span class="lineno">14128</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
-<div class="line"><a name="l14129"></a><span class="lineno">14129</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
-<div class="line"><a name="l14130"></a><span class="lineno">14130</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
-<div class="line"><a name="l14131"></a><span class="lineno">14131</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
-<div class="line"><a name="l14132"></a><span class="lineno">14132</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
-<div class="line"><a name="l14133"></a><span class="lineno">14133</span>&#160;        allocation,</div>
-<div class="line"><a name="l14134"></a><span class="lineno">14134</span>&#160;        userDataStr.GetString());</div>
-<div class="line"><a name="l14135"></a><span class="lineno">14135</span>&#160;    Flush();</div>
-<div class="line"><a name="l14136"></a><span class="lineno">14136</span>&#160;}</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="keywordtype">void</span> VmaRecorder::RecordFreeMemory(uint32_t frameIndex,</div>
-<div class="line"><a name="l14139"></a><span class="lineno">14139</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14142"></a><span class="lineno">14142</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l14029"></a><span class="lineno">14029</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14030"></a><span class="lineno">14030</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="l14031"></a><span class="lineno">14031</span>&#160;        pool);</div>
+<div class="line"><a name="l14032"></a><span class="lineno">14032</span>&#160;    Flush();</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; </div>
+<div class="line"><a name="l14035"></a><span class="lineno">14035</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordAllocateMemory(uint32_t frameIndex,</div>
+<div class="line"><a name="l14036"></a><span class="lineno">14036</span>&#160;        <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
+<div class="line"><a name="l14037"></a><span class="lineno">14037</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="l14038"></a><span class="lineno">14038</span>&#160;        <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
+<div class="line"><a name="l14041"></a><span class="lineno">14041</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l14042"></a><span class="lineno">14042</span>&#160; </div>
+<div class="line"><a name="l14043"></a><span class="lineno">14043</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14044"></a><span class="lineno">14044</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="l14045"></a><span class="lineno">14045</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="l14046"></a><span class="lineno">14046</span>&#160;        vkMemReq.size,</div>
+<div class="line"><a name="l14047"></a><span class="lineno">14047</span>&#160;        vkMemReq.alignment,</div>
+<div class="line"><a name="l14048"></a><span class="lineno">14048</span>&#160;        vkMemReq.memoryTypeBits,</div>
+<div class="line"><a name="l14049"></a><span class="lineno">14049</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
+<div class="line"><a name="l14050"></a><span class="lineno">14050</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
+<div class="line"><a name="l14051"></a><span class="lineno">14051</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
+<div class="line"><a name="l14052"></a><span class="lineno">14052</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
+<div class="line"><a name="l14053"></a><span class="lineno">14053</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
+<div class="line"><a name="l14054"></a><span class="lineno">14054</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
+<div class="line"><a name="l14055"></a><span class="lineno">14055</span>&#160;        allocation,</div>
+<div class="line"><a name="l14056"></a><span class="lineno">14056</span>&#160;        userDataStr.GetString());</div>
+<div class="line"><a name="l14057"></a><span class="lineno">14057</span>&#160;    Flush();</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="keywordtype">void</span> VmaRecorder::RecordAllocateMemoryPages(uint32_t frameIndex,</div>
+<div class="line"><a name="l14061"></a><span class="lineno">14061</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
+<div class="line"><a name="l14062"></a><span class="lineno">14062</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="l14063"></a><span class="lineno">14063</span>&#160;    uint64_t allocationCount,</div>
+<div class="line"><a name="l14064"></a><span class="lineno">14064</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
+<div class="line"><a name="l14065"></a><span class="lineno">14065</span>&#160;{</div>
+<div class="line"><a name="l14066"></a><span class="lineno">14066</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l14067"></a><span class="lineno">14067</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14070"></a><span class="lineno">14070</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="l14071"></a><span class="lineno">14071</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="l14072"></a><span class="lineno">14072</span>&#160;        vkMemReq.size,</div>
+<div class="line"><a name="l14073"></a><span class="lineno">14073</span>&#160;        vkMemReq.alignment,</div>
+<div class="line"><a name="l14074"></a><span class="lineno">14074</span>&#160;        vkMemReq.memoryTypeBits,</div>
+<div class="line"><a name="l14075"></a><span class="lineno">14075</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
+<div class="line"><a name="l14076"></a><span class="lineno">14076</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
+<div class="line"><a name="l14077"></a><span class="lineno">14077</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
+<div class="line"><a name="l14078"></a><span class="lineno">14078</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
+<div class="line"><a name="l14079"></a><span class="lineno">14079</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
+<div class="line"><a name="l14080"></a><span class="lineno">14080</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>);</div>
+<div class="line"><a name="l14081"></a><span class="lineno">14081</span>&#160;    PrintPointerList(allocationCount, pAllocations);</div>
+<div class="line"><a name="l14082"></a><span class="lineno">14082</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;,%s\n&quot;</span>, userDataStr.GetString());</div>
+<div class="line"><a name="l14083"></a><span class="lineno">14083</span>&#160;    Flush();</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; </div>
+<div class="line"><a name="l14086"></a><span class="lineno">14086</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordAllocateMemoryForBuffer(uint32_t frameIndex,</div>
+<div class="line"><a name="l14087"></a><span class="lineno">14087</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
+<div class="line"><a name="l14088"></a><span class="lineno">14088</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation,</div>
+<div class="line"><a name="l14089"></a><span class="lineno">14089</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation,</div>
+<div class="line"><a name="l14090"></a><span class="lineno">14090</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="l14091"></a><span class="lineno">14091</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
+<div class="line"><a name="l14094"></a><span class="lineno">14094</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14097"></a><span class="lineno">14097</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="l14098"></a><span class="lineno">14098</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="l14099"></a><span class="lineno">14099</span>&#160;        vkMemReq.size,</div>
+<div class="line"><a name="l14100"></a><span class="lineno">14100</span>&#160;        vkMemReq.alignment,</div>
+<div class="line"><a name="l14101"></a><span class="lineno">14101</span>&#160;        vkMemReq.memoryTypeBits,</div>
+<div class="line"><a name="l14102"></a><span class="lineno">14102</span>&#160;        requiresDedicatedAllocation ? 1 : 0,</div>
+<div class="line"><a name="l14103"></a><span class="lineno">14103</span>&#160;        prefersDedicatedAllocation ? 1 : 0,</div>
+<div class="line"><a name="l14104"></a><span class="lineno">14104</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
+<div class="line"><a name="l14105"></a><span class="lineno">14105</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
+<div class="line"><a name="l14106"></a><span class="lineno">14106</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
+<div class="line"><a name="l14107"></a><span class="lineno">14107</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
+<div class="line"><a name="l14108"></a><span class="lineno">14108</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
+<div class="line"><a name="l14109"></a><span class="lineno">14109</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
+<div class="line"><a name="l14110"></a><span class="lineno">14110</span>&#160;        allocation,</div>
+<div class="line"><a name="l14111"></a><span class="lineno">14111</span>&#160;        userDataStr.GetString());</div>
+<div class="line"><a name="l14112"></a><span class="lineno">14112</span>&#160;    Flush();</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;<span class="keywordtype">void</span> VmaRecorder::RecordAllocateMemoryForImage(uint32_t frameIndex,</div>
+<div class="line"><a name="l14116"></a><span class="lineno">14116</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
+<div class="line"><a name="l14117"></a><span class="lineno">14117</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation,</div>
+<div class="line"><a name="l14118"></a><span class="lineno">14118</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation,</div>
+<div class="line"><a name="l14119"></a><span class="lineno">14119</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="l14120"></a><span class="lineno">14120</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l14121"></a><span class="lineno">14121</span>&#160;{</div>
+<div class="line"><a name="l14122"></a><span class="lineno">14122</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l14123"></a><span class="lineno">14123</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14126"></a><span class="lineno">14126</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="l14127"></a><span class="lineno">14127</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="l14128"></a><span class="lineno">14128</span>&#160;        vkMemReq.size,</div>
+<div class="line"><a name="l14129"></a><span class="lineno">14129</span>&#160;        vkMemReq.alignment,</div>
+<div class="line"><a name="l14130"></a><span class="lineno">14130</span>&#160;        vkMemReq.memoryTypeBits,</div>
+<div class="line"><a name="l14131"></a><span class="lineno">14131</span>&#160;        requiresDedicatedAllocation ? 1 : 0,</div>
+<div class="line"><a name="l14132"></a><span class="lineno">14132</span>&#160;        prefersDedicatedAllocation ? 1 : 0,</div>
+<div class="line"><a name="l14133"></a><span class="lineno">14133</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
+<div class="line"><a name="l14134"></a><span class="lineno">14134</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
+<div class="line"><a name="l14135"></a><span class="lineno">14135</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
+<div class="line"><a name="l14136"></a><span class="lineno">14136</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
+<div class="line"><a name="l14137"></a><span class="lineno">14137</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
+<div class="line"><a name="l14138"></a><span class="lineno">14138</span>&#160;        createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
+<div class="line"><a name="l14139"></a><span class="lineno">14139</span>&#160;        allocation,</div>
+<div class="line"><a name="l14140"></a><span class="lineno">14140</span>&#160;        userDataStr.GetString());</div>
+<div class="line"><a name="l14141"></a><span class="lineno">14141</span>&#160;    Flush();</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14145"></a><span class="lineno">14145</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="l14146"></a><span class="lineno">14146</span>&#160;        allocation);</div>
-<div class="line"><a name="l14147"></a><span class="lineno">14147</span>&#160;    Flush();</div>
-<div class="line"><a name="l14148"></a><span class="lineno">14148</span>&#160;}</div>
+<div class="line"><a name="l14144"></a><span class="lineno">14144</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordFreeMemory(uint32_t frameIndex,</div>
+<div class="line"><a name="l14145"></a><span class="lineno">14145</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
+<div class="line"><a name="l14148"></a><span class="lineno">14148</span>&#160;    GetBasicParams(callParams);</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="keywordtype">void</span> VmaRecorder::RecordFreeMemoryPages(uint32_t frameIndex,</div>
-<div class="line"><a name="l14151"></a><span class="lineno">14151</span>&#160;    uint64_t allocationCount,</div>
-<div class="line"><a name="l14152"></a><span class="lineno">14152</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14155"></a><span class="lineno">14155</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14158"></a><span class="lineno">14158</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="l14159"></a><span class="lineno">14159</span>&#160;    PrintPointerList(allocationCount, pAllocations);</div>
-<div class="line"><a name="l14160"></a><span class="lineno">14160</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;\n&quot;</span>);</div>
-<div class="line"><a name="l14161"></a><span class="lineno">14161</span>&#160;    Flush();</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; </div>
-<div class="line"><a name="l14164"></a><span class="lineno">14164</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordSetAllocationUserData(uint32_t frameIndex,</div>
-<div class="line"><a name="l14165"></a><span class="lineno">14165</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l14166"></a><span class="lineno">14166</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pUserData)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14169"></a><span class="lineno">14169</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14172"></a><span class="lineno">14172</span>&#160;    UserDataString userDataStr(</div>
-<div class="line"><a name="l14173"></a><span class="lineno">14173</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="l14174"></a><span class="lineno">14174</span>&#160;        pUserData);</div>
-<div class="line"><a name="l14175"></a><span class="lineno">14175</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="l14176"></a><span class="lineno">14176</span>&#160;        allocation,</div>
-<div class="line"><a name="l14177"></a><span class="lineno">14177</span>&#160;        userDataStr.GetString());</div>
-<div class="line"><a name="l14178"></a><span class="lineno">14178</span>&#160;    Flush();</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; </div>
-<div class="line"><a name="l14181"></a><span class="lineno">14181</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreateLostAllocation(uint32_t frameIndex,</div>
-<div class="line"><a name="l14182"></a><span class="lineno">14182</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14185"></a><span class="lineno">14185</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l14150"></a><span class="lineno">14150</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14151"></a><span class="lineno">14151</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="l14152"></a><span class="lineno">14152</span>&#160;        allocation);</div>
+<div class="line"><a name="l14153"></a><span class="lineno">14153</span>&#160;    Flush();</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="keywordtype">void</span> VmaRecorder::RecordFreeMemoryPages(uint32_t frameIndex,</div>
+<div class="line"><a name="l14157"></a><span class="lineno">14157</span>&#160;    uint64_t allocationCount,</div>
+<div class="line"><a name="l14158"></a><span class="lineno">14158</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</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;    CallParams callParams;</div>
+<div class="line"><a name="l14161"></a><span class="lineno">14161</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14164"></a><span class="lineno">14164</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="l14165"></a><span class="lineno">14165</span>&#160;    PrintPointerList(allocationCount, pAllocations);</div>
+<div class="line"><a name="l14166"></a><span class="lineno">14166</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;\n&quot;</span>);</div>
+<div class="line"><a name="l14167"></a><span class="lineno">14167</span>&#160;    Flush();</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> VmaRecorder::RecordSetAllocationUserData(uint32_t frameIndex,</div>
+<div class="line"><a name="l14171"></a><span class="lineno">14171</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l14172"></a><span class="lineno">14172</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pUserData)</div>
+<div class="line"><a name="l14173"></a><span class="lineno">14173</span>&#160;{</div>
+<div class="line"><a name="l14174"></a><span class="lineno">14174</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l14175"></a><span class="lineno">14175</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14178"></a><span class="lineno">14178</span>&#160;    UserDataString userDataStr(</div>
+<div class="line"><a name="l14179"></a><span class="lineno">14179</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="l14180"></a><span class="lineno">14180</span>&#160;        pUserData);</div>
+<div class="line"><a name="l14181"></a><span class="lineno">14181</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="l14182"></a><span class="lineno">14182</span>&#160;        allocation,</div>
+<div class="line"><a name="l14183"></a><span class="lineno">14183</span>&#160;        userDataStr.GetString());</div>
+<div class="line"><a name="l14184"></a><span class="lineno">14184</span>&#160;    Flush();</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; </div>
-<div class="line"><a name="l14187"></a><span class="lineno">14187</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14188"></a><span class="lineno">14188</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="l14189"></a><span class="lineno">14189</span>&#160;        allocation);</div>
-<div class="line"><a name="l14190"></a><span class="lineno">14190</span>&#160;    Flush();</div>
-<div class="line"><a name="l14191"></a><span class="lineno">14191</span>&#160;}</div>
+<div class="line"><a name="l14187"></a><span class="lineno">14187</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreateLostAllocation(uint32_t frameIndex,</div>
+<div class="line"><a name="l14188"></a><span class="lineno">14188</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l14189"></a><span class="lineno">14189</span>&#160;{</div>
+<div class="line"><a name="l14190"></a><span class="lineno">14190</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l14191"></a><span class="lineno">14191</span>&#160;    GetBasicParams(callParams);</div>
 <div class="line"><a name="l14192"></a><span class="lineno">14192</span>&#160; </div>
-<div class="line"><a name="l14193"></a><span class="lineno">14193</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordMapMemory(uint32_t frameIndex,</div>
-<div class="line"><a name="l14194"></a><span class="lineno">14194</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14197"></a><span class="lineno">14197</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l14193"></a><span class="lineno">14193</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14194"></a><span class="lineno">14194</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="l14195"></a><span class="lineno">14195</span>&#160;        allocation);</div>
+<div class="line"><a name="l14196"></a><span class="lineno">14196</span>&#160;    Flush();</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14200"></a><span class="lineno">14200</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="l14201"></a><span class="lineno">14201</span>&#160;        allocation);</div>
-<div class="line"><a name="l14202"></a><span class="lineno">14202</span>&#160;    Flush();</div>
-<div class="line"><a name="l14203"></a><span class="lineno">14203</span>&#160;}</div>
+<div class="line"><a name="l14199"></a><span class="lineno">14199</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordMapMemory(uint32_t frameIndex,</div>
+<div class="line"><a name="l14200"></a><span class="lineno">14200</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
+<div class="line"><a name="l14203"></a><span class="lineno">14203</span>&#160;    GetBasicParams(callParams);</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="keywordtype">void</span> VmaRecorder::RecordUnmapMemory(uint32_t frameIndex,</div>
-<div class="line"><a name="l14206"></a><span class="lineno">14206</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l14207"></a><span class="lineno">14207</span>&#160;{</div>
-<div class="line"><a name="l14208"></a><span class="lineno">14208</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l14209"></a><span class="lineno">14209</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l14205"></a><span class="lineno">14205</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14206"></a><span class="lineno">14206</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="l14207"></a><span class="lineno">14207</span>&#160;        allocation);</div>
+<div class="line"><a name="l14208"></a><span class="lineno">14208</span>&#160;    Flush();</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14212"></a><span class="lineno">14212</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="l14213"></a><span class="lineno">14213</span>&#160;        allocation);</div>
-<div class="line"><a name="l14214"></a><span class="lineno">14214</span>&#160;    Flush();</div>
-<div class="line"><a name="l14215"></a><span class="lineno">14215</span>&#160;}</div>
+<div class="line"><a name="l14211"></a><span class="lineno">14211</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordUnmapMemory(uint32_t frameIndex,</div>
+<div class="line"><a name="l14212"></a><span class="lineno">14212</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l14213"></a><span class="lineno">14213</span>&#160;{</div>
+<div class="line"><a name="l14214"></a><span class="lineno">14214</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l14215"></a><span class="lineno">14215</span>&#160;    GetBasicParams(callParams);</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="keywordtype">void</span> VmaRecorder::RecordFlushAllocation(uint32_t frameIndex,</div>
-<div class="line"><a name="l14218"></a><span class="lineno">14218</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14221"></a><span class="lineno">14221</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l14217"></a><span class="lineno">14217</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14218"></a><span class="lineno">14218</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="l14219"></a><span class="lineno">14219</span>&#160;        allocation);</div>
+<div class="line"><a name="l14220"></a><span class="lineno">14220</span>&#160;    Flush();</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; </div>
-<div class="line"><a name="l14223"></a><span class="lineno">14223</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14224"></a><span class="lineno">14224</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="l14225"></a><span class="lineno">14225</span>&#160;        allocation,</div>
-<div class="line"><a name="l14226"></a><span class="lineno">14226</span>&#160;        offset,</div>
-<div class="line"><a name="l14227"></a><span class="lineno">14227</span>&#160;        size);</div>
-<div class="line"><a name="l14228"></a><span class="lineno">14228</span>&#160;    Flush();</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;<span class="keywordtype">void</span> VmaRecorder::RecordInvalidateAllocation(uint32_t frameIndex,</div>
-<div class="line"><a name="l14232"></a><span class="lineno">14232</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14235"></a><span class="lineno">14235</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l14223"></a><span class="lineno">14223</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordFlushAllocation(uint32_t frameIndex,</div>
+<div class="line"><a name="l14224"></a><span class="lineno">14224</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</div>
+<div class="line"><a name="l14225"></a><span class="lineno">14225</span>&#160;{</div>
+<div class="line"><a name="l14226"></a><span class="lineno">14226</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l14227"></a><span class="lineno">14227</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14230"></a><span class="lineno">14230</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="l14231"></a><span class="lineno">14231</span>&#160;        allocation,</div>
+<div class="line"><a name="l14232"></a><span class="lineno">14232</span>&#160;        offset,</div>
+<div class="line"><a name="l14233"></a><span class="lineno">14233</span>&#160;        size);</div>
+<div class="line"><a name="l14234"></a><span class="lineno">14234</span>&#160;    Flush();</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; </div>
-<div class="line"><a name="l14237"></a><span class="lineno">14237</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14238"></a><span class="lineno">14238</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="l14239"></a><span class="lineno">14239</span>&#160;        allocation,</div>
-<div class="line"><a name="l14240"></a><span class="lineno">14240</span>&#160;        offset,</div>
-<div class="line"><a name="l14241"></a><span class="lineno">14241</span>&#160;        size);</div>
-<div class="line"><a name="l14242"></a><span class="lineno">14242</span>&#160;    Flush();</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; </div>
-<div class="line"><a name="l14245"></a><span class="lineno">14245</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreateBuffer(uint32_t frameIndex,</div>
-<div class="line"><a name="l14246"></a><span class="lineno">14246</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo&amp; bufCreateInfo,</div>
-<div class="line"><a name="l14247"></a><span class="lineno">14247</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="l14248"></a><span class="lineno">14248</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14251"></a><span class="lineno">14251</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14254"></a><span class="lineno">14254</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="l14255"></a><span class="lineno">14255</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="l14256"></a><span class="lineno">14256</span>&#160;        bufCreateInfo.flags,</div>
-<div class="line"><a name="l14257"></a><span class="lineno">14257</span>&#160;        bufCreateInfo.size,</div>
-<div class="line"><a name="l14258"></a><span class="lineno">14258</span>&#160;        bufCreateInfo.usage,</div>
-<div class="line"><a name="l14259"></a><span class="lineno">14259</span>&#160;        bufCreateInfo.sharingMode,</div>
-<div class="line"><a name="l14260"></a><span class="lineno">14260</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
-<div class="line"><a name="l14261"></a><span class="lineno">14261</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
-<div class="line"><a name="l14262"></a><span class="lineno">14262</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
-<div class="line"><a name="l14263"></a><span class="lineno">14263</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
-<div class="line"><a name="l14264"></a><span class="lineno">14264</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
-<div class="line"><a name="l14265"></a><span class="lineno">14265</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
-<div class="line"><a name="l14266"></a><span class="lineno">14266</span>&#160;        allocation,</div>
-<div class="line"><a name="l14267"></a><span class="lineno">14267</span>&#160;        userDataStr.GetString());</div>
-<div class="line"><a name="l14268"></a><span class="lineno">14268</span>&#160;    Flush();</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; </div>
-<div class="line"><a name="l14271"></a><span class="lineno">14271</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreateImage(uint32_t frameIndex,</div>
-<div class="line"><a name="l14272"></a><span class="lineno">14272</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo&amp; imageCreateInfo,</div>
-<div class="line"><a name="l14273"></a><span class="lineno">14273</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="l14274"></a><span class="lineno">14274</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l14275"></a><span class="lineno">14275</span>&#160;{</div>
-<div class="line"><a name="l14276"></a><span class="lineno">14276</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l14277"></a><span class="lineno">14277</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14280"></a><span class="lineno">14280</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="l14281"></a><span class="lineno">14281</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="l14282"></a><span class="lineno">14282</span>&#160;        imageCreateInfo.flags,</div>
-<div class="line"><a name="l14283"></a><span class="lineno">14283</span>&#160;        imageCreateInfo.imageType,</div>
-<div class="line"><a name="l14284"></a><span class="lineno">14284</span>&#160;        imageCreateInfo.format,</div>
-<div class="line"><a name="l14285"></a><span class="lineno">14285</span>&#160;        imageCreateInfo.extent.width,</div>
-<div class="line"><a name="l14286"></a><span class="lineno">14286</span>&#160;        imageCreateInfo.extent.height,</div>
-<div class="line"><a name="l14287"></a><span class="lineno">14287</span>&#160;        imageCreateInfo.extent.depth,</div>
-<div class="line"><a name="l14288"></a><span class="lineno">14288</span>&#160;        imageCreateInfo.mipLevels,</div>
-<div class="line"><a name="l14289"></a><span class="lineno">14289</span>&#160;        imageCreateInfo.arrayLayers,</div>
-<div class="line"><a name="l14290"></a><span class="lineno">14290</span>&#160;        imageCreateInfo.samples,</div>
-<div class="line"><a name="l14291"></a><span class="lineno">14291</span>&#160;        imageCreateInfo.tiling,</div>
-<div class="line"><a name="l14292"></a><span class="lineno">14292</span>&#160;        imageCreateInfo.usage,</div>
-<div class="line"><a name="l14293"></a><span class="lineno">14293</span>&#160;        imageCreateInfo.sharingMode,</div>
-<div class="line"><a name="l14294"></a><span class="lineno">14294</span>&#160;        imageCreateInfo.initialLayout,</div>
-<div class="line"><a name="l14295"></a><span class="lineno">14295</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
-<div class="line"><a name="l14296"></a><span class="lineno">14296</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
-<div class="line"><a name="l14297"></a><span class="lineno">14297</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
-<div class="line"><a name="l14298"></a><span class="lineno">14298</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
-<div class="line"><a name="l14299"></a><span class="lineno">14299</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
-<div class="line"><a name="l14300"></a><span class="lineno">14300</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
-<div class="line"><a name="l14301"></a><span class="lineno">14301</span>&#160;        allocation,</div>
-<div class="line"><a name="l14302"></a><span class="lineno">14302</span>&#160;        userDataStr.GetString());</div>
-<div class="line"><a name="l14303"></a><span class="lineno">14303</span>&#160;    Flush();</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; </div>
-<div class="line"><a name="l14306"></a><span class="lineno">14306</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDestroyBuffer(uint32_t frameIndex,</div>
-<div class="line"><a name="l14307"></a><span class="lineno">14307</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14310"></a><span class="lineno">14310</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l14237"></a><span class="lineno">14237</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordInvalidateAllocation(uint32_t frameIndex,</div>
+<div class="line"><a name="l14238"></a><span class="lineno">14238</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</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;    CallParams callParams;</div>
+<div class="line"><a name="l14241"></a><span class="lineno">14241</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14244"></a><span class="lineno">14244</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="l14245"></a><span class="lineno">14245</span>&#160;        allocation,</div>
+<div class="line"><a name="l14246"></a><span class="lineno">14246</span>&#160;        offset,</div>
+<div class="line"><a name="l14247"></a><span class="lineno">14247</span>&#160;        size);</div>
+<div class="line"><a name="l14248"></a><span class="lineno">14248</span>&#160;    Flush();</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; </div>
+<div class="line"><a name="l14251"></a><span class="lineno">14251</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordCreateBuffer(uint32_t frameIndex,</div>
+<div class="line"><a name="l14252"></a><span class="lineno">14252</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo&amp; bufCreateInfo,</div>
+<div class="line"><a name="l14253"></a><span class="lineno">14253</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="l14254"></a><span class="lineno">14254</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l14255"></a><span class="lineno">14255</span>&#160;{</div>
+<div class="line"><a name="l14256"></a><span class="lineno">14256</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l14257"></a><span class="lineno">14257</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14260"></a><span class="lineno">14260</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="l14261"></a><span class="lineno">14261</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="l14262"></a><span class="lineno">14262</span>&#160;        bufCreateInfo.flags,</div>
+<div class="line"><a name="l14263"></a><span class="lineno">14263</span>&#160;        bufCreateInfo.size,</div>
+<div class="line"><a name="l14264"></a><span class="lineno">14264</span>&#160;        bufCreateInfo.usage,</div>
+<div class="line"><a name="l14265"></a><span class="lineno">14265</span>&#160;        bufCreateInfo.sharingMode,</div>
+<div class="line"><a name="l14266"></a><span class="lineno">14266</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
+<div class="line"><a name="l14267"></a><span class="lineno">14267</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
+<div class="line"><a name="l14268"></a><span class="lineno">14268</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
+<div class="line"><a name="l14269"></a><span class="lineno">14269</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
+<div class="line"><a name="l14270"></a><span class="lineno">14270</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
+<div class="line"><a name="l14271"></a><span class="lineno">14271</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
+<div class="line"><a name="l14272"></a><span class="lineno">14272</span>&#160;        allocation,</div>
+<div class="line"><a name="l14273"></a><span class="lineno">14273</span>&#160;        userDataStr.GetString());</div>
+<div class="line"><a name="l14274"></a><span class="lineno">14274</span>&#160;    Flush();</div>
+<div class="line"><a name="l14275"></a><span class="lineno">14275</span>&#160;}</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="keywordtype">void</span> VmaRecorder::RecordCreateImage(uint32_t frameIndex,</div>
+<div class="line"><a name="l14278"></a><span class="lineno">14278</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo&amp; imageCreateInfo,</div>
+<div class="line"><a name="l14279"></a><span class="lineno">14279</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="l14280"></a><span class="lineno">14280</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
+<div class="line"><a name="l14283"></a><span class="lineno">14283</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l14284"></a><span class="lineno">14284</span>&#160; </div>
+<div class="line"><a name="l14285"></a><span class="lineno">14285</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14286"></a><span class="lineno">14286</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="l14287"></a><span class="lineno">14287</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="l14288"></a><span class="lineno">14288</span>&#160;        imageCreateInfo.flags,</div>
+<div class="line"><a name="l14289"></a><span class="lineno">14289</span>&#160;        imageCreateInfo.imageType,</div>
+<div class="line"><a name="l14290"></a><span class="lineno">14290</span>&#160;        imageCreateInfo.format,</div>
+<div class="line"><a name="l14291"></a><span class="lineno">14291</span>&#160;        imageCreateInfo.extent.width,</div>
+<div class="line"><a name="l14292"></a><span class="lineno">14292</span>&#160;        imageCreateInfo.extent.height,</div>
+<div class="line"><a name="l14293"></a><span class="lineno">14293</span>&#160;        imageCreateInfo.extent.depth,</div>
+<div class="line"><a name="l14294"></a><span class="lineno">14294</span>&#160;        imageCreateInfo.mipLevels,</div>
+<div class="line"><a name="l14295"></a><span class="lineno">14295</span>&#160;        imageCreateInfo.arrayLayers,</div>
+<div class="line"><a name="l14296"></a><span class="lineno">14296</span>&#160;        imageCreateInfo.samples,</div>
+<div class="line"><a name="l14297"></a><span class="lineno">14297</span>&#160;        imageCreateInfo.tiling,</div>
+<div class="line"><a name="l14298"></a><span class="lineno">14298</span>&#160;        imageCreateInfo.usage,</div>
+<div class="line"><a name="l14299"></a><span class="lineno">14299</span>&#160;        imageCreateInfo.sharingMode,</div>
+<div class="line"><a name="l14300"></a><span class="lineno">14300</span>&#160;        imageCreateInfo.initialLayout,</div>
+<div class="line"><a name="l14301"></a><span class="lineno">14301</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a>,</div>
+<div class="line"><a name="l14302"></a><span class="lineno">14302</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a>,</div>
+<div class="line"><a name="l14303"></a><span class="lineno">14303</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a>,</div>
+<div class="line"><a name="l14304"></a><span class="lineno">14304</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a>,</div>
+<div class="line"><a name="l14305"></a><span class="lineno">14305</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>,</div>
+<div class="line"><a name="l14306"></a><span class="lineno">14306</span>&#160;        allocCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>,</div>
+<div class="line"><a name="l14307"></a><span class="lineno">14307</span>&#160;        allocation,</div>
+<div class="line"><a name="l14308"></a><span class="lineno">14308</span>&#160;        userDataStr.GetString());</div>
+<div class="line"><a name="l14309"></a><span class="lineno">14309</span>&#160;    Flush();</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; </div>
-<div class="line"><a name="l14312"></a><span class="lineno">14312</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14313"></a><span class="lineno">14313</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="l14314"></a><span class="lineno">14314</span>&#160;        allocation);</div>
-<div class="line"><a name="l14315"></a><span class="lineno">14315</span>&#160;    Flush();</div>
-<div class="line"><a name="l14316"></a><span class="lineno">14316</span>&#160;}</div>
+<div class="line"><a name="l14312"></a><span class="lineno">14312</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDestroyBuffer(uint32_t frameIndex,</div>
+<div class="line"><a name="l14313"></a><span class="lineno">14313</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l14314"></a><span class="lineno">14314</span>&#160;{</div>
+<div class="line"><a name="l14315"></a><span class="lineno">14315</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l14316"></a><span class="lineno">14316</span>&#160;    GetBasicParams(callParams);</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;<span class="keywordtype">void</span> VmaRecorder::RecordDestroyImage(uint32_t frameIndex,</div>
-<div class="line"><a name="l14319"></a><span class="lineno">14319</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14322"></a><span class="lineno">14322</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l14318"></a><span class="lineno">14318</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14319"></a><span class="lineno">14319</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="l14320"></a><span class="lineno">14320</span>&#160;        allocation);</div>
+<div class="line"><a name="l14321"></a><span class="lineno">14321</span>&#160;    Flush();</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; </div>
-<div class="line"><a name="l14324"></a><span class="lineno">14324</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14325"></a><span class="lineno">14325</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="l14326"></a><span class="lineno">14326</span>&#160;        allocation);</div>
-<div class="line"><a name="l14327"></a><span class="lineno">14327</span>&#160;    Flush();</div>
-<div class="line"><a name="l14328"></a><span class="lineno">14328</span>&#160;}</div>
+<div class="line"><a name="l14324"></a><span class="lineno">14324</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDestroyImage(uint32_t frameIndex,</div>
+<div class="line"><a name="l14325"></a><span class="lineno">14325</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
+<div class="line"><a name="l14328"></a><span class="lineno">14328</span>&#160;    GetBasicParams(callParams);</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="keywordtype">void</span> VmaRecorder::RecordTouchAllocation(uint32_t frameIndex,</div>
-<div class="line"><a name="l14331"></a><span class="lineno">14331</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l14332"></a><span class="lineno">14332</span>&#160;{</div>
-<div class="line"><a name="l14333"></a><span class="lineno">14333</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l14334"></a><span class="lineno">14334</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l14330"></a><span class="lineno">14330</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14331"></a><span class="lineno">14331</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="l14332"></a><span class="lineno">14332</span>&#160;        allocation);</div>
+<div class="line"><a name="l14333"></a><span class="lineno">14333</span>&#160;    Flush();</div>
+<div class="line"><a name="l14334"></a><span class="lineno">14334</span>&#160;}</div>
 <div class="line"><a name="l14335"></a><span class="lineno">14335</span>&#160; </div>
-<div class="line"><a name="l14336"></a><span class="lineno">14336</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14337"></a><span class="lineno">14337</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="l14338"></a><span class="lineno">14338</span>&#160;        allocation);</div>
-<div class="line"><a name="l14339"></a><span class="lineno">14339</span>&#160;    Flush();</div>
-<div class="line"><a name="l14340"></a><span class="lineno">14340</span>&#160;}</div>
+<div class="line"><a name="l14336"></a><span class="lineno">14336</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordTouchAllocation(uint32_t frameIndex,</div>
+<div class="line"><a name="l14337"></a><span class="lineno">14337</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l14338"></a><span class="lineno">14338</span>&#160;{</div>
+<div class="line"><a name="l14339"></a><span class="lineno">14339</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l14340"></a><span class="lineno">14340</span>&#160;    GetBasicParams(callParams);</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;<span class="keywordtype">void</span> VmaRecorder::RecordGetAllocationInfo(uint32_t frameIndex,</div>
-<div class="line"><a name="l14343"></a><span class="lineno">14343</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14346"></a><span class="lineno">14346</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l14342"></a><span class="lineno">14342</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14343"></a><span class="lineno">14343</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="l14344"></a><span class="lineno">14344</span>&#160;        allocation);</div>
+<div class="line"><a name="l14345"></a><span class="lineno">14345</span>&#160;    Flush();</div>
+<div class="line"><a name="l14346"></a><span class="lineno">14346</span>&#160;}</div>
 <div class="line"><a name="l14347"></a><span class="lineno">14347</span>&#160; </div>
-<div class="line"><a name="l14348"></a><span class="lineno">14348</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14349"></a><span class="lineno">14349</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="l14350"></a><span class="lineno">14350</span>&#160;        allocation);</div>
-<div class="line"><a name="l14351"></a><span class="lineno">14351</span>&#160;    Flush();</div>
-<div class="line"><a name="l14352"></a><span class="lineno">14352</span>&#160;}</div>
+<div class="line"><a name="l14348"></a><span class="lineno">14348</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordGetAllocationInfo(uint32_t frameIndex,</div>
+<div class="line"><a name="l14349"></a><span class="lineno">14349</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l14350"></a><span class="lineno">14350</span>&#160;{</div>
+<div class="line"><a name="l14351"></a><span class="lineno">14351</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l14352"></a><span class="lineno">14352</span>&#160;    GetBasicParams(callParams);</div>
 <div class="line"><a name="l14353"></a><span class="lineno">14353</span>&#160; </div>
-<div class="line"><a name="l14354"></a><span class="lineno">14354</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordMakePoolAllocationsLost(uint32_t frameIndex,</div>
-<div class="line"><a name="l14355"></a><span class="lineno">14355</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14358"></a><span class="lineno">14358</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l14354"></a><span class="lineno">14354</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14355"></a><span class="lineno">14355</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="l14356"></a><span class="lineno">14356</span>&#160;        allocation);</div>
+<div class="line"><a name="l14357"></a><span class="lineno">14357</span>&#160;    Flush();</div>
+<div class="line"><a name="l14358"></a><span class="lineno">14358</span>&#160;}</div>
 <div class="line"><a name="l14359"></a><span class="lineno">14359</span>&#160; </div>
-<div class="line"><a name="l14360"></a><span class="lineno">14360</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14361"></a><span class="lineno">14361</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="l14362"></a><span class="lineno">14362</span>&#160;        pool);</div>
-<div class="line"><a name="l14363"></a><span class="lineno">14363</span>&#160;    Flush();</div>
-<div class="line"><a name="l14364"></a><span class="lineno">14364</span>&#160;}</div>
+<div class="line"><a name="l14360"></a><span class="lineno">14360</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordMakePoolAllocationsLost(uint32_t frameIndex,</div>
+<div class="line"><a name="l14361"></a><span class="lineno">14361</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</div>
+<div class="line"><a name="l14362"></a><span class="lineno">14362</span>&#160;{</div>
+<div class="line"><a name="l14363"></a><span class="lineno">14363</span>&#160;    CallParams callParams;</div>
+<div class="line"><a name="l14364"></a><span class="lineno">14364</span>&#160;    GetBasicParams(callParams);</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;<span class="keywordtype">void</span> VmaRecorder::RecordDefragmentationBegin(uint32_t frameIndex,</div>
-<div class="line"><a name="l14367"></a><span class="lineno">14367</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="l14368"></a><span class="lineno">14368</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> ctx)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14371"></a><span class="lineno">14371</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14374"></a><span class="lineno">14374</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="l14375"></a><span class="lineno">14375</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">flags</a>);</div>
-<div class="line"><a name="l14376"></a><span class="lineno">14376</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#a8943f8d65969ce8e2189a1cdf3205e96">pAllocations</a>);</div>
-<div class="line"><a name="l14377"></a><span class="lineno">14377</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;,&quot;</span>);</div>
-<div class="line"><a name="l14378"></a><span class="lineno">14378</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#a0b3effd57f3fcdeb2ed62210b4ef20e1">pPools</a>);</div>
-<div class="line"><a name="l14379"></a><span class="lineno">14379</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;,%llu,%u,%llu,%u,%p,%p\n&quot;</span>,</div>
-<div class="line"><a name="l14380"></a><span class="lineno">14380</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">maxCpuBytesToMove</a>,</div>
-<div class="line"><a name="l14381"></a><span class="lineno">14381</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a>,</div>
-<div class="line"><a name="l14382"></a><span class="lineno">14382</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08">maxGpuBytesToMove</a>,</div>
-<div class="line"><a name="l14383"></a><span class="lineno">14383</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6">maxGpuAllocationsToMove</a>,</div>
-<div class="line"><a name="l14384"></a><span class="lineno">14384</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">commandBuffer</a>,</div>
-<div class="line"><a name="l14385"></a><span class="lineno">14385</span>&#160;        ctx);</div>
-<div class="line"><a name="l14386"></a><span class="lineno">14386</span>&#160;    Flush();</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; </div>
-<div class="line"><a name="l14389"></a><span class="lineno">14389</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDefragmentationEnd(uint32_t frameIndex,</div>
-<div class="line"><a name="l14390"></a><span class="lineno">14390</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> ctx)</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;    CallParams callParams;</div>
-<div class="line"><a name="l14393"></a><span class="lineno">14393</span>&#160;    GetBasicParams(callParams);</div>
+<div class="line"><a name="l14366"></a><span class="lineno">14366</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14367"></a><span class="lineno">14367</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="l14368"></a><span class="lineno">14368</span>&#160;        pool);</div>
+<div class="line"><a name="l14369"></a><span class="lineno">14369</span>&#160;    Flush();</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;<span class="keywordtype">void</span> VmaRecorder::RecordDefragmentationBegin(uint32_t frameIndex,</div>
+<div class="line"><a name="l14373"></a><span class="lineno">14373</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="l14374"></a><span class="lineno">14374</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> ctx)</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;    CallParams callParams;</div>
+<div class="line"><a name="l14377"></a><span class="lineno">14377</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14380"></a><span class="lineno">14380</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="l14381"></a><span class="lineno">14381</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">flags</a>);</div>
+<div class="line"><a name="l14382"></a><span class="lineno">14382</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#a8943f8d65969ce8e2189a1cdf3205e96">pAllocations</a>);</div>
+<div class="line"><a name="l14383"></a><span class="lineno">14383</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;,&quot;</span>);</div>
+<div class="line"><a name="l14384"></a><span class="lineno">14384</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#a0b3effd57f3fcdeb2ed62210b4ef20e1">pPools</a>);</div>
+<div class="line"><a name="l14385"></a><span class="lineno">14385</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;,%llu,%u,%llu,%u,%p,%p\n&quot;</span>,</div>
+<div class="line"><a name="l14386"></a><span class="lineno">14386</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">maxCpuBytesToMove</a>,</div>
+<div class="line"><a name="l14387"></a><span class="lineno">14387</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a>,</div>
+<div class="line"><a name="l14388"></a><span class="lineno">14388</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08">maxGpuBytesToMove</a>,</div>
+<div class="line"><a name="l14389"></a><span class="lineno">14389</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6">maxGpuAllocationsToMove</a>,</div>
+<div class="line"><a name="l14390"></a><span class="lineno">14390</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">commandBuffer</a>,</div>
+<div class="line"><a name="l14391"></a><span class="lineno">14391</span>&#160;        ctx);</div>
+<div class="line"><a name="l14392"></a><span class="lineno">14392</span>&#160;    Flush();</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; </div>
-<div class="line"><a name="l14395"></a><span class="lineno">14395</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14396"></a><span class="lineno">14396</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="l14397"></a><span class="lineno">14397</span>&#160;        ctx);</div>
-<div class="line"><a name="l14398"></a><span class="lineno">14398</span>&#160;    Flush();</div>
-<div class="line"><a name="l14399"></a><span class="lineno">14399</span>&#160;}</div>
+<div class="line"><a name="l14395"></a><span class="lineno">14395</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordDefragmentationEnd(uint32_t frameIndex,</div>
+<div class="line"><a name="l14396"></a><span class="lineno">14396</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> ctx)</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;    CallParams callParams;</div>
+<div class="line"><a name="l14399"></a><span class="lineno">14399</span>&#160;    GetBasicParams(callParams);</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;<span class="keywordtype">void</span> VmaRecorder::RecordSetPoolName(uint32_t frameIndex,</div>
-<div class="line"><a name="l14402"></a><span class="lineno">14402</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
-<div class="line"><a name="l14403"></a><span class="lineno">14403</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* name)</div>
-<div class="line"><a name="l14404"></a><span class="lineno">14404</span>&#160;{</div>
-<div class="line"><a name="l14405"></a><span class="lineno">14405</span>&#160;    CallParams callParams;</div>
-<div class="line"><a name="l14406"></a><span class="lineno">14406</span>&#160;    GetBasicParams(callParams);</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;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
-<div class="line"><a name="l14409"></a><span class="lineno">14409</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="l14410"></a><span class="lineno">14410</span>&#160;        pool, name != VMA_NULL ? name : <span class="stringliteral">&quot;&quot;</span>);</div>
-<div class="line"><a name="l14411"></a><span class="lineno">14411</span>&#160;    Flush();</div>
-<div class="line"><a name="l14412"></a><span class="lineno">14412</span>&#160;}</div>
+<div class="line"><a name="l14401"></a><span class="lineno">14401</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14402"></a><span class="lineno">14402</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="l14403"></a><span class="lineno">14403</span>&#160;        ctx);</div>
+<div class="line"><a name="l14404"></a><span class="lineno">14404</span>&#160;    Flush();</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; </div>
+<div class="line"><a name="l14407"></a><span class="lineno">14407</span>&#160;<span class="keywordtype">void</span> VmaRecorder::RecordSetPoolName(uint32_t frameIndex,</div>
+<div class="line"><a name="l14408"></a><span class="lineno">14408</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
+<div class="line"><a name="l14409"></a><span class="lineno">14409</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* name)</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;    CallParams callParams;</div>
+<div class="line"><a name="l14412"></a><span class="lineno">14412</span>&#160;    GetBasicParams(callParams);</div>
 <div class="line"><a name="l14413"></a><span class="lineno">14413</span>&#160; </div>
-<div class="line"><a name="l14414"></a><span class="lineno">14414</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="l14415"></a><span class="lineno">14415</span>&#160;{</div>
-<div class="line"><a name="l14416"></a><span class="lineno">14416</span>&#160;    <span class="keywordflow">if</span>(pUserData != VMA_NULL)</div>
-<div class="line"><a name="l14417"></a><span class="lineno">14417</span>&#160;    {</div>
-<div class="line"><a name="l14418"></a><span class="lineno">14418</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="l14419"></a><span class="lineno">14419</span>&#160;        {</div>
-<div class="line"><a name="l14420"></a><span class="lineno">14420</span>&#160;            m_Str = (<span class="keyword">const</span> <span class="keywordtype">char</span>*)pUserData;</div>
-<div class="line"><a name="l14421"></a><span class="lineno">14421</span>&#160;        }</div>
-<div class="line"><a name="l14422"></a><span class="lineno">14422</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14423"></a><span class="lineno">14423</span>&#160;        {</div>
-<div class="line"><a name="l14424"></a><span class="lineno">14424</span>&#160;            sprintf_s(m_PtrStr, <span class="stringliteral">&quot;%p&quot;</span>, pUserData);</div>
-<div class="line"><a name="l14425"></a><span class="lineno">14425</span>&#160;            m_Str = m_PtrStr;</div>
-<div class="line"><a name="l14426"></a><span class="lineno">14426</span>&#160;        }</div>
-<div class="line"><a name="l14427"></a><span class="lineno">14427</span>&#160;    }</div>
-<div class="line"><a name="l14428"></a><span class="lineno">14428</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14429"></a><span class="lineno">14429</span>&#160;    {</div>
-<div class="line"><a name="l14430"></a><span class="lineno">14430</span>&#160;        m_Str = <span class="stringliteral">&quot;&quot;</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;}</div>
-<div class="line"><a name="l14433"></a><span class="lineno">14433</span>&#160; </div>
-<div class="line"><a name="l14434"></a><span class="lineno">14434</span>&#160;<span class="keywordtype">void</span> VmaRecorder::WriteConfiguration(</div>
-<div class="line"><a name="l14435"></a><span class="lineno">14435</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceProperties&amp; devProps,</div>
-<div class="line"><a name="l14436"></a><span class="lineno">14436</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceMemoryProperties&amp; memProps,</div>
-<div class="line"><a name="l14437"></a><span class="lineno">14437</span>&#160;    uint32_t vulkanApiVersion,</div>
-<div class="line"><a name="l14438"></a><span class="lineno">14438</span>&#160;    <span class="keywordtype">bool</span> dedicatedAllocationExtensionEnabled,</div>
-<div class="line"><a name="l14439"></a><span class="lineno">14439</span>&#160;    <span class="keywordtype">bool</span> bindMemory2ExtensionEnabled,</div>
-<div class="line"><a name="l14440"></a><span class="lineno">14440</span>&#160;    <span class="keywordtype">bool</span> memoryBudgetExtensionEnabled)</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;    fprintf(m_File, <span class="stringliteral">&quot;Config,Begin\n&quot;</span>);</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;    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="l14445"></a><span class="lineno">14445</span>&#160; </div>
-<div class="line"><a name="l14446"></a><span class="lineno">14446</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,apiVersion,%u\n&quot;</span>, devProps.apiVersion);</div>
-<div class="line"><a name="l14447"></a><span class="lineno">14447</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,driverVersion,%u\n&quot;</span>, devProps.driverVersion);</div>
-<div class="line"><a name="l14448"></a><span class="lineno">14448</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,vendorID,%u\n&quot;</span>, devProps.vendorID);</div>
-<div class="line"><a name="l14449"></a><span class="lineno">14449</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,deviceID,%u\n&quot;</span>, devProps.deviceID);</div>
-<div class="line"><a name="l14450"></a><span class="lineno">14450</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,deviceType,%u\n&quot;</span>, devProps.deviceType);</div>
-<div class="line"><a name="l14451"></a><span class="lineno">14451</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,deviceName,%s\n&quot;</span>, devProps.deviceName);</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;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceLimits,maxMemoryAllocationCount,%u\n&quot;</span>, devProps.limits.maxMemoryAllocationCount);</div>
-<div class="line"><a name="l14454"></a><span class="lineno">14454</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceLimits,bufferImageGranularity,%llu\n&quot;</span>, devProps.limits.bufferImageGranularity);</div>
-<div class="line"><a name="l14455"></a><span class="lineno">14455</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceLimits,nonCoherentAtomSize,%llu\n&quot;</span>, devProps.limits.nonCoherentAtomSize);</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;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,HeapCount,%u\n&quot;</span>, memProps.memoryHeapCount);</div>
-<div class="line"><a name="l14458"></a><span class="lineno">14458</span>&#160;    <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; memProps.memoryHeapCount; ++i)</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;        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="l14461"></a><span class="lineno">14461</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="l14462"></a><span class="lineno">14462</span>&#160;    }</div>
-<div class="line"><a name="l14463"></a><span class="lineno">14463</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,TypeCount,%u\n&quot;</span>, memProps.memoryTypeCount);</div>
-<div class="line"><a name="l14464"></a><span class="lineno">14464</span>&#160;    <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; memProps.memoryTypeCount; ++i)</div>
+<div class="line"><a name="l14414"></a><span class="lineno">14414</span>&#160;    VmaMutexLock lock(m_FileMutex, m_UseMutex);</div>
+<div class="line"><a name="l14415"></a><span class="lineno">14415</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="l14416"></a><span class="lineno">14416</span>&#160;        pool, name != VMA_NULL ? name : <span class="stringliteral">&quot;&quot;</span>);</div>
+<div class="line"><a name="l14417"></a><span class="lineno">14417</span>&#160;    Flush();</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; </div>
+<div class="line"><a name="l14420"></a><span class="lineno">14420</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="l14421"></a><span class="lineno">14421</span>&#160;{</div>
+<div class="line"><a name="l14422"></a><span class="lineno">14422</span>&#160;    <span class="keywordflow">if</span>(pUserData != VMA_NULL)</div>
+<div class="line"><a name="l14423"></a><span class="lineno">14423</span>&#160;    {</div>
+<div class="line"><a name="l14424"></a><span class="lineno">14424</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="l14425"></a><span class="lineno">14425</span>&#160;        {</div>
+<div class="line"><a name="l14426"></a><span class="lineno">14426</span>&#160;            m_Str = (<span class="keyword">const</span> <span class="keywordtype">char</span>*)pUserData;</div>
+<div class="line"><a name="l14427"></a><span class="lineno">14427</span>&#160;        }</div>
+<div class="line"><a name="l14428"></a><span class="lineno">14428</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14429"></a><span class="lineno">14429</span>&#160;        {</div>
+<div class="line"><a name="l14430"></a><span class="lineno">14430</span>&#160;            sprintf_s(m_PtrStr, <span class="stringliteral">&quot;%p&quot;</span>, pUserData);</div>
+<div class="line"><a name="l14431"></a><span class="lineno">14431</span>&#160;            m_Str = m_PtrStr;</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;    }</div>
+<div class="line"><a name="l14434"></a><span class="lineno">14434</span>&#160;    <span class="keywordflow">else</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;        m_Str = <span class="stringliteral">&quot;&quot;</span>;</div>
+<div class="line"><a name="l14437"></a><span class="lineno">14437</span>&#160;    }</div>
+<div class="line"><a name="l14438"></a><span class="lineno">14438</span>&#160;}</div>
+<div class="line"><a name="l14439"></a><span class="lineno">14439</span>&#160; </div>
+<div class="line"><a name="l14440"></a><span class="lineno">14440</span>&#160;<span class="keywordtype">void</span> VmaRecorder::WriteConfiguration(</div>
+<div class="line"><a name="l14441"></a><span class="lineno">14441</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceProperties&amp; devProps,</div>
+<div class="line"><a name="l14442"></a><span class="lineno">14442</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceMemoryProperties&amp; memProps,</div>
+<div class="line"><a name="l14443"></a><span class="lineno">14443</span>&#160;    uint32_t vulkanApiVersion,</div>
+<div class="line"><a name="l14444"></a><span class="lineno">14444</span>&#160;    <span class="keywordtype">bool</span> dedicatedAllocationExtensionEnabled,</div>
+<div class="line"><a name="l14445"></a><span class="lineno">14445</span>&#160;    <span class="keywordtype">bool</span> bindMemory2ExtensionEnabled,</div>
+<div class="line"><a name="l14446"></a><span class="lineno">14446</span>&#160;    <span class="keywordtype">bool</span> memoryBudgetExtensionEnabled)</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;    fprintf(m_File, <span class="stringliteral">&quot;Config,Begin\n&quot;</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;    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="l14451"></a><span class="lineno">14451</span>&#160; </div>
+<div class="line"><a name="l14452"></a><span class="lineno">14452</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,apiVersion,%u\n&quot;</span>, devProps.apiVersion);</div>
+<div class="line"><a name="l14453"></a><span class="lineno">14453</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,driverVersion,%u\n&quot;</span>, devProps.driverVersion);</div>
+<div class="line"><a name="l14454"></a><span class="lineno">14454</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,vendorID,%u\n&quot;</span>, devProps.vendorID);</div>
+<div class="line"><a name="l14455"></a><span class="lineno">14455</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,deviceID,%u\n&quot;</span>, devProps.deviceID);</div>
+<div class="line"><a name="l14456"></a><span class="lineno">14456</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,deviceType,%u\n&quot;</span>, devProps.deviceType);</div>
+<div class="line"><a name="l14457"></a><span class="lineno">14457</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDevice,deviceName,%s\n&quot;</span>, devProps.deviceName);</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;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceLimits,maxMemoryAllocationCount,%u\n&quot;</span>, devProps.limits.maxMemoryAllocationCount);</div>
+<div class="line"><a name="l14460"></a><span class="lineno">14460</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceLimits,bufferImageGranularity,%llu\n&quot;</span>, devProps.limits.bufferImageGranularity);</div>
+<div class="line"><a name="l14461"></a><span class="lineno">14461</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceLimits,nonCoherentAtomSize,%llu\n&quot;</span>, devProps.limits.nonCoherentAtomSize);</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;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,HeapCount,%u\n&quot;</span>, memProps.memoryHeapCount);</div>
+<div class="line"><a name="l14464"></a><span class="lineno">14464</span>&#160;    <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; memProps.memoryHeapCount; ++i)</div>
 <div class="line"><a name="l14465"></a><span class="lineno">14465</span>&#160;    {</div>
-<div class="line"><a name="l14466"></a><span class="lineno">14466</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="l14467"></a><span class="lineno">14467</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="l14466"></a><span class="lineno">14466</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="l14467"></a><span class="lineno">14467</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="l14468"></a><span class="lineno">14468</span>&#160;    }</div>
-<div class="line"><a name="l14469"></a><span class="lineno">14469</span>&#160; </div>
-<div class="line"><a name="l14470"></a><span class="lineno">14470</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="l14471"></a><span class="lineno">14471</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="l14472"></a><span class="lineno">14472</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="l14473"></a><span class="lineno">14473</span>&#160; </div>
-<div class="line"><a name="l14474"></a><span class="lineno">14474</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="l14475"></a><span class="lineno">14475</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEBUG_ALIGNMENT,%llu\n&quot;</span>, (VkDeviceSize)VMA_DEBUG_ALIGNMENT);</div>
-<div class="line"><a name="l14476"></a><span class="lineno">14476</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="l14477"></a><span class="lineno">14477</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="l14478"></a><span class="lineno">14478</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="l14479"></a><span class="lineno">14479</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="l14480"></a><span class="lineno">14480</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="l14481"></a><span class="lineno">14481</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="l14482"></a><span class="lineno">14482</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="l14483"></a><span class="lineno">14483</span>&#160; </div>
-<div class="line"><a name="l14484"></a><span class="lineno">14484</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Config,End\n&quot;</span>);</div>
-<div class="line"><a name="l14485"></a><span class="lineno">14485</span>&#160;}</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;<span class="keywordtype">void</span> VmaRecorder::GetBasicParams(CallParams&amp; outParams)</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;    outParams.threadId = GetCurrentThreadId();</div>
-<div class="line"><a name="l14490"></a><span class="lineno">14490</span>&#160; </div>
-<div class="line"><a name="l14491"></a><span class="lineno">14491</span>&#160;    LARGE_INTEGER counter;</div>
-<div class="line"><a name="l14492"></a><span class="lineno">14492</span>&#160;    QueryPerformanceCounter(&amp;counter);</div>
-<div class="line"><a name="l14493"></a><span class="lineno">14493</span>&#160;    outParams.time = (double)(counter.QuadPart - m_StartCounter) / (double)m_Freq;</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;<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="l14497"></a><span class="lineno">14497</span>&#160;{</div>
-<div class="line"><a name="l14498"></a><span class="lineno">14498</span>&#160;    <span class="keywordflow">if</span>(count)</div>
-<div class="line"><a name="l14499"></a><span class="lineno">14499</span>&#160;    {</div>
-<div class="line"><a name="l14500"></a><span class="lineno">14500</span>&#160;        fprintf(m_File, <span class="stringliteral">&quot;%p&quot;</span>, pItems[0]);</div>
-<div class="line"><a name="l14501"></a><span class="lineno">14501</span>&#160;        <span class="keywordflow">for</span>(uint64_t i = 1; i &lt; count; ++i)</div>
-<div class="line"><a name="l14502"></a><span class="lineno">14502</span>&#160;        {</div>
-<div class="line"><a name="l14503"></a><span class="lineno">14503</span>&#160;            fprintf(m_File, <span class="stringliteral">&quot; %p&quot;</span>, pItems[i]);</div>
-<div class="line"><a name="l14504"></a><span class="lineno">14504</span>&#160;        }</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;}</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;<span class="keywordtype">void</span> VmaRecorder::Flush()</div>
-<div class="line"><a name="l14509"></a><span class="lineno">14509</span>&#160;{</div>
-<div class="line"><a name="l14510"></a><span class="lineno">14510</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="l14511"></a><span class="lineno">14511</span>&#160;    {</div>
-<div class="line"><a name="l14512"></a><span class="lineno">14512</span>&#160;        fflush(m_File);</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;}</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;<span class="preprocessor">#endif // #if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l14517"></a><span class="lineno">14517</span>&#160; </div>
-<div class="line"><a name="l14519"></a><span class="lineno">14519</span>&#160;<span class="comment">// VmaAllocationObjectAllocator</span></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;VmaAllocationObjectAllocator::VmaAllocationObjectAllocator(<span class="keyword">const</span> VkAllocationCallbacks* pAllocationCallbacks) :</div>
-<div class="line"><a name="l14522"></a><span class="lineno">14522</span>&#160;    m_Allocator(pAllocationCallbacks, 1024)</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; </div>
-<div class="line"><a name="l14526"></a><span class="lineno">14526</span>&#160;<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VmaAllocationObjectAllocator::Allocate()</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;    VmaMutexLock mutexLock(m_Mutex);</div>
-<div class="line"><a name="l14529"></a><span class="lineno">14529</span>&#160;    <span class="keywordflow">return</span> m_Allocator.Alloc();</div>
+<div class="line"><a name="l14469"></a><span class="lineno">14469</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;PhysicalDeviceMemory,TypeCount,%u\n&quot;</span>, memProps.memoryTypeCount);</div>
+<div class="line"><a name="l14470"></a><span class="lineno">14470</span>&#160;    <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; memProps.memoryTypeCount; ++i)</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;        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="l14473"></a><span class="lineno">14473</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="l14474"></a><span class="lineno">14474</span>&#160;    }</div>
+<div class="line"><a name="l14475"></a><span class="lineno">14475</span>&#160; </div>
+<div class="line"><a name="l14476"></a><span class="lineno">14476</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="l14477"></a><span class="lineno">14477</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="l14478"></a><span class="lineno">14478</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="l14479"></a><span class="lineno">14479</span>&#160; </div>
+<div class="line"><a name="l14480"></a><span class="lineno">14480</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="l14481"></a><span class="lineno">14481</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Macro,VMA_DEBUG_ALIGNMENT,%llu\n&quot;</span>, (VkDeviceSize)VMA_DEBUG_ALIGNMENT);</div>
+<div class="line"><a name="l14482"></a><span class="lineno">14482</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="l14483"></a><span class="lineno">14483</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="l14484"></a><span class="lineno">14484</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="l14485"></a><span class="lineno">14485</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="l14486"></a><span class="lineno">14486</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="l14487"></a><span class="lineno">14487</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="l14488"></a><span class="lineno">14488</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="l14489"></a><span class="lineno">14489</span>&#160; </div>
+<div class="line"><a name="l14490"></a><span class="lineno">14490</span>&#160;    fprintf(m_File, <span class="stringliteral">&quot;Config,End\n&quot;</span>);</div>
+<div class="line"><a name="l14491"></a><span class="lineno">14491</span>&#160;}</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="keywordtype">void</span> VmaRecorder::GetBasicParams(CallParams&amp; outParams)</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;    outParams.threadId = GetCurrentThreadId();</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;    LARGE_INTEGER counter;</div>
+<div class="line"><a name="l14498"></a><span class="lineno">14498</span>&#160;    QueryPerformanceCounter(&amp;counter);</div>
+<div class="line"><a name="l14499"></a><span class="lineno">14499</span>&#160;    outParams.time = (double)(counter.QuadPart - m_StartCounter) / (double)m_Freq;</div>
+<div class="line"><a name="l14500"></a><span class="lineno">14500</span>&#160;}</div>
+<div class="line"><a name="l14501"></a><span class="lineno">14501</span>&#160; </div>
+<div class="line"><a name="l14502"></a><span class="lineno">14502</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="l14503"></a><span class="lineno">14503</span>&#160;{</div>
+<div class="line"><a name="l14504"></a><span class="lineno">14504</span>&#160;    <span class="keywordflow">if</span>(count)</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;        fprintf(m_File, <span class="stringliteral">&quot;%p&quot;</span>, pItems[0]);</div>
+<div class="line"><a name="l14507"></a><span class="lineno">14507</span>&#160;        <span class="keywordflow">for</span>(uint64_t i = 1; i &lt; count; ++i)</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;            fprintf(m_File, <span class="stringliteral">&quot; %p&quot;</span>, pItems[i]);</div>
+<div class="line"><a name="l14510"></a><span class="lineno">14510</span>&#160;        }</div>
+<div class="line"><a name="l14511"></a><span class="lineno">14511</span>&#160;    }</div>
+<div class="line"><a name="l14512"></a><span class="lineno">14512</span>&#160;}</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="keywordtype">void</span> VmaRecorder::Flush()</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;    <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="l14517"></a><span class="lineno">14517</span>&#160;    {</div>
+<div class="line"><a name="l14518"></a><span class="lineno">14518</span>&#160;        fflush(m_File);</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; </div>
+<div class="line"><a name="l14522"></a><span class="lineno">14522</span>&#160;<span class="preprocessor">#endif // #if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l14523"></a><span class="lineno">14523</span>&#160; </div>
+<div class="line"><a name="l14525"></a><span class="lineno">14525</span>&#160;<span class="comment">// VmaAllocationObjectAllocator</span></div>
+<div class="line"><a name="l14526"></a><span class="lineno">14526</span>&#160; </div>
+<div class="line"><a name="l14527"></a><span class="lineno">14527</span>&#160;VmaAllocationObjectAllocator::VmaAllocationObjectAllocator(<span class="keyword">const</span> VkAllocationCallbacks* pAllocationCallbacks) :</div>
+<div class="line"><a name="l14528"></a><span class="lineno">14528</span>&#160;    m_Allocator(pAllocationCallbacks, 1024)</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;}</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;<span class="keywordtype">void</span> VmaAllocationObjectAllocator::Free(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAlloc)</div>
+<div class="line"><a name="l14532"></a><span class="lineno">14532</span>&#160;<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> VmaAllocationObjectAllocator::Allocate()</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;    VmaMutexLock mutexLock(m_Mutex);</div>
-<div class="line"><a name="l14535"></a><span class="lineno">14535</span>&#160;    m_Allocator.Free(hAlloc);</div>
+<div class="line"><a name="l14535"></a><span class="lineno">14535</span>&#160;    <span class="keywordflow">return</span> m_Allocator.Alloc();</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; </div>
-<div class="line"><a name="l14539"></a><span class="lineno">14539</span>&#160;<span class="comment">// VmaAllocator_T</span></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;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="l14542"></a><span class="lineno">14542</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="l14543"></a><span class="lineno">14543</span>&#160;    m_VulkanApiVersion(pCreateInfo-&gt;vulkanApiVersion != 0 ? pCreateInfo-&gt;vulkanApiVersion : VK_API_VERSION_1_0),</div>
-<div class="line"><a name="l14544"></a><span class="lineno">14544</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="l14545"></a><span class="lineno">14545</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="l14546"></a><span class="lineno">14546</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="l14547"></a><span class="lineno">14547</span>&#160;    m_hDevice(pCreateInfo-&gt;device),</div>
-<div class="line"><a name="l14548"></a><span class="lineno">14548</span>&#160;    m_hInstance(pCreateInfo-&gt;instance),</div>
-<div class="line"><a name="l14549"></a><span class="lineno">14549</span>&#160;    m_AllocationCallbacksSpecified(pCreateInfo-&gt;pAllocationCallbacks != VMA_NULL),</div>
-<div class="line"><a name="l14550"></a><span class="lineno">14550</span>&#160;    m_AllocationCallbacks(pCreateInfo-&gt;pAllocationCallbacks ?</div>
-<div class="line"><a name="l14551"></a><span class="lineno">14551</span>&#160;        *pCreateInfo-&gt;pAllocationCallbacks : VmaEmptyAllocationCallbacks),</div>
-<div class="line"><a name="l14552"></a><span class="lineno">14552</span>&#160;    m_AllocationObjectAllocator(&amp;m_AllocationCallbacks),</div>
-<div class="line"><a name="l14553"></a><span class="lineno">14553</span>&#160;    m_HeapSizeLimitMask(0),</div>
-<div class="line"><a name="l14554"></a><span class="lineno">14554</span>&#160;    m_PreferredLargeHeapBlockSize(0),</div>
-<div class="line"><a name="l14555"></a><span class="lineno">14555</span>&#160;    m_PhysicalDevice(pCreateInfo-&gt;physicalDevice),</div>
-<div class="line"><a name="l14556"></a><span class="lineno">14556</span>&#160;    m_CurrentFrameIndex(0),</div>
-<div class="line"><a name="l14557"></a><span class="lineno">14557</span>&#160;    m_GpuDefragmentationMemoryTypeBits(UINT32_MAX),</div>
-<div class="line"><a name="l14558"></a><span class="lineno">14558</span>&#160;    m_Pools(VmaStlAllocator&lt;<a class="code" href="struct_vma_pool.html">VmaPool</a>&gt;(GetAllocationCallbacks())),</div>
-<div class="line"><a name="l14559"></a><span class="lineno">14559</span>&#160;    m_NextPoolId(0)</div>
-<div class="line"><a name="l14560"></a><span class="lineno">14560</span>&#160;#if <a class="code" href="vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c">VMA_RECORDING_ENABLED</a></div>
-<div class="line"><a name="l14561"></a><span class="lineno">14561</span>&#160;    ,m_pRecorder(VMA_NULL)</div>
-<div class="line"><a name="l14562"></a><span class="lineno">14562</span>&#160;#endif</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;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</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;        m_UseKhrDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l14567"></a><span class="lineno">14567</span>&#160;        m_UseKhrBindMemory2 = <span class="keyword">false</span>;</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; </div>
-<div class="line"><a name="l14570"></a><span class="lineno">14570</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_DETECT_CORRUPTION)</div>
+<div class="line"><a name="l14538"></a><span class="lineno">14538</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="l14539"></a><span class="lineno">14539</span>&#160;{</div>
+<div class="line"><a name="l14540"></a><span class="lineno">14540</span>&#160;    VmaMutexLock mutexLock(m_Mutex);</div>
+<div class="line"><a name="l14541"></a><span class="lineno">14541</span>&#160;    m_Allocator.Free(hAlloc);</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; </div>
+<div class="line"><a name="l14545"></a><span class="lineno">14545</span>&#160;<span class="comment">// VmaAllocator_T</span></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;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="l14548"></a><span class="lineno">14548</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="l14549"></a><span class="lineno">14549</span>&#160;    m_VulkanApiVersion(pCreateInfo-&gt;vulkanApiVersion != 0 ? pCreateInfo-&gt;vulkanApiVersion : VK_API_VERSION_1_0),</div>
+<div class="line"><a name="l14550"></a><span class="lineno">14550</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="l14551"></a><span class="lineno">14551</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="l14552"></a><span class="lineno">14552</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="l14553"></a><span class="lineno">14553</span>&#160;    m_hDevice(pCreateInfo-&gt;device),</div>
+<div class="line"><a name="l14554"></a><span class="lineno">14554</span>&#160;    m_hInstance(pCreateInfo-&gt;instance),</div>
+<div class="line"><a name="l14555"></a><span class="lineno">14555</span>&#160;    m_AllocationCallbacksSpecified(pCreateInfo-&gt;pAllocationCallbacks != VMA_NULL),</div>
+<div class="line"><a name="l14556"></a><span class="lineno">14556</span>&#160;    m_AllocationCallbacks(pCreateInfo-&gt;pAllocationCallbacks ?</div>
+<div class="line"><a name="l14557"></a><span class="lineno">14557</span>&#160;        *pCreateInfo-&gt;pAllocationCallbacks : VmaEmptyAllocationCallbacks),</div>
+<div class="line"><a name="l14558"></a><span class="lineno">14558</span>&#160;    m_AllocationObjectAllocator(&amp;m_AllocationCallbacks),</div>
+<div class="line"><a name="l14559"></a><span class="lineno">14559</span>&#160;    m_HeapSizeLimitMask(0),</div>
+<div class="line"><a name="l14560"></a><span class="lineno">14560</span>&#160;    m_PreferredLargeHeapBlockSize(0),</div>
+<div class="line"><a name="l14561"></a><span class="lineno">14561</span>&#160;    m_PhysicalDevice(pCreateInfo-&gt;physicalDevice),</div>
+<div class="line"><a name="l14562"></a><span class="lineno">14562</span>&#160;    m_CurrentFrameIndex(0),</div>
+<div class="line"><a name="l14563"></a><span class="lineno">14563</span>&#160;    m_GpuDefragmentationMemoryTypeBits(UINT32_MAX),</div>
+<div class="line"><a name="l14564"></a><span class="lineno">14564</span>&#160;    m_Pools(VmaStlAllocator&lt;<a class="code" href="struct_vma_pool.html">VmaPool</a>&gt;(GetAllocationCallbacks())),</div>
+<div class="line"><a name="l14565"></a><span class="lineno">14565</span>&#160;    m_NextPoolId(0)</div>
+<div class="line"><a name="l14566"></a><span class="lineno">14566</span>&#160;#if <a class="code" href="vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c">VMA_RECORDING_ENABLED</a></div>
+<div class="line"><a name="l14567"></a><span class="lineno">14567</span>&#160;    ,m_pRecorder(VMA_NULL)</div>
+<div class="line"><a name="l14568"></a><span class="lineno">14568</span>&#160;#endif</div>
+<div class="line"><a name="l14569"></a><span class="lineno">14569</span>&#160;{</div>
+<div class="line"><a name="l14570"></a><span class="lineno">14570</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
 <div class="line"><a name="l14571"></a><span class="lineno">14571</span>&#160;    {</div>
-<div class="line"><a name="l14572"></a><span class="lineno">14572</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="l14573"></a><span class="lineno">14573</span>&#160;        VMA_ASSERT(VMA_DEBUG_MARGIN % <span class="keyword">sizeof</span>(uint32_t) == 0);</div>
+<div class="line"><a name="l14572"></a><span class="lineno">14572</span>&#160;        m_UseKhrDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l14573"></a><span class="lineno">14573</span>&#160;        m_UseKhrBindMemory2 = <span class="keyword">false</span>;</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; </div>
-<div class="line"><a name="l14576"></a><span class="lineno">14576</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>);</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;    <span class="keywordflow">if</span>(m_VulkanApiVersion &lt; VK_MAKE_VERSION(1, 1, 0))</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="preprocessor">#if !(VMA_DEDICATED_ALLOCATION)</span></div>
-<div class="line"><a name="l14581"></a><span class="lineno">14581</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="l14582"></a><span class="lineno">14582</span>&#160;        {</div>
-<div class="line"><a name="l14583"></a><span class="lineno">14583</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="l14584"></a><span class="lineno">14584</span>&#160;        }</div>
-<div class="line"><a name="l14585"></a><span class="lineno">14585</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l14586"></a><span class="lineno">14586</span>&#160;<span class="preprocessor">#if !(VMA_BIND_MEMORY2)</span></div>
-<div class="line"><a name="l14587"></a><span class="lineno">14587</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="l14576"></a><span class="lineno">14576</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_DETECT_CORRUPTION)</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;        <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="l14579"></a><span class="lineno">14579</span>&#160;        VMA_ASSERT(VMA_DEBUG_MARGIN % <span class="keyword">sizeof</span>(uint32_t) == 0);</div>
+<div class="line"><a name="l14580"></a><span class="lineno">14580</span>&#160;    }</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;    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>);</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_VulkanApiVersion &lt; VK_MAKE_VERSION(1, 1, 0))</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;<span class="preprocessor">#if !(VMA_DEDICATED_ALLOCATION)</span></div>
+<div class="line"><a name="l14587"></a><span class="lineno">14587</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="l14588"></a><span class="lineno">14588</span>&#160;        {</div>
-<div class="line"><a name="l14589"></a><span class="lineno">14589</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="l14589"></a><span class="lineno">14589</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="l14590"></a><span class="lineno">14590</span>&#160;        }</div>
 <div class="line"><a name="l14591"></a><span class="lineno">14591</span>&#160;<span class="preprocessor">#endif</span></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;<span class="preprocessor">#if !(VMA_MEMORY_BUDGET)</span></div>
-<div class="line"><a name="l14594"></a><span class="lineno">14594</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="l14595"></a><span class="lineno">14595</span>&#160;    {</div>
-<div class="line"><a name="l14596"></a><span class="lineno">14596</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="l14597"></a><span class="lineno">14597</span>&#160;    }</div>
-<div class="line"><a name="l14598"></a><span class="lineno">14598</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l14599"></a><span class="lineno">14599</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &lt; 1001000</span></div>
-<div class="line"><a name="l14600"></a><span class="lineno">14600</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
+<div class="line"><a name="l14592"></a><span class="lineno">14592</span>&#160;<span class="preprocessor">#if !(VMA_BIND_MEMORY2)</span></div>
+<div class="line"><a name="l14593"></a><span class="lineno">14593</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="l14594"></a><span class="lineno">14594</span>&#160;        {</div>
+<div class="line"><a name="l14595"></a><span class="lineno">14595</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="l14596"></a><span class="lineno">14596</span>&#160;        }</div>
+<div class="line"><a name="l14597"></a><span class="lineno">14597</span>&#160;<span class="preprocessor">#endif</span></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;<span class="preprocessor">#if !(VMA_MEMORY_BUDGET)</span></div>
+<div class="line"><a name="l14600"></a><span class="lineno">14600</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="l14601"></a><span class="lineno">14601</span>&#160;    {</div>
-<div class="line"><a name="l14602"></a><span class="lineno">14602</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="l14602"></a><span class="lineno">14602</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="l14603"></a><span class="lineno">14603</span>&#160;    }</div>
 <div class="line"><a name="l14604"></a><span class="lineno">14604</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l14605"></a><span class="lineno">14605</span>&#160; </div>
-<div class="line"><a name="l14606"></a><span class="lineno">14606</span>&#160;    memset(&amp;m_DeviceMemoryCallbacks, 0 ,<span class="keyword">sizeof</span>(m_DeviceMemoryCallbacks));</div>
-<div class="line"><a name="l14607"></a><span class="lineno">14607</span>&#160;    memset(&amp;m_PhysicalDeviceProperties, 0, <span class="keyword">sizeof</span>(m_PhysicalDeviceProperties));</div>
-<div class="line"><a name="l14608"></a><span class="lineno">14608</span>&#160;    memset(&amp;m_MemProps, 0, <span class="keyword">sizeof</span>(m_MemProps));</div>
-<div class="line"><a name="l14609"></a><span class="lineno">14609</span>&#160;        </div>
-<div class="line"><a name="l14610"></a><span class="lineno">14610</span>&#160;    memset(&amp;m_pBlockVectors, 0, <span class="keyword">sizeof</span>(m_pBlockVectors));</div>
-<div class="line"><a name="l14611"></a><span class="lineno">14611</span>&#160;    memset(&amp;m_pDedicatedAllocations, 0, <span class="keyword">sizeof</span>(m_pDedicatedAllocations));</div>
-<div class="line"><a name="l14612"></a><span class="lineno">14612</span>&#160;    memset(&amp;m_VulkanFunctions, 0, <span class="keyword">sizeof</span>(m_VulkanFunctions));</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="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="l14615"></a><span class="lineno">14615</span>&#160;    {</div>
-<div class="line"><a name="l14616"></a><span class="lineno">14616</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="l14617"></a><span class="lineno">14617</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="l14618"></a><span class="lineno">14618</span>&#160;    }</div>
+<div class="line"><a name="l14605"></a><span class="lineno">14605</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &lt; 1001000</span></div>
+<div class="line"><a name="l14606"></a><span class="lineno">14606</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</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;        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="l14609"></a><span class="lineno">14609</span>&#160;    }</div>
+<div class="line"><a name="l14610"></a><span class="lineno">14610</span>&#160;<span class="preprocessor">#endif</span></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;    memset(&amp;m_DeviceMemoryCallbacks, 0 ,<span class="keyword">sizeof</span>(m_DeviceMemoryCallbacks));</div>
+<div class="line"><a name="l14613"></a><span class="lineno">14613</span>&#160;    memset(&amp;m_PhysicalDeviceProperties, 0, <span class="keyword">sizeof</span>(m_PhysicalDeviceProperties));</div>
+<div class="line"><a name="l14614"></a><span class="lineno">14614</span>&#160;    memset(&amp;m_MemProps, 0, <span class="keyword">sizeof</span>(m_MemProps));</div>
+<div class="line"><a name="l14615"></a><span class="lineno">14615</span>&#160;        </div>
+<div class="line"><a name="l14616"></a><span class="lineno">14616</span>&#160;    memset(&amp;m_pBlockVectors, 0, <span class="keyword">sizeof</span>(m_pBlockVectors));</div>
+<div class="line"><a name="l14617"></a><span class="lineno">14617</span>&#160;    memset(&amp;m_pDedicatedAllocations, 0, <span class="keyword">sizeof</span>(m_pDedicatedAllocations));</div>
+<div class="line"><a name="l14618"></a><span class="lineno">14618</span>&#160;    memset(&amp;m_VulkanFunctions, 0, <span class="keyword">sizeof</span>(m_VulkanFunctions));</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;    ImportVulkanFunctions(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd">pVulkanFunctions</a>);</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;    (*m_VulkanFunctions.vkGetPhysicalDeviceProperties)(m_PhysicalDevice, &amp;m_PhysicalDeviceProperties);</div>
-<div class="line"><a name="l14623"></a><span class="lineno">14623</span>&#160;    (*m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties)(m_PhysicalDevice, &amp;m_MemProps);</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;    VMA_ASSERT(VmaIsPow2(VMA_DEBUG_ALIGNMENT));</div>
-<div class="line"><a name="l14626"></a><span class="lineno">14626</span>&#160;    VMA_ASSERT(VmaIsPow2(VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY));</div>
-<div class="line"><a name="l14627"></a><span class="lineno">14627</span>&#160;    VMA_ASSERT(VmaIsPow2(m_PhysicalDeviceProperties.limits.bufferImageGranularity));</div>
-<div class="line"><a name="l14628"></a><span class="lineno">14628</span>&#160;    VMA_ASSERT(VmaIsPow2(m_PhysicalDeviceProperties.limits.nonCoherentAtomSize));</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;    m_PreferredLargeHeapBlockSize = (pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a">preferredLargeHeapBlockSize</a> != 0) ?</div>
-<div class="line"><a name="l14631"></a><span class="lineno">14631</span>&#160;        pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a">preferredLargeHeapBlockSize</a> : static_cast&lt;VkDeviceSize&gt;(VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE);</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>(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b">pHeapSizeLimit</a> != VMA_NULL)</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">for</span>(uint32_t heapIndex = 0; heapIndex &lt; GetMemoryHeapCount(); ++heapIndex)</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="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="l14638"></a><span class="lineno">14638</span>&#160;            <span class="keywordflow">if</span>(limit != VK_WHOLE_SIZE)</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;                m_HeapSizeLimitMask |= 1u &lt;&lt; heapIndex;</div>
-<div class="line"><a name="l14641"></a><span class="lineno">14641</span>&#160;                <span class="keywordflow">if</span>(limit &lt; m_MemProps.memoryHeaps[heapIndex].size)</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;                    m_MemProps.memoryHeaps[heapIndex].size = limit;</div>
-<div class="line"><a name="l14644"></a><span class="lineno">14644</span>&#160;                }</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;        }</div>
-<div class="line"><a name="l14647"></a><span class="lineno">14647</span>&#160;    }</div>
-<div class="line"><a name="l14648"></a><span class="lineno">14648</span>&#160; </div>
-<div class="line"><a name="l14649"></a><span class="lineno">14649</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
-<div class="line"><a name="l14650"></a><span class="lineno">14650</span>&#160;    {</div>
-<div class="line"><a name="l14651"></a><span class="lineno">14651</span>&#160;        <span class="keyword">const</span> VkDeviceSize preferredBlockSize = CalcPreferredBlockSize(memTypeIndex);</div>
-<div class="line"><a name="l14652"></a><span class="lineno">14652</span>&#160; </div>
-<div class="line"><a name="l14653"></a><span class="lineno">14653</span>&#160;        m_pBlockVectors[memTypeIndex] = vma_new(<span class="keyword">this</span>, VmaBlockVector)(</div>
-<div class="line"><a name="l14654"></a><span class="lineno">14654</span>&#160;            <span class="keyword">this</span>,</div>
-<div class="line"><a name="l14655"></a><span class="lineno">14655</span>&#160;            VK_NULL_HANDLE, <span class="comment">// hParentPool</span></div>
-<div class="line"><a name="l14656"></a><span class="lineno">14656</span>&#160;            memTypeIndex,</div>
-<div class="line"><a name="l14657"></a><span class="lineno">14657</span>&#160;            preferredBlockSize,</div>
-<div class="line"><a name="l14658"></a><span class="lineno">14658</span>&#160;            0,</div>
-<div class="line"><a name="l14659"></a><span class="lineno">14659</span>&#160;            SIZE_MAX,</div>
-<div class="line"><a name="l14660"></a><span class="lineno">14660</span>&#160;            GetBufferImageGranularity(),</div>
-<div class="line"><a name="l14661"></a><span class="lineno">14661</span>&#160;            pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a21ea188dd212b8171cb9ecbed4a2a3a7">frameInUseCount</a>,</div>
-<div class="line"><a name="l14662"></a><span class="lineno">14662</span>&#160;            <span class="keyword">false</span>, <span class="comment">// explicitBlockSize</span></div>
-<div class="line"><a name="l14663"></a><span class="lineno">14663</span>&#160;            <span class="keyword">false</span>); <span class="comment">// linearAlgorithm</span></div>
-<div class="line"><a name="l14664"></a><span class="lineno">14664</span>&#160;        <span class="comment">// No need to call m_pBlockVectors[memTypeIndex][blockVectorTypeIndex]-&gt;CreateMinBlocks here,</span></div>
-<div class="line"><a name="l14665"></a><span class="lineno">14665</span>&#160;        <span class="comment">// becase minBlockCount is 0.</span></div>
-<div class="line"><a name="l14666"></a><span class="lineno">14666</span>&#160;        m_pDedicatedAllocations[memTypeIndex] = vma_new(<span class="keyword">this</span>, AllocationVectorType)(VmaStlAllocator&lt;VmaAllocation&gt;(GetAllocationCallbacks()));</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;    }</div>
-<div class="line"><a name="l14669"></a><span class="lineno">14669</span>&#160;}</div>
-<div class="line"><a name="l14670"></a><span class="lineno">14670</span>&#160; </div>
-<div class="line"><a name="l14671"></a><span class="lineno">14671</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="l14672"></a><span class="lineno">14672</span>&#160;{</div>
-<div class="line"><a name="l14673"></a><span class="lineno">14673</span>&#160;    VkResult res = VK_SUCCESS;</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="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="l14676"></a><span class="lineno">14676</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="l14677"></a><span class="lineno">14677</span>&#160;    {</div>
-<div class="line"><a name="l14678"></a><span class="lineno">14678</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l14679"></a><span class="lineno">14679</span>&#160;        m_pRecorder = vma_new(<span class="keyword">this</span>, VmaRecorder)();</div>
-<div class="line"><a name="l14680"></a><span class="lineno">14680</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="l14681"></a><span class="lineno">14681</span>&#160;        <span class="keywordflow">if</span>(res != VK_SUCCESS)</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="keywordflow">return</span> res;</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_pRecorder-&gt;WriteConfiguration(</div>
-<div class="line"><a name="l14686"></a><span class="lineno">14686</span>&#160;            m_PhysicalDeviceProperties,</div>
-<div class="line"><a name="l14687"></a><span class="lineno">14687</span>&#160;            m_MemProps,</div>
-<div class="line"><a name="l14688"></a><span class="lineno">14688</span>&#160;            m_VulkanApiVersion,</div>
-<div class="line"><a name="l14689"></a><span class="lineno">14689</span>&#160;            m_UseKhrDedicatedAllocation,</div>
-<div class="line"><a name="l14690"></a><span class="lineno">14690</span>&#160;            m_UseKhrBindMemory2,</div>
-<div class="line"><a name="l14691"></a><span class="lineno">14691</span>&#160;            m_UseExtMemoryBudget);</div>
-<div class="line"><a name="l14692"></a><span class="lineno">14692</span>&#160;        m_pRecorder-&gt;RecordCreateAllocator(GetCurrentFrameIndex());</div>
-<div class="line"><a name="l14693"></a><span class="lineno">14693</span>&#160;<span class="preprocessor">#else</span></div>
-<div class="line"><a name="l14694"></a><span class="lineno">14694</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="l14695"></a><span class="lineno">14695</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</div>
-<div class="line"><a name="l14696"></a><span class="lineno">14696</span>&#160;<span class="preprocessor">#endif</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; </div>
-<div class="line"><a name="l14699"></a><span class="lineno">14699</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l14700"></a><span class="lineno">14700</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget)</div>
-<div class="line"><a name="l14701"></a><span class="lineno">14701</span>&#160;    {</div>
-<div class="line"><a name="l14702"></a><span class="lineno">14702</span>&#160;        UpdateVulkanBudget();</div>
+<div class="line"><a name="l14620"></a><span class="lineno">14620</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="l14621"></a><span class="lineno">14621</span>&#160;    {</div>
+<div class="line"><a name="l14622"></a><span class="lineno">14622</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="l14623"></a><span class="lineno">14623</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="l14624"></a><span class="lineno">14624</span>&#160;    }</div>
+<div class="line"><a name="l14625"></a><span class="lineno">14625</span>&#160; </div>
+<div class="line"><a name="l14626"></a><span class="lineno">14626</span>&#160;    ImportVulkanFunctions(pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd">pVulkanFunctions</a>);</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;    (*m_VulkanFunctions.vkGetPhysicalDeviceProperties)(m_PhysicalDevice, &amp;m_PhysicalDeviceProperties);</div>
+<div class="line"><a name="l14629"></a><span class="lineno">14629</span>&#160;    (*m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties)(m_PhysicalDevice, &amp;m_MemProps);</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;    VMA_ASSERT(VmaIsPow2(VMA_DEBUG_ALIGNMENT));</div>
+<div class="line"><a name="l14632"></a><span class="lineno">14632</span>&#160;    VMA_ASSERT(VmaIsPow2(VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY));</div>
+<div class="line"><a name="l14633"></a><span class="lineno">14633</span>&#160;    VMA_ASSERT(VmaIsPow2(m_PhysicalDeviceProperties.limits.bufferImageGranularity));</div>
+<div class="line"><a name="l14634"></a><span class="lineno">14634</span>&#160;    VMA_ASSERT(VmaIsPow2(m_PhysicalDeviceProperties.limits.nonCoherentAtomSize));</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;    m_PreferredLargeHeapBlockSize = (pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a">preferredLargeHeapBlockSize</a> != 0) ?</div>
+<div class="line"><a name="l14637"></a><span class="lineno">14637</span>&#160;        pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a">preferredLargeHeapBlockSize</a> : static_cast&lt;VkDeviceSize&gt;(VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE);</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">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="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">for</span>(uint32_t heapIndex = 0; heapIndex &lt; GetMemoryHeapCount(); ++heapIndex)</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;            <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="l14644"></a><span class="lineno">14644</span>&#160;            <span class="keywordflow">if</span>(limit != VK_WHOLE_SIZE)</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;                m_HeapSizeLimitMask |= 1u &lt;&lt; heapIndex;</div>
+<div class="line"><a name="l14647"></a><span class="lineno">14647</span>&#160;                <span class="keywordflow">if</span>(limit &lt; m_MemProps.memoryHeaps[heapIndex].size)</div>
+<div class="line"><a name="l14648"></a><span class="lineno">14648</span>&#160;                {</div>
+<div class="line"><a name="l14649"></a><span class="lineno">14649</span>&#160;                    m_MemProps.memoryHeaps[heapIndex].size = limit;</div>
+<div class="line"><a name="l14650"></a><span class="lineno">14650</span>&#160;                }</div>
+<div class="line"><a name="l14651"></a><span class="lineno">14651</span>&#160;            }</div>
+<div class="line"><a name="l14652"></a><span class="lineno">14652</span>&#160;        }</div>
+<div class="line"><a name="l14653"></a><span class="lineno">14653</span>&#160;    }</div>
+<div class="line"><a name="l14654"></a><span class="lineno">14654</span>&#160; </div>
+<div class="line"><a name="l14655"></a><span class="lineno">14655</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
+<div class="line"><a name="l14656"></a><span class="lineno">14656</span>&#160;    {</div>
+<div class="line"><a name="l14657"></a><span class="lineno">14657</span>&#160;        <span class="keyword">const</span> VkDeviceSize preferredBlockSize = CalcPreferredBlockSize(memTypeIndex);</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;        m_pBlockVectors[memTypeIndex] = vma_new(<span class="keyword">this</span>, VmaBlockVector)(</div>
+<div class="line"><a name="l14660"></a><span class="lineno">14660</span>&#160;            <span class="keyword">this</span>,</div>
+<div class="line"><a name="l14661"></a><span class="lineno">14661</span>&#160;            VK_NULL_HANDLE, <span class="comment">// hParentPool</span></div>
+<div class="line"><a name="l14662"></a><span class="lineno">14662</span>&#160;            memTypeIndex,</div>
+<div class="line"><a name="l14663"></a><span class="lineno">14663</span>&#160;            preferredBlockSize,</div>
+<div class="line"><a name="l14664"></a><span class="lineno">14664</span>&#160;            0,</div>
+<div class="line"><a name="l14665"></a><span class="lineno">14665</span>&#160;            SIZE_MAX,</div>
+<div class="line"><a name="l14666"></a><span class="lineno">14666</span>&#160;            GetBufferImageGranularity(),</div>
+<div class="line"><a name="l14667"></a><span class="lineno">14667</span>&#160;            pCreateInfo-&gt;<a class="code" href="struct_vma_allocator_create_info.html#a21ea188dd212b8171cb9ecbed4a2a3a7">frameInUseCount</a>,</div>
+<div class="line"><a name="l14668"></a><span class="lineno">14668</span>&#160;            <span class="keyword">false</span>, <span class="comment">// explicitBlockSize</span></div>
+<div class="line"><a name="l14669"></a><span class="lineno">14669</span>&#160;            <span class="keyword">false</span>); <span class="comment">// linearAlgorithm</span></div>
+<div class="line"><a name="l14670"></a><span class="lineno">14670</span>&#160;        <span class="comment">// No need to call m_pBlockVectors[memTypeIndex][blockVectorTypeIndex]-&gt;CreateMinBlocks here,</span></div>
+<div class="line"><a name="l14671"></a><span class="lineno">14671</span>&#160;        <span class="comment">// becase minBlockCount is 0.</span></div>
+<div class="line"><a name="l14672"></a><span class="lineno">14672</span>&#160;        m_pDedicatedAllocations[memTypeIndex] = vma_new(<span class="keyword">this</span>, AllocationVectorType)(VmaStlAllocator&lt;VmaAllocation&gt;(GetAllocationCallbacks()));</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;    }</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; </div>
+<div class="line"><a name="l14677"></a><span class="lineno">14677</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="l14678"></a><span class="lineno">14678</span>&#160;{</div>
+<div class="line"><a name="l14679"></a><span class="lineno">14679</span>&#160;    VkResult res = 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;    <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="l14682"></a><span class="lineno">14682</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="l14683"></a><span class="lineno">14683</span>&#160;    {</div>
+<div class="line"><a name="l14684"></a><span class="lineno">14684</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l14685"></a><span class="lineno">14685</span>&#160;        m_pRecorder = vma_new(<span class="keyword">this</span>, VmaRecorder)();</div>
+<div class="line"><a name="l14686"></a><span class="lineno">14686</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="l14687"></a><span class="lineno">14687</span>&#160;        <span class="keywordflow">if</span>(res != VK_SUCCESS)</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;            <span class="keywordflow">return</span> res;</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;        m_pRecorder-&gt;WriteConfiguration(</div>
+<div class="line"><a name="l14692"></a><span class="lineno">14692</span>&#160;            m_PhysicalDeviceProperties,</div>
+<div class="line"><a name="l14693"></a><span class="lineno">14693</span>&#160;            m_MemProps,</div>
+<div class="line"><a name="l14694"></a><span class="lineno">14694</span>&#160;            m_VulkanApiVersion,</div>
+<div class="line"><a name="l14695"></a><span class="lineno">14695</span>&#160;            m_UseKhrDedicatedAllocation,</div>
+<div class="line"><a name="l14696"></a><span class="lineno">14696</span>&#160;            m_UseKhrBindMemory2,</div>
+<div class="line"><a name="l14697"></a><span class="lineno">14697</span>&#160;            m_UseExtMemoryBudget);</div>
+<div class="line"><a name="l14698"></a><span class="lineno">14698</span>&#160;        m_pRecorder-&gt;RecordCreateAllocator(GetCurrentFrameIndex());</div>
+<div class="line"><a name="l14699"></a><span class="lineno">14699</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l14700"></a><span class="lineno">14700</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="l14701"></a><span class="lineno">14701</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_FEATURE_NOT_PRESENT;</div>
+<div class="line"><a name="l14702"></a><span class="lineno">14702</span>&#160;<span class="preprocessor">#endif</span></div>
 <div class="line"><a name="l14703"></a><span class="lineno">14703</span>&#160;    }</div>
-<div class="line"><a name="l14704"></a><span class="lineno">14704</span>&#160;<span class="preprocessor">#endif // #if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l14705"></a><span class="lineno">14705</span>&#160; </div>
-<div class="line"><a name="l14706"></a><span class="lineno">14706</span>&#160;    <span class="keywordflow">return</span> res;</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; </div>
-<div class="line"><a name="l14709"></a><span class="lineno">14709</span>&#160;VmaAllocator_T::~VmaAllocator_T()</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l14712"></a><span class="lineno">14712</span>&#160;    <span class="keywordflow">if</span>(m_pRecorder != VMA_NULL)</div>
-<div class="line"><a name="l14713"></a><span class="lineno">14713</span>&#160;    {</div>
-<div class="line"><a name="l14714"></a><span class="lineno">14714</span>&#160;        m_pRecorder-&gt;RecordDestroyAllocator(GetCurrentFrameIndex());</div>
-<div class="line"><a name="l14715"></a><span class="lineno">14715</span>&#160;        vma_delete(<span class="keyword">this</span>, m_pRecorder);</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;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l14718"></a><span class="lineno">14718</span>&#160;    </div>
-<div class="line"><a name="l14719"></a><span class="lineno">14719</span>&#160;    VMA_ASSERT(m_Pools.empty());</div>
-<div class="line"><a name="l14720"></a><span class="lineno">14720</span>&#160; </div>
-<div class="line"><a name="l14721"></a><span class="lineno">14721</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = GetMemoryTypeCount(); i--; )</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;        <span class="keywordflow">if</span>(m_pDedicatedAllocations[i] != VMA_NULL &amp;&amp; !m_pDedicatedAllocations[i]-&gt;empty())</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;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Unfreed dedicated allocations found.&quot;</span>);</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; </div>
-<div class="line"><a name="l14728"></a><span class="lineno">14728</span>&#160;        vma_delete(<span class="keyword">this</span>, m_pDedicatedAllocations[i]);</div>
-<div class="line"><a name="l14729"></a><span class="lineno">14729</span>&#160;        vma_delete(<span class="keyword">this</span>, m_pBlockVectors[i]);</div>
-<div class="line"><a name="l14730"></a><span class="lineno">14730</span>&#160;    }</div>
-<div class="line"><a name="l14731"></a><span class="lineno">14731</span>&#160;}</div>
-<div class="line"><a name="l14732"></a><span class="lineno">14732</span>&#160; </div>
-<div class="line"><a name="l14733"></a><span class="lineno">14733</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="l14734"></a><span class="lineno">14734</span>&#160;{</div>
-<div class="line"><a name="l14735"></a><span class="lineno">14735</span>&#160;<span class="preprocessor">#if VMA_STATIC_VULKAN_FUNCTIONS == 1</span></div>
-<div class="line"><a name="l14736"></a><span class="lineno">14736</span>&#160;    m_VulkanFunctions.vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)vkGetPhysicalDeviceProperties;</div>
-<div class="line"><a name="l14737"></a><span class="lineno">14737</span>&#160;    m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)vkGetPhysicalDeviceMemoryProperties;</div>
-<div class="line"><a name="l14738"></a><span class="lineno">14738</span>&#160;    m_VulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkAllocateMemory;</div>
-<div class="line"><a name="l14739"></a><span class="lineno">14739</span>&#160;    m_VulkanFunctions.vkFreeMemory = (PFN_vkFreeMemory)vkFreeMemory;</div>
-<div class="line"><a name="l14740"></a><span class="lineno">14740</span>&#160;    m_VulkanFunctions.vkMapMemory = (PFN_vkMapMemory)vkMapMemory;</div>
-<div class="line"><a name="l14741"></a><span class="lineno">14741</span>&#160;    m_VulkanFunctions.vkUnmapMemory = (PFN_vkUnmapMemory)vkUnmapMemory;</div>
-<div class="line"><a name="l14742"></a><span class="lineno">14742</span>&#160;    m_VulkanFunctions.vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)vkFlushMappedMemoryRanges;</div>
-<div class="line"><a name="l14743"></a><span class="lineno">14743</span>&#160;    m_VulkanFunctions.vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)vkInvalidateMappedMemoryRanges;</div>
-<div class="line"><a name="l14744"></a><span class="lineno">14744</span>&#160;    m_VulkanFunctions.vkBindBufferMemory = (PFN_vkBindBufferMemory)vkBindBufferMemory;</div>
-<div class="line"><a name="l14745"></a><span class="lineno">14745</span>&#160;    m_VulkanFunctions.vkBindImageMemory = (PFN_vkBindImageMemory)vkBindImageMemory;</div>
-<div class="line"><a name="l14746"></a><span class="lineno">14746</span>&#160;    m_VulkanFunctions.vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)vkGetBufferMemoryRequirements;</div>
-<div class="line"><a name="l14747"></a><span class="lineno">14747</span>&#160;    m_VulkanFunctions.vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)vkGetImageMemoryRequirements;</div>
-<div class="line"><a name="l14748"></a><span class="lineno">14748</span>&#160;    m_VulkanFunctions.vkCreateBuffer = (PFN_vkCreateBuffer)vkCreateBuffer;</div>
-<div class="line"><a name="l14749"></a><span class="lineno">14749</span>&#160;    m_VulkanFunctions.vkDestroyBuffer = (PFN_vkDestroyBuffer)vkDestroyBuffer;</div>
-<div class="line"><a name="l14750"></a><span class="lineno">14750</span>&#160;    m_VulkanFunctions.vkCreateImage = (PFN_vkCreateImage)vkCreateImage;</div>
-<div class="line"><a name="l14751"></a><span class="lineno">14751</span>&#160;    m_VulkanFunctions.vkDestroyImage = (PFN_vkDestroyImage)vkDestroyImage;</div>
-<div class="line"><a name="l14752"></a><span class="lineno">14752</span>&#160;    m_VulkanFunctions.vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer)vkCmdCopyBuffer;</div>
-<div class="line"><a name="l14753"></a><span class="lineno">14753</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l14754"></a><span class="lineno">14754</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</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;        VMA_ASSERT(m_hInstance != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l14757"></a><span class="lineno">14757</span>&#160;        m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR =</div>
-<div class="line"><a name="l14758"></a><span class="lineno">14758</span>&#160;            (PFN_vkGetBufferMemoryRequirements2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkGetBufferMemoryRequirements2&quot;</span>);</div>
-<div class="line"><a name="l14759"></a><span class="lineno">14759</span>&#160;        m_VulkanFunctions.vkGetImageMemoryRequirements2KHR =</div>
-<div class="line"><a name="l14760"></a><span class="lineno">14760</span>&#160;            (PFN_vkGetImageMemoryRequirements2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkGetImageMemoryRequirements2&quot;</span>);</div>
-<div class="line"><a name="l14761"></a><span class="lineno">14761</span>&#160;        m_VulkanFunctions.vkBindBufferMemory2KHR =</div>
-<div class="line"><a name="l14762"></a><span class="lineno">14762</span>&#160;            (PFN_vkBindBufferMemory2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkBindBufferMemory2&quot;</span>);</div>
-<div class="line"><a name="l14763"></a><span class="lineno">14763</span>&#160;        m_VulkanFunctions.vkBindImageMemory2KHR =</div>
-<div class="line"><a name="l14764"></a><span class="lineno">14764</span>&#160;            (PFN_vkBindImageMemory2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkBindImageMemory2&quot;</span>);</div>
-<div class="line"><a name="l14765"></a><span class="lineno">14765</span>&#160;        m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR =</div>
-<div class="line"><a name="l14766"></a><span class="lineno">14766</span>&#160;            (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)vkGetInstanceProcAddr(m_hInstance, <span class="stringliteral">&quot;vkGetPhysicalDeviceMemoryProperties2&quot;</span>);</div>
-<div class="line"><a name="l14767"></a><span class="lineno">14767</span>&#160;    }</div>
-<div class="line"><a name="l14768"></a><span class="lineno">14768</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l14769"></a><span class="lineno">14769</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION</span></div>
-<div class="line"><a name="l14770"></a><span class="lineno">14770</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation)</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;        m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR =</div>
-<div class="line"><a name="l14773"></a><span class="lineno">14773</span>&#160;            (PFN_vkGetBufferMemoryRequirements2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkGetBufferMemoryRequirements2KHR&quot;</span>);</div>
-<div class="line"><a name="l14774"></a><span class="lineno">14774</span>&#160;        m_VulkanFunctions.vkGetImageMemoryRequirements2KHR =</div>
-<div class="line"><a name="l14775"></a><span class="lineno">14775</span>&#160;            (PFN_vkGetImageMemoryRequirements2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkGetImageMemoryRequirements2KHR&quot;</span>);</div>
-<div class="line"><a name="l14776"></a><span class="lineno">14776</span>&#160;    }</div>
-<div class="line"><a name="l14777"></a><span class="lineno">14777</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l14778"></a><span class="lineno">14778</span>&#160;<span class="preprocessor">#if VMA_BIND_MEMORY2</span></div>
-<div class="line"><a name="l14779"></a><span class="lineno">14779</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrBindMemory2)</div>
-<div class="line"><a name="l14780"></a><span class="lineno">14780</span>&#160;    {</div>
-<div class="line"><a name="l14781"></a><span class="lineno">14781</span>&#160;        m_VulkanFunctions.vkBindBufferMemory2KHR =</div>
-<div class="line"><a name="l14782"></a><span class="lineno">14782</span>&#160;            (PFN_vkBindBufferMemory2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkBindBufferMemory2KHR&quot;</span>);</div>
-<div class="line"><a name="l14783"></a><span class="lineno">14783</span>&#160;        m_VulkanFunctions.vkBindImageMemory2KHR =</div>
-<div class="line"><a name="l14784"></a><span class="lineno">14784</span>&#160;            (PFN_vkBindImageMemory2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkBindImageMemory2KHR&quot;</span>);</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;<span class="preprocessor">#endif // #if VMA_BIND_MEMORY2</span></div>
-<div class="line"><a name="l14787"></a><span class="lineno">14787</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l14788"></a><span class="lineno">14788</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget &amp;&amp; m_VulkanApiVersion &lt; VK_MAKE_VERSION(1, 1, 0))</div>
-<div class="line"><a name="l14789"></a><span class="lineno">14789</span>&#160;    {</div>
-<div class="line"><a name="l14790"></a><span class="lineno">14790</span>&#160;        VMA_ASSERT(m_hInstance != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l14791"></a><span class="lineno">14791</span>&#160;        m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR =</div>
-<div class="line"><a name="l14792"></a><span class="lineno">14792</span>&#160;            (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)vkGetInstanceProcAddr(m_hInstance, <span class="stringliteral">&quot;vkGetPhysicalDeviceMemoryProperties2KHR&quot;</span>);</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;<span class="preprocessor">#endif // #if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l14795"></a><span class="lineno">14795</span>&#160;<span class="preprocessor">#endif // #if VMA_STATIC_VULKAN_FUNCTIONS == 1</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;<span class="preprocessor">#define VMA_COPY_IF_NOT_NULL(funcName) \</span></div>
-<div class="line"><a name="l14798"></a><span class="lineno">14798</span>&#160;<span class="preprocessor">    if(pVulkanFunctions-&gt;funcName != VMA_NULL) m_VulkanFunctions.funcName = pVulkanFunctions-&gt;funcName;</span></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="keywordflow">if</span>(pVulkanFunctions != VMA_NULL)</div>
-<div class="line"><a name="l14801"></a><span class="lineno">14801</span>&#160;    {</div>
-<div class="line"><a name="l14802"></a><span class="lineno">14802</span>&#160;        VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceProperties);</div>
-<div class="line"><a name="l14803"></a><span class="lineno">14803</span>&#160;        VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceMemoryProperties);</div>
-<div class="line"><a name="l14804"></a><span class="lineno">14804</span>&#160;        VMA_COPY_IF_NOT_NULL(vkAllocateMemory);</div>
-<div class="line"><a name="l14805"></a><span class="lineno">14805</span>&#160;        VMA_COPY_IF_NOT_NULL(vkFreeMemory);</div>
-<div class="line"><a name="l14806"></a><span class="lineno">14806</span>&#160;        VMA_COPY_IF_NOT_NULL(vkMapMemory);</div>
-<div class="line"><a name="l14807"></a><span class="lineno">14807</span>&#160;        VMA_COPY_IF_NOT_NULL(vkUnmapMemory);</div>
-<div class="line"><a name="l14808"></a><span class="lineno">14808</span>&#160;        VMA_COPY_IF_NOT_NULL(vkFlushMappedMemoryRanges);</div>
-<div class="line"><a name="l14809"></a><span class="lineno">14809</span>&#160;        VMA_COPY_IF_NOT_NULL(vkInvalidateMappedMemoryRanges);</div>
-<div class="line"><a name="l14810"></a><span class="lineno">14810</span>&#160;        VMA_COPY_IF_NOT_NULL(vkBindBufferMemory);</div>
-<div class="line"><a name="l14811"></a><span class="lineno">14811</span>&#160;        VMA_COPY_IF_NOT_NULL(vkBindImageMemory);</div>
-<div class="line"><a name="l14812"></a><span class="lineno">14812</span>&#160;        VMA_COPY_IF_NOT_NULL(vkGetBufferMemoryRequirements);</div>
-<div class="line"><a name="l14813"></a><span class="lineno">14813</span>&#160;        VMA_COPY_IF_NOT_NULL(vkGetImageMemoryRequirements);</div>
-<div class="line"><a name="l14814"></a><span class="lineno">14814</span>&#160;        VMA_COPY_IF_NOT_NULL(vkCreateBuffer);</div>
-<div class="line"><a name="l14815"></a><span class="lineno">14815</span>&#160;        VMA_COPY_IF_NOT_NULL(vkDestroyBuffer);</div>
-<div class="line"><a name="l14816"></a><span class="lineno">14816</span>&#160;        VMA_COPY_IF_NOT_NULL(vkCreateImage);</div>
-<div class="line"><a name="l14817"></a><span class="lineno">14817</span>&#160;        VMA_COPY_IF_NOT_NULL(vkDestroyImage);</div>
-<div class="line"><a name="l14818"></a><span class="lineno">14818</span>&#160;        VMA_COPY_IF_NOT_NULL(vkCmdCopyBuffer);</div>
-<div class="line"><a name="l14819"></a><span class="lineno">14819</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l14820"></a><span class="lineno">14820</span>&#160;        VMA_COPY_IF_NOT_NULL(vkGetBufferMemoryRequirements2KHR);</div>
-<div class="line"><a name="l14821"></a><span class="lineno">14821</span>&#160;        VMA_COPY_IF_NOT_NULL(vkGetImageMemoryRequirements2KHR);</div>
-<div class="line"><a name="l14822"></a><span class="lineno">14822</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l14823"></a><span class="lineno">14823</span>&#160;<span class="preprocessor">#if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l14824"></a><span class="lineno">14824</span>&#160;        VMA_COPY_IF_NOT_NULL(vkBindBufferMemory2KHR);</div>
-<div class="line"><a name="l14825"></a><span class="lineno">14825</span>&#160;        VMA_COPY_IF_NOT_NULL(vkBindImageMemory2KHR);</div>
-<div class="line"><a name="l14826"></a><span class="lineno">14826</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l14827"></a><span class="lineno">14827</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l14828"></a><span class="lineno">14828</span>&#160;        VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceMemoryProperties2KHR);</div>
-<div class="line"><a name="l14829"></a><span class="lineno">14829</span>&#160;<span class="preprocessor">#endif</span></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; </div>
-<div class="line"><a name="l14832"></a><span class="lineno">14832</span>&#160;<span class="preprocessor">#undef VMA_COPY_IF_NOT_NULL</span></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;    <span class="comment">// If these asserts are hit, you must either #define VMA_STATIC_VULKAN_FUNCTIONS 1</span></div>
-<div class="line"><a name="l14835"></a><span class="lineno">14835</span>&#160;    <span class="comment">// or pass valid pointers as VmaAllocatorCreateInfo::pVulkanFunctions.</span></div>
-<div class="line"><a name="l14836"></a><span class="lineno">14836</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceProperties != VMA_NULL);</div>
-<div class="line"><a name="l14837"></a><span class="lineno">14837</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties != VMA_NULL);</div>
-<div class="line"><a name="l14838"></a><span class="lineno">14838</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkAllocateMemory != VMA_NULL);</div>
-<div class="line"><a name="l14839"></a><span class="lineno">14839</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkFreeMemory != VMA_NULL);</div>
-<div class="line"><a name="l14840"></a><span class="lineno">14840</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkMapMemory != VMA_NULL);</div>
-<div class="line"><a name="l14841"></a><span class="lineno">14841</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkUnmapMemory != VMA_NULL);</div>
-<div class="line"><a name="l14842"></a><span class="lineno">14842</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkFlushMappedMemoryRanges != VMA_NULL);</div>
-<div class="line"><a name="l14843"></a><span class="lineno">14843</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkInvalidateMappedMemoryRanges != VMA_NULL);</div>
-<div class="line"><a name="l14844"></a><span class="lineno">14844</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkBindBufferMemory != VMA_NULL);</div>
-<div class="line"><a name="l14845"></a><span class="lineno">14845</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkBindImageMemory != VMA_NULL);</div>
-<div class="line"><a name="l14846"></a><span class="lineno">14846</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetBufferMemoryRequirements != VMA_NULL);</div>
-<div class="line"><a name="l14847"></a><span class="lineno">14847</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetImageMemoryRequirements != VMA_NULL);</div>
-<div class="line"><a name="l14848"></a><span class="lineno">14848</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkCreateBuffer != VMA_NULL);</div>
-<div class="line"><a name="l14849"></a><span class="lineno">14849</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkDestroyBuffer != VMA_NULL);</div>
-<div class="line"><a name="l14850"></a><span class="lineno">14850</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkCreateImage != VMA_NULL);</div>
-<div class="line"><a name="l14851"></a><span class="lineno">14851</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkDestroyImage != VMA_NULL);</div>
-<div class="line"><a name="l14852"></a><span class="lineno">14852</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkCmdCopyBuffer != VMA_NULL);</div>
-<div class="line"><a name="l14853"></a><span class="lineno">14853</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l14854"></a><span class="lineno">14854</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0) || m_UseKhrDedicatedAllocation)</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;        VMA_ASSERT(m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR != VMA_NULL);</div>
-<div class="line"><a name="l14857"></a><span class="lineno">14857</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkGetImageMemoryRequirements2KHR != VMA_NULL);</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="preprocessor">#endif</span></div>
-<div class="line"><a name="l14860"></a><span class="lineno">14860</span>&#160;<span class="preprocessor">#if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l14861"></a><span class="lineno">14861</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0) || m_UseKhrBindMemory2)</div>
-<div class="line"><a name="l14862"></a><span class="lineno">14862</span>&#160;    {</div>
-<div class="line"><a name="l14863"></a><span class="lineno">14863</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkBindBufferMemory2KHR != VMA_NULL);</div>
-<div class="line"><a name="l14864"></a><span class="lineno">14864</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkBindImageMemory2KHR != VMA_NULL);</div>
-<div class="line"><a name="l14865"></a><span class="lineno">14865</span>&#160;    }</div>
-<div class="line"><a name="l14866"></a><span class="lineno">14866</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l14867"></a><span class="lineno">14867</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l14868"></a><span class="lineno">14868</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
-<div class="line"><a name="l14869"></a><span class="lineno">14869</span>&#160;    {</div>
-<div class="line"><a name="l14870"></a><span class="lineno">14870</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR != VMA_NULL);</div>
+<div class="line"><a name="l14704"></a><span class="lineno">14704</span>&#160; </div>
+<div class="line"><a name="l14705"></a><span class="lineno">14705</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l14706"></a><span class="lineno">14706</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget)</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;        UpdateVulkanBudget();</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="preprocessor">#endif // #if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l14711"></a><span class="lineno">14711</span>&#160; </div>
+<div class="line"><a name="l14712"></a><span class="lineno">14712</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l14713"></a><span class="lineno">14713</span>&#160;}</div>
+<div class="line"><a name="l14714"></a><span class="lineno">14714</span>&#160; </div>
+<div class="line"><a name="l14715"></a><span class="lineno">14715</span>&#160;VmaAllocator_T::~VmaAllocator_T()</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l14718"></a><span class="lineno">14718</span>&#160;    <span class="keywordflow">if</span>(m_pRecorder != VMA_NULL)</div>
+<div class="line"><a name="l14719"></a><span class="lineno">14719</span>&#160;    {</div>
+<div class="line"><a name="l14720"></a><span class="lineno">14720</span>&#160;        m_pRecorder-&gt;RecordDestroyAllocator(GetCurrentFrameIndex());</div>
+<div class="line"><a name="l14721"></a><span class="lineno">14721</span>&#160;        vma_delete(<span class="keyword">this</span>, m_pRecorder);</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;<span class="preprocessor">#endif</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;    VMA_ASSERT(m_Pools.empty());</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;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = GetMemoryTypeCount(); i--; )</div>
+<div class="line"><a name="l14728"></a><span class="lineno">14728</span>&#160;    {</div>
+<div class="line"><a name="l14729"></a><span class="lineno">14729</span>&#160;        <span class="keywordflow">if</span>(m_pDedicatedAllocations[i] != VMA_NULL &amp;&amp; !m_pDedicatedAllocations[i]-&gt;empty())</div>
+<div class="line"><a name="l14730"></a><span class="lineno">14730</span>&#160;        {</div>
+<div class="line"><a name="l14731"></a><span class="lineno">14731</span>&#160;            VMA_ASSERT(0 &amp;&amp; <span class="stringliteral">&quot;Unfreed dedicated allocations found.&quot;</span>);</div>
+<div class="line"><a name="l14732"></a><span class="lineno">14732</span>&#160;        }</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;        vma_delete(<span class="keyword">this</span>, m_pDedicatedAllocations[i]);</div>
+<div class="line"><a name="l14735"></a><span class="lineno">14735</span>&#160;        vma_delete(<span class="keyword">this</span>, m_pBlockVectors[i]);</div>
+<div class="line"><a name="l14736"></a><span class="lineno">14736</span>&#160;    }</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; </div>
+<div class="line"><a name="l14739"></a><span class="lineno">14739</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="l14740"></a><span class="lineno">14740</span>&#160;{</div>
+<div class="line"><a name="l14741"></a><span class="lineno">14741</span>&#160;<span class="preprocessor">#if VMA_STATIC_VULKAN_FUNCTIONS == 1</span></div>
+<div class="line"><a name="l14742"></a><span class="lineno">14742</span>&#160;    m_VulkanFunctions.vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)vkGetPhysicalDeviceProperties;</div>
+<div class="line"><a name="l14743"></a><span class="lineno">14743</span>&#160;    m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)vkGetPhysicalDeviceMemoryProperties;</div>
+<div class="line"><a name="l14744"></a><span class="lineno">14744</span>&#160;    m_VulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkAllocateMemory;</div>
+<div class="line"><a name="l14745"></a><span class="lineno">14745</span>&#160;    m_VulkanFunctions.vkFreeMemory = (PFN_vkFreeMemory)vkFreeMemory;</div>
+<div class="line"><a name="l14746"></a><span class="lineno">14746</span>&#160;    m_VulkanFunctions.vkMapMemory = (PFN_vkMapMemory)vkMapMemory;</div>
+<div class="line"><a name="l14747"></a><span class="lineno">14747</span>&#160;    m_VulkanFunctions.vkUnmapMemory = (PFN_vkUnmapMemory)vkUnmapMemory;</div>
+<div class="line"><a name="l14748"></a><span class="lineno">14748</span>&#160;    m_VulkanFunctions.vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)vkFlushMappedMemoryRanges;</div>
+<div class="line"><a name="l14749"></a><span class="lineno">14749</span>&#160;    m_VulkanFunctions.vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)vkInvalidateMappedMemoryRanges;</div>
+<div class="line"><a name="l14750"></a><span class="lineno">14750</span>&#160;    m_VulkanFunctions.vkBindBufferMemory = (PFN_vkBindBufferMemory)vkBindBufferMemory;</div>
+<div class="line"><a name="l14751"></a><span class="lineno">14751</span>&#160;    m_VulkanFunctions.vkBindImageMemory = (PFN_vkBindImageMemory)vkBindImageMemory;</div>
+<div class="line"><a name="l14752"></a><span class="lineno">14752</span>&#160;    m_VulkanFunctions.vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)vkGetBufferMemoryRequirements;</div>
+<div class="line"><a name="l14753"></a><span class="lineno">14753</span>&#160;    m_VulkanFunctions.vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)vkGetImageMemoryRequirements;</div>
+<div class="line"><a name="l14754"></a><span class="lineno">14754</span>&#160;    m_VulkanFunctions.vkCreateBuffer = (PFN_vkCreateBuffer)vkCreateBuffer;</div>
+<div class="line"><a name="l14755"></a><span class="lineno">14755</span>&#160;    m_VulkanFunctions.vkDestroyBuffer = (PFN_vkDestroyBuffer)vkDestroyBuffer;</div>
+<div class="line"><a name="l14756"></a><span class="lineno">14756</span>&#160;    m_VulkanFunctions.vkCreateImage = (PFN_vkCreateImage)vkCreateImage;</div>
+<div class="line"><a name="l14757"></a><span class="lineno">14757</span>&#160;    m_VulkanFunctions.vkDestroyImage = (PFN_vkDestroyImage)vkDestroyImage;</div>
+<div class="line"><a name="l14758"></a><span class="lineno">14758</span>&#160;    m_VulkanFunctions.vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer)vkCmdCopyBuffer;</div>
+<div class="line"><a name="l14759"></a><span class="lineno">14759</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l14760"></a><span class="lineno">14760</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
+<div class="line"><a name="l14761"></a><span class="lineno">14761</span>&#160;    {</div>
+<div class="line"><a name="l14762"></a><span class="lineno">14762</span>&#160;        VMA_ASSERT(m_hInstance != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l14763"></a><span class="lineno">14763</span>&#160;        m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR =</div>
+<div class="line"><a name="l14764"></a><span class="lineno">14764</span>&#160;            (PFN_vkGetBufferMemoryRequirements2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkGetBufferMemoryRequirements2&quot;</span>);</div>
+<div class="line"><a name="l14765"></a><span class="lineno">14765</span>&#160;        m_VulkanFunctions.vkGetImageMemoryRequirements2KHR =</div>
+<div class="line"><a name="l14766"></a><span class="lineno">14766</span>&#160;            (PFN_vkGetImageMemoryRequirements2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkGetImageMemoryRequirements2&quot;</span>);</div>
+<div class="line"><a name="l14767"></a><span class="lineno">14767</span>&#160;        m_VulkanFunctions.vkBindBufferMemory2KHR =</div>
+<div class="line"><a name="l14768"></a><span class="lineno">14768</span>&#160;            (PFN_vkBindBufferMemory2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkBindBufferMemory2&quot;</span>);</div>
+<div class="line"><a name="l14769"></a><span class="lineno">14769</span>&#160;        m_VulkanFunctions.vkBindImageMemory2KHR =</div>
+<div class="line"><a name="l14770"></a><span class="lineno">14770</span>&#160;            (PFN_vkBindImageMemory2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkBindImageMemory2&quot;</span>);</div>
+<div class="line"><a name="l14771"></a><span class="lineno">14771</span>&#160;        m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR =</div>
+<div class="line"><a name="l14772"></a><span class="lineno">14772</span>&#160;            (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)vkGetInstanceProcAddr(m_hInstance, <span class="stringliteral">&quot;vkGetPhysicalDeviceMemoryProperties2&quot;</span>);</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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l14775"></a><span class="lineno">14775</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION</span></div>
+<div class="line"><a name="l14776"></a><span class="lineno">14776</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation)</div>
+<div class="line"><a name="l14777"></a><span class="lineno">14777</span>&#160;    {</div>
+<div class="line"><a name="l14778"></a><span class="lineno">14778</span>&#160;        m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR =</div>
+<div class="line"><a name="l14779"></a><span class="lineno">14779</span>&#160;            (PFN_vkGetBufferMemoryRequirements2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkGetBufferMemoryRequirements2KHR&quot;</span>);</div>
+<div class="line"><a name="l14780"></a><span class="lineno">14780</span>&#160;        m_VulkanFunctions.vkGetImageMemoryRequirements2KHR =</div>
+<div class="line"><a name="l14781"></a><span class="lineno">14781</span>&#160;            (PFN_vkGetImageMemoryRequirements2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkGetImageMemoryRequirements2KHR&quot;</span>);</div>
+<div class="line"><a name="l14782"></a><span class="lineno">14782</span>&#160;    }</div>
+<div class="line"><a name="l14783"></a><span class="lineno">14783</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l14784"></a><span class="lineno">14784</span>&#160;<span class="preprocessor">#if VMA_BIND_MEMORY2</span></div>
+<div class="line"><a name="l14785"></a><span class="lineno">14785</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrBindMemory2)</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;        m_VulkanFunctions.vkBindBufferMemory2KHR =</div>
+<div class="line"><a name="l14788"></a><span class="lineno">14788</span>&#160;            (PFN_vkBindBufferMemory2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkBindBufferMemory2KHR&quot;</span>);</div>
+<div class="line"><a name="l14789"></a><span class="lineno">14789</span>&#160;        m_VulkanFunctions.vkBindImageMemory2KHR =</div>
+<div class="line"><a name="l14790"></a><span class="lineno">14790</span>&#160;            (PFN_vkBindImageMemory2KHR)vkGetDeviceProcAddr(m_hDevice, <span class="stringliteral">&quot;vkBindImageMemory2KHR&quot;</span>);</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;<span class="preprocessor">#endif // #if VMA_BIND_MEMORY2</span></div>
+<div class="line"><a name="l14793"></a><span class="lineno">14793</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l14794"></a><span class="lineno">14794</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget &amp;&amp; m_VulkanApiVersion &lt; VK_MAKE_VERSION(1, 1, 0))</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;        VMA_ASSERT(m_hInstance != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l14797"></a><span class="lineno">14797</span>&#160;        m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR =</div>
+<div class="line"><a name="l14798"></a><span class="lineno">14798</span>&#160;            (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)vkGetInstanceProcAddr(m_hInstance, <span class="stringliteral">&quot;vkGetPhysicalDeviceMemoryProperties2KHR&quot;</span>);</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="preprocessor">#endif // #if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l14801"></a><span class="lineno">14801</span>&#160;<span class="preprocessor">#endif // #if VMA_STATIC_VULKAN_FUNCTIONS == 1</span></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="preprocessor">#define VMA_COPY_IF_NOT_NULL(funcName) \</span></div>
+<div class="line"><a name="l14804"></a><span class="lineno">14804</span>&#160;<span class="preprocessor">    if(pVulkanFunctions-&gt;funcName != VMA_NULL) m_VulkanFunctions.funcName = pVulkanFunctions-&gt;funcName;</span></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;    <span class="keywordflow">if</span>(pVulkanFunctions != VMA_NULL)</div>
+<div class="line"><a name="l14807"></a><span class="lineno">14807</span>&#160;    {</div>
+<div class="line"><a name="l14808"></a><span class="lineno">14808</span>&#160;        VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceProperties);</div>
+<div class="line"><a name="l14809"></a><span class="lineno">14809</span>&#160;        VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceMemoryProperties);</div>
+<div class="line"><a name="l14810"></a><span class="lineno">14810</span>&#160;        VMA_COPY_IF_NOT_NULL(vkAllocateMemory);</div>
+<div class="line"><a name="l14811"></a><span class="lineno">14811</span>&#160;        VMA_COPY_IF_NOT_NULL(vkFreeMemory);</div>
+<div class="line"><a name="l14812"></a><span class="lineno">14812</span>&#160;        VMA_COPY_IF_NOT_NULL(vkMapMemory);</div>
+<div class="line"><a name="l14813"></a><span class="lineno">14813</span>&#160;        VMA_COPY_IF_NOT_NULL(vkUnmapMemory);</div>
+<div class="line"><a name="l14814"></a><span class="lineno">14814</span>&#160;        VMA_COPY_IF_NOT_NULL(vkFlushMappedMemoryRanges);</div>
+<div class="line"><a name="l14815"></a><span class="lineno">14815</span>&#160;        VMA_COPY_IF_NOT_NULL(vkInvalidateMappedMemoryRanges);</div>
+<div class="line"><a name="l14816"></a><span class="lineno">14816</span>&#160;        VMA_COPY_IF_NOT_NULL(vkBindBufferMemory);</div>
+<div class="line"><a name="l14817"></a><span class="lineno">14817</span>&#160;        VMA_COPY_IF_NOT_NULL(vkBindImageMemory);</div>
+<div class="line"><a name="l14818"></a><span class="lineno">14818</span>&#160;        VMA_COPY_IF_NOT_NULL(vkGetBufferMemoryRequirements);</div>
+<div class="line"><a name="l14819"></a><span class="lineno">14819</span>&#160;        VMA_COPY_IF_NOT_NULL(vkGetImageMemoryRequirements);</div>
+<div class="line"><a name="l14820"></a><span class="lineno">14820</span>&#160;        VMA_COPY_IF_NOT_NULL(vkCreateBuffer);</div>
+<div class="line"><a name="l14821"></a><span class="lineno">14821</span>&#160;        VMA_COPY_IF_NOT_NULL(vkDestroyBuffer);</div>
+<div class="line"><a name="l14822"></a><span class="lineno">14822</span>&#160;        VMA_COPY_IF_NOT_NULL(vkCreateImage);</div>
+<div class="line"><a name="l14823"></a><span class="lineno">14823</span>&#160;        VMA_COPY_IF_NOT_NULL(vkDestroyImage);</div>
+<div class="line"><a name="l14824"></a><span class="lineno">14824</span>&#160;        VMA_COPY_IF_NOT_NULL(vkCmdCopyBuffer);</div>
+<div class="line"><a name="l14825"></a><span class="lineno">14825</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l14826"></a><span class="lineno">14826</span>&#160;        VMA_COPY_IF_NOT_NULL(vkGetBufferMemoryRequirements2KHR);</div>
+<div class="line"><a name="l14827"></a><span class="lineno">14827</span>&#160;        VMA_COPY_IF_NOT_NULL(vkGetImageMemoryRequirements2KHR);</div>
+<div class="line"><a name="l14828"></a><span class="lineno">14828</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l14829"></a><span class="lineno">14829</span>&#160;<span class="preprocessor">#if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l14830"></a><span class="lineno">14830</span>&#160;        VMA_COPY_IF_NOT_NULL(vkBindBufferMemory2KHR);</div>
+<div class="line"><a name="l14831"></a><span class="lineno">14831</span>&#160;        VMA_COPY_IF_NOT_NULL(vkBindImageMemory2KHR);</div>
+<div class="line"><a name="l14832"></a><span class="lineno">14832</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l14833"></a><span class="lineno">14833</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l14834"></a><span class="lineno">14834</span>&#160;        VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceMemoryProperties2KHR);</div>
+<div class="line"><a name="l14835"></a><span class="lineno">14835</span>&#160;<span class="preprocessor">#endif</span></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; </div>
+<div class="line"><a name="l14838"></a><span class="lineno">14838</span>&#160;<span class="preprocessor">#undef VMA_COPY_IF_NOT_NULL</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;    <span class="comment">// If these asserts are hit, you must either #define VMA_STATIC_VULKAN_FUNCTIONS 1</span></div>
+<div class="line"><a name="l14841"></a><span class="lineno">14841</span>&#160;    <span class="comment">// or pass valid pointers as VmaAllocatorCreateInfo::pVulkanFunctions.</span></div>
+<div class="line"><a name="l14842"></a><span class="lineno">14842</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceProperties != VMA_NULL);</div>
+<div class="line"><a name="l14843"></a><span class="lineno">14843</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties != VMA_NULL);</div>
+<div class="line"><a name="l14844"></a><span class="lineno">14844</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkAllocateMemory != VMA_NULL);</div>
+<div class="line"><a name="l14845"></a><span class="lineno">14845</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkFreeMemory != VMA_NULL);</div>
+<div class="line"><a name="l14846"></a><span class="lineno">14846</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkMapMemory != VMA_NULL);</div>
+<div class="line"><a name="l14847"></a><span class="lineno">14847</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkUnmapMemory != VMA_NULL);</div>
+<div class="line"><a name="l14848"></a><span class="lineno">14848</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkFlushMappedMemoryRanges != VMA_NULL);</div>
+<div class="line"><a name="l14849"></a><span class="lineno">14849</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkInvalidateMappedMemoryRanges != VMA_NULL);</div>
+<div class="line"><a name="l14850"></a><span class="lineno">14850</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkBindBufferMemory != VMA_NULL);</div>
+<div class="line"><a name="l14851"></a><span class="lineno">14851</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkBindImageMemory != VMA_NULL);</div>
+<div class="line"><a name="l14852"></a><span class="lineno">14852</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetBufferMemoryRequirements != VMA_NULL);</div>
+<div class="line"><a name="l14853"></a><span class="lineno">14853</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkGetImageMemoryRequirements != VMA_NULL);</div>
+<div class="line"><a name="l14854"></a><span class="lineno">14854</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkCreateBuffer != VMA_NULL);</div>
+<div class="line"><a name="l14855"></a><span class="lineno">14855</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkDestroyBuffer != VMA_NULL);</div>
+<div class="line"><a name="l14856"></a><span class="lineno">14856</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkCreateImage != VMA_NULL);</div>
+<div class="line"><a name="l14857"></a><span class="lineno">14857</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkDestroyImage != VMA_NULL);</div>
+<div class="line"><a name="l14858"></a><span class="lineno">14858</span>&#160;    VMA_ASSERT(m_VulkanFunctions.vkCmdCopyBuffer != VMA_NULL);</div>
+<div class="line"><a name="l14859"></a><span class="lineno">14859</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l14860"></a><span class="lineno">14860</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0) || m_UseKhrDedicatedAllocation)</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(m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR != VMA_NULL);</div>
+<div class="line"><a name="l14863"></a><span class="lineno">14863</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkGetImageMemoryRequirements2KHR != VMA_NULL);</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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l14866"></a><span class="lineno">14866</span>&#160;<span class="preprocessor">#if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l14867"></a><span class="lineno">14867</span>&#160;    <span class="keywordflow">if</span>(m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0) || m_UseKhrBindMemory2)</div>
+<div class="line"><a name="l14868"></a><span class="lineno">14868</span>&#160;    {</div>
+<div class="line"><a name="l14869"></a><span class="lineno">14869</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkBindBufferMemory2KHR != VMA_NULL);</div>
+<div class="line"><a name="l14870"></a><span class="lineno">14870</span>&#160;        VMA_ASSERT(m_VulkanFunctions.vkBindImageMemory2KHR != VMA_NULL);</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;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l14873"></a><span class="lineno">14873</span>&#160;}</div>
-<div class="line"><a name="l14874"></a><span class="lineno">14874</span>&#160; </div>
-<div class="line"><a name="l14875"></a><span class="lineno">14875</span>&#160;VkDeviceSize VmaAllocator_T::CalcPreferredBlockSize(uint32_t memTypeIndex)</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;    <span class="keyword">const</span> uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
-<div class="line"><a name="l14878"></a><span class="lineno">14878</span>&#160;    <span class="keyword">const</span> VkDeviceSize heapSize = m_MemProps.memoryHeaps[heapIndex].size;</div>
-<div class="line"><a name="l14879"></a><span class="lineno">14879</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="l14880"></a><span class="lineno">14880</span>&#160;    <span class="keywordflow">return</span> VmaAlignUp(isSmallHeap ? (heapSize / 8) : m_PreferredLargeHeapBlockSize, (VkDeviceSize)32);</div>
-<div class="line"><a name="l14881"></a><span class="lineno">14881</span>&#160;}</div>
-<div class="line"><a name="l14882"></a><span class="lineno">14882</span>&#160; </div>
-<div class="line"><a name="l14883"></a><span class="lineno">14883</span>&#160;VkResult VmaAllocator_T::AllocateMemoryOfType(</div>
-<div class="line"><a name="l14884"></a><span class="lineno">14884</span>&#160;    VkDeviceSize size,</div>
-<div class="line"><a name="l14885"></a><span class="lineno">14885</span>&#160;    VkDeviceSize alignment,</div>
-<div class="line"><a name="l14886"></a><span class="lineno">14886</span>&#160;    <span class="keywordtype">bool</span> dedicatedAllocation,</div>
-<div class="line"><a name="l14887"></a><span class="lineno">14887</span>&#160;    VkBuffer dedicatedBuffer,</div>
-<div class="line"><a name="l14888"></a><span class="lineno">14888</span>&#160;    VkImage dedicatedImage,</div>
-<div class="line"><a name="l14889"></a><span class="lineno">14889</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="l14890"></a><span class="lineno">14890</span>&#160;    uint32_t memTypeIndex,</div>
-<div class="line"><a name="l14891"></a><span class="lineno">14891</span>&#160;    VmaSuballocationType suballocType,</div>
-<div class="line"><a name="l14892"></a><span class="lineno">14892</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l14893"></a><span class="lineno">14893</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</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;    VMA_ASSERT(pAllocations != VMA_NULL);</div>
-<div class="line"><a name="l14896"></a><span class="lineno">14896</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="l14897"></a><span class="lineno">14897</span>&#160; </div>
-<div class="line"><a name="l14898"></a><span class="lineno">14898</span>&#160;    <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> finalCreateInfo = createInfo;</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="comment">// If memory type is not HOST_VISIBLE, disable MAPPED.</span></div>
-<div class="line"><a name="l14901"></a><span class="lineno">14901</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="l14902"></a><span class="lineno">14902</span>&#160;        (m_MemProps.memoryTypes[memTypeIndex].propertyFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)</div>
-<div class="line"><a name="l14903"></a><span class="lineno">14903</span>&#160;    {</div>
-<div class="line"><a name="l14904"></a><span class="lineno">14904</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="l14905"></a><span class="lineno">14905</span>&#160;    }</div>
-<div class="line"><a name="l14906"></a><span class="lineno">14906</span>&#160;    <span class="comment">// If memory is lazily allocated, it should be always dedicated.</span></div>
-<div class="line"><a name="l14907"></a><span class="lineno">14907</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="l14908"></a><span class="lineno">14908</span>&#160;    {</div>
-<div class="line"><a name="l14909"></a><span class="lineno">14909</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="l14910"></a><span class="lineno">14910</span>&#160;    }</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;    VmaBlockVector* <span class="keyword">const</span> blockVector = m_pBlockVectors[memTypeIndex];</div>
-<div class="line"><a name="l14913"></a><span class="lineno">14913</span>&#160;    VMA_ASSERT(blockVector);</div>
-<div class="line"><a name="l14914"></a><span class="lineno">14914</span>&#160; </div>
-<div class="line"><a name="l14915"></a><span class="lineno">14915</span>&#160;    <span class="keyword">const</span> VkDeviceSize preferredBlockSize = blockVector-&gt;GetPreferredBlockSize();</div>
-<div class="line"><a name="l14916"></a><span class="lineno">14916</span>&#160;    <span class="keywordtype">bool</span> preferDedicatedMemory =</div>
-<div class="line"><a name="l14917"></a><span class="lineno">14917</span>&#160;        VMA_DEBUG_ALWAYS_DEDICATED_MEMORY ||</div>
-<div class="line"><a name="l14918"></a><span class="lineno">14918</span>&#160;        dedicatedAllocation ||</div>
-<div class="line"><a name="l14919"></a><span class="lineno">14919</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="l14920"></a><span class="lineno">14920</span>&#160;        size &gt; preferredBlockSize / 2;</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;    <span class="keywordflow">if</span>(preferDedicatedMemory &amp;&amp;</div>
-<div class="line"><a name="l14923"></a><span class="lineno">14923</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="l14924"></a><span class="lineno">14924</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="l14925"></a><span class="lineno">14925</span>&#160;    {</div>
-<div class="line"><a name="l14926"></a><span class="lineno">14926</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="l14927"></a><span class="lineno">14927</span>&#160;    }</div>
-<div class="line"><a name="l14928"></a><span class="lineno">14928</span>&#160; </div>
-<div class="line"><a name="l14929"></a><span class="lineno">14929</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="l14930"></a><span class="lineno">14930</span>&#160;    {</div>
-<div class="line"><a name="l14931"></a><span class="lineno">14931</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="l14932"></a><span class="lineno">14932</span>&#160;        {</div>
-<div class="line"><a name="l14933"></a><span class="lineno">14933</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</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="keywordflow">else</span></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;            <span class="keywordflow">return</span> AllocateDedicatedMemory(</div>
-<div class="line"><a name="l14938"></a><span class="lineno">14938</span>&#160;                size,</div>
-<div class="line"><a name="l14939"></a><span class="lineno">14939</span>&#160;                suballocType,</div>
-<div class="line"><a name="l14940"></a><span class="lineno">14940</span>&#160;                memTypeIndex,</div>
-<div class="line"><a name="l14941"></a><span class="lineno">14941</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="l14942"></a><span class="lineno">14942</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="l14943"></a><span class="lineno">14943</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="l14944"></a><span class="lineno">14944</span>&#160;                finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
-<div class="line"><a name="l14945"></a><span class="lineno">14945</span>&#160;                dedicatedBuffer,</div>
-<div class="line"><a name="l14946"></a><span class="lineno">14946</span>&#160;                dedicatedImage,</div>
-<div class="line"><a name="l14947"></a><span class="lineno">14947</span>&#160;                allocationCount,</div>
-<div class="line"><a name="l14948"></a><span class="lineno">14948</span>&#160;                pAllocations);</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;    }</div>
-<div class="line"><a name="l14951"></a><span class="lineno">14951</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l14952"></a><span class="lineno">14952</span>&#160;    {</div>
-<div class="line"><a name="l14953"></a><span class="lineno">14953</span>&#160;        VkResult res = blockVector-&gt;Allocate(</div>
-<div class="line"><a name="l14954"></a><span class="lineno">14954</span>&#160;            m_CurrentFrameIndex.load(),</div>
-<div class="line"><a name="l14955"></a><span class="lineno">14955</span>&#160;            size,</div>
-<div class="line"><a name="l14956"></a><span class="lineno">14956</span>&#160;            alignment,</div>
-<div class="line"><a name="l14957"></a><span class="lineno">14957</span>&#160;            finalCreateInfo,</div>
-<div class="line"><a name="l14958"></a><span class="lineno">14958</span>&#160;            suballocType,</div>
-<div class="line"><a name="l14959"></a><span class="lineno">14959</span>&#160;            allocationCount,</div>
-<div class="line"><a name="l14960"></a><span class="lineno">14960</span>&#160;            pAllocations);</div>
-<div class="line"><a name="l14961"></a><span class="lineno">14961</span>&#160;        <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l14964"></a><span class="lineno">14964</span>&#160;        }</div>
-<div class="line"><a name="l14965"></a><span class="lineno">14965</span>&#160; </div>
-<div class="line"><a name="l14966"></a><span class="lineno">14966</span>&#160;        <span class="comment">// 5. Try dedicated memory.</span></div>
-<div class="line"><a name="l14967"></a><span class="lineno">14967</span>&#160;        <span class="keywordflow">if</span>((finalCreateInfo.flags &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="l14873"></a><span class="lineno">14873</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l14874"></a><span class="lineno">14874</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</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;        VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR != VMA_NULL);</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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l14879"></a><span class="lineno">14879</span>&#160;}</div>
+<div class="line"><a name="l14880"></a><span class="lineno">14880</span>&#160; </div>
+<div class="line"><a name="l14881"></a><span class="lineno">14881</span>&#160;VkDeviceSize VmaAllocator_T::CalcPreferredBlockSize(uint32_t memTypeIndex)</div>
+<div class="line"><a name="l14882"></a><span class="lineno">14882</span>&#160;{</div>
+<div class="line"><a name="l14883"></a><span class="lineno">14883</span>&#160;    <span class="keyword">const</span> uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
+<div class="line"><a name="l14884"></a><span class="lineno">14884</span>&#160;    <span class="keyword">const</span> VkDeviceSize heapSize = m_MemProps.memoryHeaps[heapIndex].size;</div>
+<div class="line"><a name="l14885"></a><span class="lineno">14885</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="l14886"></a><span class="lineno">14886</span>&#160;    <span class="keywordflow">return</span> VmaAlignUp(isSmallHeap ? (heapSize / 8) : m_PreferredLargeHeapBlockSize, (VkDeviceSize)32);</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;VkResult VmaAllocator_T::AllocateMemoryOfType(</div>
+<div class="line"><a name="l14890"></a><span class="lineno">14890</span>&#160;    VkDeviceSize size,</div>
+<div class="line"><a name="l14891"></a><span class="lineno">14891</span>&#160;    VkDeviceSize alignment,</div>
+<div class="line"><a name="l14892"></a><span class="lineno">14892</span>&#160;    <span class="keywordtype">bool</span> dedicatedAllocation,</div>
+<div class="line"><a name="l14893"></a><span class="lineno">14893</span>&#160;    VkBuffer dedicatedBuffer,</div>
+<div class="line"><a name="l14894"></a><span class="lineno">14894</span>&#160;    VkImage dedicatedImage,</div>
+<div class="line"><a name="l14895"></a><span class="lineno">14895</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="l14896"></a><span class="lineno">14896</span>&#160;    uint32_t memTypeIndex,</div>
+<div class="line"><a name="l14897"></a><span class="lineno">14897</span>&#160;    VmaSuballocationType suballocType,</div>
+<div class="line"><a name="l14898"></a><span class="lineno">14898</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l14899"></a><span class="lineno">14899</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
+<div class="line"><a name="l14900"></a><span class="lineno">14900</span>&#160;{</div>
+<div class="line"><a name="l14901"></a><span class="lineno">14901</span>&#160;    VMA_ASSERT(pAllocations != VMA_NULL);</div>
+<div class="line"><a name="l14902"></a><span class="lineno">14902</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="l14903"></a><span class="lineno">14903</span>&#160; </div>
+<div class="line"><a name="l14904"></a><span class="lineno">14904</span>&#160;    <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> finalCreateInfo = createInfo;</div>
+<div class="line"><a name="l14905"></a><span class="lineno">14905</span>&#160; </div>
+<div class="line"><a name="l14906"></a><span class="lineno">14906</span>&#160;    <span class="comment">// If memory type is not HOST_VISIBLE, disable MAPPED.</span></div>
+<div class="line"><a name="l14907"></a><span class="lineno">14907</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="l14908"></a><span class="lineno">14908</span>&#160;        (m_MemProps.memoryTypes[memTypeIndex].propertyFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)</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;        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="l14911"></a><span class="lineno">14911</span>&#160;    }</div>
+<div class="line"><a name="l14912"></a><span class="lineno">14912</span>&#160;    <span class="comment">// If memory is lazily allocated, it should be always dedicated.</span></div>
+<div class="line"><a name="l14913"></a><span class="lineno">14913</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="l14914"></a><span class="lineno">14914</span>&#160;    {</div>
+<div class="line"><a name="l14915"></a><span class="lineno">14915</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="l14916"></a><span class="lineno">14916</span>&#160;    }</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;    VmaBlockVector* <span class="keyword">const</span> blockVector = m_pBlockVectors[memTypeIndex];</div>
+<div class="line"><a name="l14919"></a><span class="lineno">14919</span>&#160;    VMA_ASSERT(blockVector);</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;    <span class="keyword">const</span> VkDeviceSize preferredBlockSize = blockVector-&gt;GetPreferredBlockSize();</div>
+<div class="line"><a name="l14922"></a><span class="lineno">14922</span>&#160;    <span class="keywordtype">bool</span> preferDedicatedMemory =</div>
+<div class="line"><a name="l14923"></a><span class="lineno">14923</span>&#160;        VMA_DEBUG_ALWAYS_DEDICATED_MEMORY ||</div>
+<div class="line"><a name="l14924"></a><span class="lineno">14924</span>&#160;        dedicatedAllocation ||</div>
+<div class="line"><a name="l14925"></a><span class="lineno">14925</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="l14926"></a><span class="lineno">14926</span>&#160;        size &gt; preferredBlockSize / 2;</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="keywordflow">if</span>(preferDedicatedMemory &amp;&amp;</div>
+<div class="line"><a name="l14929"></a><span class="lineno">14929</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="l14930"></a><span class="lineno">14930</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="l14931"></a><span class="lineno">14931</span>&#160;    {</div>
+<div class="line"><a name="l14932"></a><span class="lineno">14932</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="l14933"></a><span class="lineno">14933</span>&#160;    }</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="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="l14936"></a><span class="lineno">14936</span>&#160;    {</div>
+<div class="line"><a name="l14937"></a><span class="lineno">14937</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="l14938"></a><span class="lineno">14938</span>&#160;        {</div>
+<div class="line"><a name="l14939"></a><span class="lineno">14939</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l14940"></a><span class="lineno">14940</span>&#160;        }</div>
+<div class="line"><a name="l14941"></a><span class="lineno">14941</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l14942"></a><span class="lineno">14942</span>&#160;        {</div>
+<div class="line"><a name="l14943"></a><span class="lineno">14943</span>&#160;            <span class="keywordflow">return</span> AllocateDedicatedMemory(</div>
+<div class="line"><a name="l14944"></a><span class="lineno">14944</span>&#160;                size,</div>
+<div class="line"><a name="l14945"></a><span class="lineno">14945</span>&#160;                suballocType,</div>
+<div class="line"><a name="l14946"></a><span class="lineno">14946</span>&#160;                memTypeIndex,</div>
+<div class="line"><a name="l14947"></a><span class="lineno">14947</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="l14948"></a><span class="lineno">14948</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="l14949"></a><span class="lineno">14949</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="l14950"></a><span class="lineno">14950</span>&#160;                finalCreateInfo.<a class="code" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a>,</div>
+<div class="line"><a name="l14951"></a><span class="lineno">14951</span>&#160;                dedicatedBuffer,</div>
+<div class="line"><a name="l14952"></a><span class="lineno">14952</span>&#160;                dedicatedImage,</div>
+<div class="line"><a name="l14953"></a><span class="lineno">14953</span>&#160;                allocationCount,</div>
+<div class="line"><a name="l14954"></a><span class="lineno">14954</span>&#160;                pAllocations);</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;    }</div>
+<div class="line"><a name="l14957"></a><span class="lineno">14957</span>&#160;    <span class="keywordflow">else</span></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;        VkResult res = blockVector-&gt;Allocate(</div>
+<div class="line"><a name="l14960"></a><span class="lineno">14960</span>&#160;            m_CurrentFrameIndex.load(),</div>
+<div class="line"><a name="l14961"></a><span class="lineno">14961</span>&#160;            size,</div>
+<div class="line"><a name="l14962"></a><span class="lineno">14962</span>&#160;            alignment,</div>
+<div class="line"><a name="l14963"></a><span class="lineno">14963</span>&#160;            finalCreateInfo,</div>
+<div class="line"><a name="l14964"></a><span class="lineno">14964</span>&#160;            suballocType,</div>
+<div class="line"><a name="l14965"></a><span class="lineno">14965</span>&#160;            allocationCount,</div>
+<div class="line"><a name="l14966"></a><span class="lineno">14966</span>&#160;            pAllocations);</div>
+<div class="line"><a name="l14967"></a><span class="lineno">14967</span>&#160;        <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
 <div class="line"><a name="l14968"></a><span class="lineno">14968</span>&#160;        {</div>
-<div class="line"><a name="l14969"></a><span class="lineno">14969</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l14969"></a><span class="lineno">14969</span>&#160;            <span class="keywordflow">return</span> res;</div>
 <div class="line"><a name="l14970"></a><span class="lineno">14970</span>&#160;        }</div>
-<div class="line"><a name="l14971"></a><span class="lineno">14971</span>&#160;        <span class="keywordflow">else</span></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;            res = AllocateDedicatedMemory(</div>
-<div class="line"><a name="l14974"></a><span class="lineno">14974</span>&#160;                size,</div>
-<div class="line"><a name="l14975"></a><span class="lineno">14975</span>&#160;                suballocType,</div>
-<div class="line"><a name="l14976"></a><span class="lineno">14976</span>&#160;                memTypeIndex,</div>
-<div class="line"><a name="l14977"></a><span class="lineno">14977</span>&#160;                (finalCreateInfo.flags &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="l14978"></a><span class="lineno">14978</span>&#160;                (finalCreateInfo.flags &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0,</div>
-<div class="line"><a name="l14979"></a><span class="lineno">14979</span>&#160;                (finalCreateInfo.flags &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="l14980"></a><span class="lineno">14980</span>&#160;                finalCreateInfo.pUserData,</div>
-<div class="line"><a name="l14981"></a><span class="lineno">14981</span>&#160;                dedicatedBuffer,</div>
-<div class="line"><a name="l14982"></a><span class="lineno">14982</span>&#160;                dedicatedImage,</div>
-<div class="line"><a name="l14983"></a><span class="lineno">14983</span>&#160;                allocationCount,</div>
-<div class="line"><a name="l14984"></a><span class="lineno">14984</span>&#160;                pAllocations);</div>
-<div class="line"><a name="l14985"></a><span class="lineno">14985</span>&#160;            <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l14986"></a><span class="lineno">14986</span>&#160;            {</div>
-<div class="line"><a name="l14987"></a><span class="lineno">14987</span>&#160;                <span class="comment">// Succeeded: AllocateDedicatedMemory function already filld pMemory, nothing more to do here.</span></div>
-<div class="line"><a name="l14988"></a><span class="lineno">14988</span>&#160;                VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Allocated as DedicatedMemory&quot;</span>);</div>
-<div class="line"><a name="l14989"></a><span class="lineno">14989</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l14990"></a><span class="lineno">14990</span>&#160;            }</div>
-<div class="line"><a name="l14991"></a><span class="lineno">14991</span>&#160;            <span class="keywordflow">else</span></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;        <span class="comment">// 5. Try dedicated memory.</span></div>
+<div class="line"><a name="l14973"></a><span class="lineno">14973</span>&#160;        <span class="keywordflow">if</span>((finalCreateInfo.flags &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="l14974"></a><span class="lineno">14974</span>&#160;        {</div>
+<div class="line"><a name="l14975"></a><span class="lineno">14975</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</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;        <span class="keywordflow">else</span></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;            res = AllocateDedicatedMemory(</div>
+<div class="line"><a name="l14980"></a><span class="lineno">14980</span>&#160;                size,</div>
+<div class="line"><a name="l14981"></a><span class="lineno">14981</span>&#160;                suballocType,</div>
+<div class="line"><a name="l14982"></a><span class="lineno">14982</span>&#160;                memTypeIndex,</div>
+<div class="line"><a name="l14983"></a><span class="lineno">14983</span>&#160;                (finalCreateInfo.flags &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="l14984"></a><span class="lineno">14984</span>&#160;                (finalCreateInfo.flags &amp; <a class="code" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>) != 0,</div>
+<div class="line"><a name="l14985"></a><span class="lineno">14985</span>&#160;                (finalCreateInfo.flags &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="l14986"></a><span class="lineno">14986</span>&#160;                finalCreateInfo.pUserData,</div>
+<div class="line"><a name="l14987"></a><span class="lineno">14987</span>&#160;                dedicatedBuffer,</div>
+<div class="line"><a name="l14988"></a><span class="lineno">14988</span>&#160;                dedicatedImage,</div>
+<div class="line"><a name="l14989"></a><span class="lineno">14989</span>&#160;                allocationCount,</div>
+<div class="line"><a name="l14990"></a><span class="lineno">14990</span>&#160;                pAllocations);</div>
+<div class="line"><a name="l14991"></a><span class="lineno">14991</span>&#160;            <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
 <div class="line"><a name="l14992"></a><span class="lineno">14992</span>&#160;            {</div>
-<div class="line"><a name="l14993"></a><span class="lineno">14993</span>&#160;                <span class="comment">// Everything failed: Return error code.</span></div>
-<div class="line"><a name="l14994"></a><span class="lineno">14994</span>&#160;                VMA_DEBUG_LOG(<span class="stringliteral">&quot;    vkAllocateMemory FAILED&quot;</span>);</div>
-<div class="line"><a name="l14995"></a><span class="lineno">14995</span>&#160;                <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l14993"></a><span class="lineno">14993</span>&#160;                <span class="comment">// Succeeded: AllocateDedicatedMemory function already filld pMemory, nothing more to do here.</span></div>
+<div class="line"><a name="l14994"></a><span class="lineno">14994</span>&#160;                VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Allocated as DedicatedMemory&quot;</span>);</div>
+<div class="line"><a name="l14995"></a><span class="lineno">14995</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</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;}</div>
-<div class="line"><a name="l15000"></a><span class="lineno">15000</span>&#160; </div>
-<div class="line"><a name="l15001"></a><span class="lineno">15001</span>&#160;VkResult VmaAllocator_T::AllocateDedicatedMemory(</div>
-<div class="line"><a name="l15002"></a><span class="lineno">15002</span>&#160;    VkDeviceSize size,</div>
-<div class="line"><a name="l15003"></a><span class="lineno">15003</span>&#160;    VmaSuballocationType suballocType,</div>
-<div class="line"><a name="l15004"></a><span class="lineno">15004</span>&#160;    uint32_t memTypeIndex,</div>
-<div class="line"><a name="l15005"></a><span class="lineno">15005</span>&#160;    <span class="keywordtype">bool</span> withinBudget,</div>
-<div class="line"><a name="l15006"></a><span class="lineno">15006</span>&#160;    <span class="keywordtype">bool</span> map,</div>
-<div class="line"><a name="l15007"></a><span class="lineno">15007</span>&#160;    <span class="keywordtype">bool</span> isUserDataString,</div>
-<div class="line"><a name="l15008"></a><span class="lineno">15008</span>&#160;    <span class="keywordtype">void</span>* pUserData,</div>
-<div class="line"><a name="l15009"></a><span class="lineno">15009</span>&#160;    VkBuffer dedicatedBuffer,</div>
-<div class="line"><a name="l15010"></a><span class="lineno">15010</span>&#160;    VkImage dedicatedImage,</div>
-<div class="line"><a name="l15011"></a><span class="lineno">15011</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l15012"></a><span class="lineno">15012</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</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;    VMA_ASSERT(allocationCount &gt; 0 &amp;&amp; pAllocations);</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;    <span class="keywordflow">if</span>(withinBudget)</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;        <span class="keyword">const</span> uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
-<div class="line"><a name="l15019"></a><span class="lineno">15019</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> heapBudget = {};</div>
-<div class="line"><a name="l15020"></a><span class="lineno">15020</span>&#160;        GetBudget(&amp;heapBudget, heapIndex, 1);</div>
-<div class="line"><a name="l15021"></a><span class="lineno">15021</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="l15022"></a><span class="lineno">15022</span>&#160;        {</div>
-<div class="line"><a name="l15023"></a><span class="lineno">15023</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</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;    }</div>
-<div class="line"><a name="l15026"></a><span class="lineno">15026</span>&#160; </div>
-<div class="line"><a name="l15027"></a><span class="lineno">15027</span>&#160;    VkMemoryAllocateInfo allocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO };</div>
-<div class="line"><a name="l15028"></a><span class="lineno">15028</span>&#160;    allocInfo.memoryTypeIndex = memTypeIndex;</div>
-<div class="line"><a name="l15029"></a><span class="lineno">15029</span>&#160;    allocInfo.allocationSize = size;</div>
-<div class="line"><a name="l15030"></a><span class="lineno">15030</span>&#160; </div>
-<div class="line"><a name="l15031"></a><span class="lineno">15031</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l15032"></a><span class="lineno">15032</span>&#160;    VkMemoryDedicatedAllocateInfoKHR dedicatedAllocInfo = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR };</div>
-<div class="line"><a name="l15033"></a><span class="lineno">15033</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
-<div class="line"><a name="l15034"></a><span class="lineno">15034</span>&#160;    {</div>
-<div class="line"><a name="l15035"></a><span class="lineno">15035</span>&#160;        <span class="keywordflow">if</span>(dedicatedBuffer != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l15036"></a><span class="lineno">15036</span>&#160;        {</div>
-<div class="line"><a name="l15037"></a><span class="lineno">15037</span>&#160;            VMA_ASSERT(dedicatedImage == VK_NULL_HANDLE);</div>
-<div class="line"><a name="l15038"></a><span class="lineno">15038</span>&#160;            dedicatedAllocInfo.buffer = dedicatedBuffer;</div>
-<div class="line"><a name="l15039"></a><span class="lineno">15039</span>&#160;            allocInfo.pNext = &amp;dedicatedAllocInfo;</div>
-<div class="line"><a name="l15040"></a><span class="lineno">15040</span>&#160;        }</div>
-<div class="line"><a name="l15041"></a><span class="lineno">15041</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(dedicatedImage != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l14997"></a><span class="lineno">14997</span>&#160;            <span class="keywordflow">else</span></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;                <span class="comment">// Everything failed: Return error code.</span></div>
+<div class="line"><a name="l15000"></a><span class="lineno">15000</span>&#160;                VMA_DEBUG_LOG(<span class="stringliteral">&quot;    vkAllocateMemory FAILED&quot;</span>);</div>
+<div class="line"><a name="l15001"></a><span class="lineno">15001</span>&#160;                <span class="keywordflow">return</span> res;</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;    }</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;VkResult VmaAllocator_T::AllocateDedicatedMemory(</div>
+<div class="line"><a name="l15008"></a><span class="lineno">15008</span>&#160;    VkDeviceSize size,</div>
+<div class="line"><a name="l15009"></a><span class="lineno">15009</span>&#160;    VmaSuballocationType suballocType,</div>
+<div class="line"><a name="l15010"></a><span class="lineno">15010</span>&#160;    uint32_t memTypeIndex,</div>
+<div class="line"><a name="l15011"></a><span class="lineno">15011</span>&#160;    <span class="keywordtype">bool</span> withinBudget,</div>
+<div class="line"><a name="l15012"></a><span class="lineno">15012</span>&#160;    <span class="keywordtype">bool</span> map,</div>
+<div class="line"><a name="l15013"></a><span class="lineno">15013</span>&#160;    <span class="keywordtype">bool</span> isUserDataString,</div>
+<div class="line"><a name="l15014"></a><span class="lineno">15014</span>&#160;    <span class="keywordtype">void</span>* pUserData,</div>
+<div class="line"><a name="l15015"></a><span class="lineno">15015</span>&#160;    VkBuffer dedicatedBuffer,</div>
+<div class="line"><a name="l15016"></a><span class="lineno">15016</span>&#160;    VkImage dedicatedImage,</div>
+<div class="line"><a name="l15017"></a><span class="lineno">15017</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l15018"></a><span class="lineno">15018</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</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;    VMA_ASSERT(allocationCount &gt; 0 &amp;&amp; pAllocations);</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;    <span class="keywordflow">if</span>(withinBudget)</div>
+<div class="line"><a name="l15023"></a><span class="lineno">15023</span>&#160;    {</div>
+<div class="line"><a name="l15024"></a><span class="lineno">15024</span>&#160;        <span class="keyword">const</span> uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
+<div class="line"><a name="l15025"></a><span class="lineno">15025</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> heapBudget = {};</div>
+<div class="line"><a name="l15026"></a><span class="lineno">15026</span>&#160;        GetBudget(&amp;heapBudget, heapIndex, 1);</div>
+<div class="line"><a name="l15027"></a><span class="lineno">15027</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="l15028"></a><span class="lineno">15028</span>&#160;        {</div>
+<div class="line"><a name="l15029"></a><span class="lineno">15029</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l15030"></a><span class="lineno">15030</span>&#160;        }</div>
+<div class="line"><a name="l15031"></a><span class="lineno">15031</span>&#160;    }</div>
+<div class="line"><a name="l15032"></a><span class="lineno">15032</span>&#160; </div>
+<div class="line"><a name="l15033"></a><span class="lineno">15033</span>&#160;    VkMemoryAllocateInfo allocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO };</div>
+<div class="line"><a name="l15034"></a><span class="lineno">15034</span>&#160;    allocInfo.memoryTypeIndex = memTypeIndex;</div>
+<div class="line"><a name="l15035"></a><span class="lineno">15035</span>&#160;    allocInfo.allocationSize = size;</div>
+<div class="line"><a name="l15036"></a><span class="lineno">15036</span>&#160; </div>
+<div class="line"><a name="l15037"></a><span class="lineno">15037</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l15038"></a><span class="lineno">15038</span>&#160;    VkMemoryDedicatedAllocateInfoKHR dedicatedAllocInfo = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR };</div>
+<div class="line"><a name="l15039"></a><span class="lineno">15039</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
+<div class="line"><a name="l15040"></a><span class="lineno">15040</span>&#160;    {</div>
+<div class="line"><a name="l15041"></a><span class="lineno">15041</span>&#160;        <span class="keywordflow">if</span>(dedicatedBuffer != VK_NULL_HANDLE)</div>
 <div class="line"><a name="l15042"></a><span class="lineno">15042</span>&#160;        {</div>
-<div class="line"><a name="l15043"></a><span class="lineno">15043</span>&#160;            dedicatedAllocInfo.image = dedicatedImage;</div>
-<div class="line"><a name="l15044"></a><span class="lineno">15044</span>&#160;            allocInfo.pNext = &amp;dedicatedAllocInfo;</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;<span class="preprocessor">#endif // #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></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;    <span class="keywordtype">size_t</span> allocIndex;</div>
-<div class="line"><a name="l15050"></a><span class="lineno">15050</span>&#160;    VkResult res = VK_SUCCESS;</div>
-<div class="line"><a name="l15051"></a><span class="lineno">15051</span>&#160;    <span class="keywordflow">for</span>(allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</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;        res = AllocateDedicatedMemoryPage(</div>
-<div class="line"><a name="l15054"></a><span class="lineno">15054</span>&#160;            size,</div>
-<div class="line"><a name="l15055"></a><span class="lineno">15055</span>&#160;            suballocType,</div>
-<div class="line"><a name="l15056"></a><span class="lineno">15056</span>&#160;            memTypeIndex,</div>
-<div class="line"><a name="l15057"></a><span class="lineno">15057</span>&#160;            allocInfo,</div>
-<div class="line"><a name="l15058"></a><span class="lineno">15058</span>&#160;            map,</div>
-<div class="line"><a name="l15059"></a><span class="lineno">15059</span>&#160;            isUserDataString,</div>
-<div class="line"><a name="l15060"></a><span class="lineno">15060</span>&#160;            pUserData,</div>
-<div class="line"><a name="l15061"></a><span class="lineno">15061</span>&#160;            pAllocations + allocIndex);</div>
-<div class="line"><a name="l15062"></a><span class="lineno">15062</span>&#160;        <span class="keywordflow">if</span>(res != VK_SUCCESS)</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="keywordflow">break</span>;</div>
-<div class="line"><a name="l15065"></a><span class="lineno">15065</span>&#160;        }</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; </div>
-<div class="line"><a name="l15068"></a><span class="lineno">15068</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l15069"></a><span class="lineno">15069</span>&#160;    {</div>
-<div class="line"><a name="l15070"></a><span class="lineno">15070</span>&#160;        <span class="comment">// Register them in m_pDedicatedAllocations.</span></div>
-<div class="line"><a name="l15071"></a><span class="lineno">15071</span>&#160;        {</div>
-<div class="line"><a name="l15072"></a><span class="lineno">15072</span>&#160;            VmaMutexLockWrite lock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
-<div class="line"><a name="l15073"></a><span class="lineno">15073</span>&#160;            AllocationVectorType* pDedicatedAllocations = m_pDedicatedAllocations[memTypeIndex];</div>
-<div class="line"><a name="l15074"></a><span class="lineno">15074</span>&#160;            VMA_ASSERT(pDedicatedAllocations);</div>
-<div class="line"><a name="l15075"></a><span class="lineno">15075</span>&#160;            <span class="keywordflow">for</span>(allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</div>
-<div class="line"><a name="l15076"></a><span class="lineno">15076</span>&#160;            {</div>
-<div class="line"><a name="l15077"></a><span class="lineno">15077</span>&#160;                VmaVectorInsertSorted&lt;VmaPointerLess&gt;(*pDedicatedAllocations, pAllocations[allocIndex]);</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;        }</div>
-<div class="line"><a name="l15080"></a><span class="lineno">15080</span>&#160; </div>
-<div class="line"><a name="l15081"></a><span class="lineno">15081</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="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;        <span class="comment">// Free all already created allocations.</span></div>
-<div class="line"><a name="l15086"></a><span class="lineno">15086</span>&#160;        <span class="keywordflow">while</span>(allocIndex--)</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;            <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> currAlloc = pAllocations[allocIndex];</div>
-<div class="line"><a name="l15089"></a><span class="lineno">15089</span>&#160;            VkDeviceMemory hMemory = currAlloc-&gt;GetMemory();</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;            <span class="comment">/*</span></div>
-<div class="line"><a name="l15092"></a><span class="lineno">15092</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="l15093"></a><span class="lineno">15093</span>&#160;<span class="comment">            before vkFreeMemory.</span></div>
-<div class="line"><a name="l15094"></a><span class="lineno">15094</span>&#160;<span class="comment"></span> </div>
-<div class="line"><a name="l15095"></a><span class="lineno">15095</span>&#160;<span class="comment">            if(currAlloc-&gt;GetMappedData() != VMA_NULL)</span></div>
-<div class="line"><a name="l15096"></a><span class="lineno">15096</span>&#160;<span class="comment">            {</span></div>
-<div class="line"><a name="l15097"></a><span class="lineno">15097</span>&#160;<span class="comment">                (*m_VulkanFunctions.vkUnmapMemory)(m_hDevice, hMemory);</span></div>
-<div class="line"><a name="l15098"></a><span class="lineno">15098</span>&#160;<span class="comment">            }</span></div>
-<div class="line"><a name="l15099"></a><span class="lineno">15099</span>&#160;<span class="comment">            */</span></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;            FreeVulkanMemory(memTypeIndex, currAlloc-&gt;GetSize(), hMemory);</div>
-<div class="line"><a name="l15102"></a><span class="lineno">15102</span>&#160;            m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), currAlloc-&gt;GetSize());</div>
-<div class="line"><a name="l15103"></a><span class="lineno">15103</span>&#160;            currAlloc-&gt;SetUserData(<span class="keyword">this</span>, VMA_NULL);</div>
-<div class="line"><a name="l15104"></a><span class="lineno">15104</span>&#160;            currAlloc-&gt;Dtor();</div>
-<div class="line"><a name="l15105"></a><span class="lineno">15105</span>&#160;            m_AllocationObjectAllocator.Free(currAlloc);</div>
-<div class="line"><a name="l15106"></a><span class="lineno">15106</span>&#160;        }</div>
-<div class="line"><a name="l15107"></a><span class="lineno">15107</span>&#160; </div>
-<div class="line"><a name="l15108"></a><span class="lineno">15108</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="l15109"></a><span class="lineno">15109</span>&#160;    }</div>
-<div class="line"><a name="l15110"></a><span class="lineno">15110</span>&#160; </div>
-<div class="line"><a name="l15111"></a><span class="lineno">15111</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l15112"></a><span class="lineno">15112</span>&#160;}</div>
+<div class="line"><a name="l15043"></a><span class="lineno">15043</span>&#160;            VMA_ASSERT(dedicatedImage == VK_NULL_HANDLE);</div>
+<div class="line"><a name="l15044"></a><span class="lineno">15044</span>&#160;            dedicatedAllocInfo.buffer = dedicatedBuffer;</div>
+<div class="line"><a name="l15045"></a><span class="lineno">15045</span>&#160;            allocInfo.pNext = &amp;dedicatedAllocInfo;</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;        <span class="keywordflow">else</span> <span class="keywordflow">if</span>(dedicatedImage != VK_NULL_HANDLE)</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;            dedicatedAllocInfo.image = dedicatedImage;</div>
+<div class="line"><a name="l15050"></a><span class="lineno">15050</span>&#160;            allocInfo.pNext = &amp;dedicatedAllocInfo;</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="preprocessor">#endif // #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></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;    <span class="keywordtype">size_t</span> allocIndex;</div>
+<div class="line"><a name="l15056"></a><span class="lineno">15056</span>&#160;    VkResult res = VK_SUCCESS;</div>
+<div class="line"><a name="l15057"></a><span class="lineno">15057</span>&#160;    <span class="keywordflow">for</span>(allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</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;        res = AllocateDedicatedMemoryPage(</div>
+<div class="line"><a name="l15060"></a><span class="lineno">15060</span>&#160;            size,</div>
+<div class="line"><a name="l15061"></a><span class="lineno">15061</span>&#160;            suballocType,</div>
+<div class="line"><a name="l15062"></a><span class="lineno">15062</span>&#160;            memTypeIndex,</div>
+<div class="line"><a name="l15063"></a><span class="lineno">15063</span>&#160;            allocInfo,</div>
+<div class="line"><a name="l15064"></a><span class="lineno">15064</span>&#160;            map,</div>
+<div class="line"><a name="l15065"></a><span class="lineno">15065</span>&#160;            isUserDataString,</div>
+<div class="line"><a name="l15066"></a><span class="lineno">15066</span>&#160;            pUserData,</div>
+<div class="line"><a name="l15067"></a><span class="lineno">15067</span>&#160;            pAllocations + allocIndex);</div>
+<div class="line"><a name="l15068"></a><span class="lineno">15068</span>&#160;        <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l15069"></a><span class="lineno">15069</span>&#160;        {</div>
+<div class="line"><a name="l15070"></a><span class="lineno">15070</span>&#160;            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l15071"></a><span class="lineno">15071</span>&#160;        }</div>
+<div class="line"><a name="l15072"></a><span class="lineno">15072</span>&#160;    }</div>
+<div class="line"><a name="l15073"></a><span class="lineno">15073</span>&#160; </div>
+<div class="line"><a name="l15074"></a><span class="lineno">15074</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l15075"></a><span class="lineno">15075</span>&#160;    {</div>
+<div class="line"><a name="l15076"></a><span class="lineno">15076</span>&#160;        <span class="comment">// Register them in m_pDedicatedAllocations.</span></div>
+<div class="line"><a name="l15077"></a><span class="lineno">15077</span>&#160;        {</div>
+<div class="line"><a name="l15078"></a><span class="lineno">15078</span>&#160;            VmaMutexLockWrite lock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
+<div class="line"><a name="l15079"></a><span class="lineno">15079</span>&#160;            AllocationVectorType* pDedicatedAllocations = m_pDedicatedAllocations[memTypeIndex];</div>
+<div class="line"><a name="l15080"></a><span class="lineno">15080</span>&#160;            VMA_ASSERT(pDedicatedAllocations);</div>
+<div class="line"><a name="l15081"></a><span class="lineno">15081</span>&#160;            <span class="keywordflow">for</span>(allocIndex = 0; allocIndex &lt; allocationCount; ++allocIndex)</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;                VmaVectorInsertSorted&lt;VmaPointerLess&gt;(*pDedicatedAllocations, pAllocations[allocIndex]);</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;        }</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;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Allocated DedicatedMemory Count=%zu, MemoryTypeIndex=#%u&quot;</span>, allocationCount, memTypeIndex);</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">else</span></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;        <span class="comment">// Free all already created allocations.</span></div>
+<div class="line"><a name="l15092"></a><span class="lineno">15092</span>&#160;        <span class="keywordflow">while</span>(allocIndex--)</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;            <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> currAlloc = pAllocations[allocIndex];</div>
+<div class="line"><a name="l15095"></a><span class="lineno">15095</span>&#160;            VkDeviceMemory hMemory = currAlloc-&gt;GetMemory();</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;            <span class="comment">/*</span></div>
+<div class="line"><a name="l15098"></a><span class="lineno">15098</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="l15099"></a><span class="lineno">15099</span>&#160;<span class="comment">            before vkFreeMemory.</span></div>
+<div class="line"><a name="l15100"></a><span class="lineno">15100</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l15101"></a><span class="lineno">15101</span>&#160;<span class="comment">            if(currAlloc-&gt;GetMappedData() != VMA_NULL)</span></div>
+<div class="line"><a name="l15102"></a><span class="lineno">15102</span>&#160;<span class="comment">            {</span></div>
+<div class="line"><a name="l15103"></a><span class="lineno">15103</span>&#160;<span class="comment">                (*m_VulkanFunctions.vkUnmapMemory)(m_hDevice, hMemory);</span></div>
+<div class="line"><a name="l15104"></a><span class="lineno">15104</span>&#160;<span class="comment">            }</span></div>
+<div class="line"><a name="l15105"></a><span class="lineno">15105</span>&#160;<span class="comment">            */</span></div>
+<div class="line"><a name="l15106"></a><span class="lineno">15106</span>&#160;    </div>
+<div class="line"><a name="l15107"></a><span class="lineno">15107</span>&#160;            FreeVulkanMemory(memTypeIndex, currAlloc-&gt;GetSize(), hMemory);</div>
+<div class="line"><a name="l15108"></a><span class="lineno">15108</span>&#160;            m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), currAlloc-&gt;GetSize());</div>
+<div class="line"><a name="l15109"></a><span class="lineno">15109</span>&#160;            currAlloc-&gt;SetUserData(<span class="keyword">this</span>, VMA_NULL);</div>
+<div class="line"><a name="l15110"></a><span class="lineno">15110</span>&#160;            currAlloc-&gt;Dtor();</div>
+<div class="line"><a name="l15111"></a><span class="lineno">15111</span>&#160;            m_AllocationObjectAllocator.Free(currAlloc);</div>
+<div class="line"><a name="l15112"></a><span class="lineno">15112</span>&#160;        }</div>
 <div class="line"><a name="l15113"></a><span class="lineno">15113</span>&#160; </div>
-<div class="line"><a name="l15114"></a><span class="lineno">15114</span>&#160;VkResult VmaAllocator_T::AllocateDedicatedMemoryPage(</div>
-<div class="line"><a name="l15115"></a><span class="lineno">15115</span>&#160;    VkDeviceSize size,</div>
-<div class="line"><a name="l15116"></a><span class="lineno">15116</span>&#160;    VmaSuballocationType suballocType,</div>
-<div class="line"><a name="l15117"></a><span class="lineno">15117</span>&#160;    uint32_t memTypeIndex,</div>
-<div class="line"><a name="l15118"></a><span class="lineno">15118</span>&#160;    <span class="keyword">const</span> VkMemoryAllocateInfo&amp; allocInfo,</div>
-<div class="line"><a name="l15119"></a><span class="lineno">15119</span>&#160;    <span class="keywordtype">bool</span> map,</div>
-<div class="line"><a name="l15120"></a><span class="lineno">15120</span>&#160;    <span class="keywordtype">bool</span> isUserDataString,</div>
-<div class="line"><a name="l15121"></a><span class="lineno">15121</span>&#160;    <span class="keywordtype">void</span>* pUserData,</div>
-<div class="line"><a name="l15122"></a><span class="lineno">15122</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
-<div class="line"><a name="l15123"></a><span class="lineno">15123</span>&#160;{</div>
-<div class="line"><a name="l15124"></a><span class="lineno">15124</span>&#160;    VkDeviceMemory hMemory = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l15125"></a><span class="lineno">15125</span>&#160;    VkResult res = AllocateVulkanMemory(&amp;allocInfo, &amp;hMemory);</div>
-<div class="line"><a name="l15126"></a><span class="lineno">15126</span>&#160;    <span class="keywordflow">if</span>(res &lt; 0)</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;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    vkAllocateMemory FAILED&quot;</span>);</div>
-<div class="line"><a name="l15129"></a><span class="lineno">15129</span>&#160;        <span class="keywordflow">return</span> res;</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; </div>
-<div class="line"><a name="l15132"></a><span class="lineno">15132</span>&#160;    <span class="keywordtype">void</span>* pMappedData = VMA_NULL;</div>
-<div class="line"><a name="l15133"></a><span class="lineno">15133</span>&#160;    <span class="keywordflow">if</span>(map)</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;        res = (*m_VulkanFunctions.vkMapMemory)(</div>
-<div class="line"><a name="l15136"></a><span class="lineno">15136</span>&#160;            m_hDevice,</div>
-<div class="line"><a name="l15137"></a><span class="lineno">15137</span>&#160;            hMemory,</div>
-<div class="line"><a name="l15138"></a><span class="lineno">15138</span>&#160;            0,</div>
-<div class="line"><a name="l15139"></a><span class="lineno">15139</span>&#160;            VK_WHOLE_SIZE,</div>
-<div class="line"><a name="l15140"></a><span class="lineno">15140</span>&#160;            0,</div>
-<div class="line"><a name="l15141"></a><span class="lineno">15141</span>&#160;            &amp;pMappedData);</div>
-<div class="line"><a name="l15142"></a><span class="lineno">15142</span>&#160;        <span class="keywordflow">if</span>(res &lt; 0)</div>
-<div class="line"><a name="l15143"></a><span class="lineno">15143</span>&#160;        {</div>
-<div class="line"><a name="l15144"></a><span class="lineno">15144</span>&#160;            VMA_DEBUG_LOG(<span class="stringliteral">&quot;    vkMapMemory FAILED&quot;</span>);</div>
-<div class="line"><a name="l15145"></a><span class="lineno">15145</span>&#160;            FreeVulkanMemory(memTypeIndex, size, hMemory);</div>
-<div class="line"><a name="l15146"></a><span class="lineno">15146</span>&#160;            <span class="keywordflow">return</span> res;</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;    }</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;    *pAllocation = m_AllocationObjectAllocator.Allocate();</div>
-<div class="line"><a name="l15151"></a><span class="lineno">15151</span>&#160;    (*pAllocation)-&gt;Ctor(m_CurrentFrameIndex.load(), isUserDataString);</div>
-<div class="line"><a name="l15152"></a><span class="lineno">15152</span>&#160;    (*pAllocation)-&gt;InitDedicatedAllocation(memTypeIndex, hMemory, suballocType, pMappedData, size);</div>
-<div class="line"><a name="l15153"></a><span class="lineno">15153</span>&#160;    (*pAllocation)-&gt;SetUserData(<span class="keyword">this</span>, pUserData);</div>
-<div class="line"><a name="l15154"></a><span class="lineno">15154</span>&#160;    m_Budget.AddAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), size);</div>
-<div class="line"><a name="l15155"></a><span class="lineno">15155</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</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;        FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);</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; </div>
-<div class="line"><a name="l15160"></a><span class="lineno">15160</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l15161"></a><span class="lineno">15161</span>&#160;}</div>
-<div class="line"><a name="l15162"></a><span class="lineno">15162</span>&#160; </div>
-<div class="line"><a name="l15163"></a><span class="lineno">15163</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::GetBufferMemoryRequirements(</div>
-<div class="line"><a name="l15164"></a><span class="lineno">15164</span>&#160;    VkBuffer hBuffer,</div>
-<div class="line"><a name="l15165"></a><span class="lineno">15165</span>&#160;    VkMemoryRequirements&amp; memReq,</div>
-<div class="line"><a name="l15166"></a><span class="lineno">15166</span>&#160;    <span class="keywordtype">bool</span>&amp; requiresDedicatedAllocation,</div>
-<div class="line"><a name="l15167"></a><span class="lineno">15167</span>&#160;    <span class="keywordtype">bool</span>&amp; prefersDedicatedAllocation)<span class="keyword"> const</span></div>
-<div class="line"><a name="l15168"></a><span class="lineno">15168</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l15169"></a><span class="lineno">15169</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l15170"></a><span class="lineno">15170</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</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;        VkBufferMemoryRequirementsInfo2KHR memReqInfo = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR };</div>
-<div class="line"><a name="l15173"></a><span class="lineno">15173</span>&#160;        memReqInfo.buffer = hBuffer;</div>
-<div class="line"><a name="l15174"></a><span class="lineno">15174</span>&#160; </div>
-<div class="line"><a name="l15175"></a><span class="lineno">15175</span>&#160;        VkMemoryDedicatedRequirementsKHR memDedicatedReq = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR };</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;        VkMemoryRequirements2KHR memReq2 = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR };</div>
-<div class="line"><a name="l15178"></a><span class="lineno">15178</span>&#160;        memReq2.pNext = &amp;memDedicatedReq;</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;        (*m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR)(m_hDevice, &amp;memReqInfo, &amp;memReq2);</div>
-<div class="line"><a name="l15181"></a><span class="lineno">15181</span>&#160; </div>
-<div class="line"><a name="l15182"></a><span class="lineno">15182</span>&#160;        memReq = memReq2.memoryRequirements;</div>
-<div class="line"><a name="l15183"></a><span class="lineno">15183</span>&#160;        requiresDedicatedAllocation = (memDedicatedReq.requiresDedicatedAllocation != VK_FALSE);</div>
-<div class="line"><a name="l15184"></a><span class="lineno">15184</span>&#160;        prefersDedicatedAllocation  = (memDedicatedReq.prefersDedicatedAllocation  != VK_FALSE);</div>
-<div class="line"><a name="l15185"></a><span class="lineno">15185</span>&#160;    }</div>
-<div class="line"><a name="l15186"></a><span class="lineno">15186</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15187"></a><span class="lineno">15187</span>&#160;<span class="preprocessor">#endif // #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></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;        (*m_VulkanFunctions.vkGetBufferMemoryRequirements)(m_hDevice, hBuffer, &amp;memReq);</div>
-<div class="line"><a name="l15190"></a><span class="lineno">15190</span>&#160;        requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l15191"></a><span class="lineno">15191</span>&#160;        prefersDedicatedAllocation  = <span class="keyword">false</span>;</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;}</div>
-<div class="line"><a name="l15194"></a><span class="lineno">15194</span>&#160; </div>
-<div class="line"><a name="l15195"></a><span class="lineno">15195</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::GetImageMemoryRequirements(</div>
-<div class="line"><a name="l15196"></a><span class="lineno">15196</span>&#160;    VkImage hImage,</div>
-<div class="line"><a name="l15197"></a><span class="lineno">15197</span>&#160;    VkMemoryRequirements&amp; memReq,</div>
-<div class="line"><a name="l15198"></a><span class="lineno">15198</span>&#160;    <span class="keywordtype">bool</span>&amp; requiresDedicatedAllocation,</div>
-<div class="line"><a name="l15199"></a><span class="lineno">15199</span>&#160;    <span class="keywordtype">bool</span>&amp; prefersDedicatedAllocation)<span class="keyword"> const</span></div>
-<div class="line"><a name="l15200"></a><span class="lineno">15200</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l15201"></a><span class="lineno">15201</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l15202"></a><span class="lineno">15202</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</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;        VkImageMemoryRequirementsInfo2KHR memReqInfo = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR };</div>
-<div class="line"><a name="l15205"></a><span class="lineno">15205</span>&#160;        memReqInfo.image = hImage;</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;        VkMemoryDedicatedRequirementsKHR memDedicatedReq = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR };</div>
-<div class="line"><a name="l15208"></a><span class="lineno">15208</span>&#160; </div>
-<div class="line"><a name="l15209"></a><span class="lineno">15209</span>&#160;        VkMemoryRequirements2KHR memReq2 = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR };</div>
-<div class="line"><a name="l15210"></a><span class="lineno">15210</span>&#160;        memReq2.pNext = &amp;memDedicatedReq;</div>
-<div class="line"><a name="l15211"></a><span class="lineno">15211</span>&#160; </div>
-<div class="line"><a name="l15212"></a><span class="lineno">15212</span>&#160;        (*m_VulkanFunctions.vkGetImageMemoryRequirements2KHR)(m_hDevice, &amp;memReqInfo, &amp;memReq2);</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;        memReq = memReq2.memoryRequirements;</div>
-<div class="line"><a name="l15215"></a><span class="lineno">15215</span>&#160;        requiresDedicatedAllocation = (memDedicatedReq.requiresDedicatedAllocation != VK_FALSE);</div>
-<div class="line"><a name="l15216"></a><span class="lineno">15216</span>&#160;        prefersDedicatedAllocation  = (memDedicatedReq.prefersDedicatedAllocation  != VK_FALSE);</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="keywordflow">else</span></div>
-<div class="line"><a name="l15219"></a><span class="lineno">15219</span>&#160;<span class="preprocessor">#endif // #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
-<div class="line"><a name="l15220"></a><span class="lineno">15220</span>&#160;    {</div>
-<div class="line"><a name="l15221"></a><span class="lineno">15221</span>&#160;        (*m_VulkanFunctions.vkGetImageMemoryRequirements)(m_hDevice, hImage, &amp;memReq);</div>
-<div class="line"><a name="l15222"></a><span class="lineno">15222</span>&#160;        requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l15223"></a><span class="lineno">15223</span>&#160;        prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l15224"></a><span class="lineno">15224</span>&#160;    }</div>
-<div class="line"><a name="l15225"></a><span class="lineno">15225</span>&#160;}</div>
-<div class="line"><a name="l15226"></a><span class="lineno">15226</span>&#160; </div>
-<div class="line"><a name="l15227"></a><span class="lineno">15227</span>&#160;VkResult VmaAllocator_T::AllocateMemory(</div>
-<div class="line"><a name="l15228"></a><span class="lineno">15228</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
-<div class="line"><a name="l15229"></a><span class="lineno">15229</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation,</div>
-<div class="line"><a name="l15230"></a><span class="lineno">15230</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation,</div>
-<div class="line"><a name="l15231"></a><span class="lineno">15231</span>&#160;    VkBuffer dedicatedBuffer,</div>
-<div class="line"><a name="l15232"></a><span class="lineno">15232</span>&#160;    VkImage dedicatedImage,</div>
-<div class="line"><a name="l15233"></a><span class="lineno">15233</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="l15234"></a><span class="lineno">15234</span>&#160;    VmaSuballocationType suballocType,</div>
-<div class="line"><a name="l15235"></a><span class="lineno">15235</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l15236"></a><span class="lineno">15236</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</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;    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="l15239"></a><span class="lineno">15239</span>&#160; </div>
-<div class="line"><a name="l15240"></a><span class="lineno">15240</span>&#160;    VMA_ASSERT(VmaIsPow2(vkMemReq.alignment));</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;    <span class="keywordflow">if</span>(vkMemReq.size == 0)</div>
-<div class="line"><a name="l15243"></a><span class="lineno">15243</span>&#160;    {</div>
-<div class="line"><a name="l15244"></a><span class="lineno">15244</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</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>((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="l15247"></a><span class="lineno">15247</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="l15248"></a><span class="lineno">15248</span>&#160;    {</div>
-<div class="line"><a name="l15249"></a><span class="lineno">15249</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="l15250"></a><span class="lineno">15250</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l15114"></a><span class="lineno">15114</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="l15115"></a><span class="lineno">15115</span>&#160;    }</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;    <span class="keywordflow">return</span> res;</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; </div>
+<div class="line"><a name="l15120"></a><span class="lineno">15120</span>&#160;VkResult VmaAllocator_T::AllocateDedicatedMemoryPage(</div>
+<div class="line"><a name="l15121"></a><span class="lineno">15121</span>&#160;    VkDeviceSize size,</div>
+<div class="line"><a name="l15122"></a><span class="lineno">15122</span>&#160;    VmaSuballocationType suballocType,</div>
+<div class="line"><a name="l15123"></a><span class="lineno">15123</span>&#160;    uint32_t memTypeIndex,</div>
+<div class="line"><a name="l15124"></a><span class="lineno">15124</span>&#160;    <span class="keyword">const</span> VkMemoryAllocateInfo&amp; allocInfo,</div>
+<div class="line"><a name="l15125"></a><span class="lineno">15125</span>&#160;    <span class="keywordtype">bool</span> map,</div>
+<div class="line"><a name="l15126"></a><span class="lineno">15126</span>&#160;    <span class="keywordtype">bool</span> isUserDataString,</div>
+<div class="line"><a name="l15127"></a><span class="lineno">15127</span>&#160;    <span class="keywordtype">void</span>* pUserData,</div>
+<div class="line"><a name="l15128"></a><span class="lineno">15128</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
+<div class="line"><a name="l15129"></a><span class="lineno">15129</span>&#160;{</div>
+<div class="line"><a name="l15130"></a><span class="lineno">15130</span>&#160;    VkDeviceMemory hMemory = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l15131"></a><span class="lineno">15131</span>&#160;    VkResult res = AllocateVulkanMemory(&amp;allocInfo, &amp;hMemory);</div>
+<div class="line"><a name="l15132"></a><span class="lineno">15132</span>&#160;    <span class="keywordflow">if</span>(res &lt; 0)</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;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;    vkAllocateMemory FAILED&quot;</span>);</div>
+<div class="line"><a name="l15135"></a><span class="lineno">15135</span>&#160;        <span class="keywordflow">return</span> res;</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>* pMappedData = VMA_NULL;</div>
+<div class="line"><a name="l15139"></a><span class="lineno">15139</span>&#160;    <span class="keywordflow">if</span>(map)</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;        res = (*m_VulkanFunctions.vkMapMemory)(</div>
+<div class="line"><a name="l15142"></a><span class="lineno">15142</span>&#160;            m_hDevice,</div>
+<div class="line"><a name="l15143"></a><span class="lineno">15143</span>&#160;            hMemory,</div>
+<div class="line"><a name="l15144"></a><span class="lineno">15144</span>&#160;            0,</div>
+<div class="line"><a name="l15145"></a><span class="lineno">15145</span>&#160;            VK_WHOLE_SIZE,</div>
+<div class="line"><a name="l15146"></a><span class="lineno">15146</span>&#160;            0,</div>
+<div class="line"><a name="l15147"></a><span class="lineno">15147</span>&#160;            &amp;pMappedData);</div>
+<div class="line"><a name="l15148"></a><span class="lineno">15148</span>&#160;        <span class="keywordflow">if</span>(res &lt; 0)</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;            VMA_DEBUG_LOG(<span class="stringliteral">&quot;    vkMapMemory FAILED&quot;</span>);</div>
+<div class="line"><a name="l15151"></a><span class="lineno">15151</span>&#160;            FreeVulkanMemory(memTypeIndex, size, hMemory);</div>
+<div class="line"><a name="l15152"></a><span class="lineno">15152</span>&#160;            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l15153"></a><span class="lineno">15153</span>&#160;        }</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;    *pAllocation = m_AllocationObjectAllocator.Allocate();</div>
+<div class="line"><a name="l15157"></a><span class="lineno">15157</span>&#160;    (*pAllocation)-&gt;Ctor(m_CurrentFrameIndex.load(), isUserDataString);</div>
+<div class="line"><a name="l15158"></a><span class="lineno">15158</span>&#160;    (*pAllocation)-&gt;InitDedicatedAllocation(memTypeIndex, hMemory, suballocType, pMappedData, size);</div>
+<div class="line"><a name="l15159"></a><span class="lineno">15159</span>&#160;    (*pAllocation)-&gt;SetUserData(<span class="keyword">this</span>, pUserData);</div>
+<div class="line"><a name="l15160"></a><span class="lineno">15160</span>&#160;    m_Budget.AddAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), size);</div>
+<div class="line"><a name="l15161"></a><span class="lineno">15161</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</div>
+<div class="line"><a name="l15162"></a><span class="lineno">15162</span>&#160;    {</div>
+<div class="line"><a name="l15163"></a><span class="lineno">15163</span>&#160;        FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);</div>
+<div class="line"><a name="l15164"></a><span class="lineno">15164</span>&#160;    }</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;    <span class="keywordflow">return</span> VK_SUCCESS;</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; </div>
+<div class="line"><a name="l15169"></a><span class="lineno">15169</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::GetBufferMemoryRequirements(</div>
+<div class="line"><a name="l15170"></a><span class="lineno">15170</span>&#160;    VkBuffer hBuffer,</div>
+<div class="line"><a name="l15171"></a><span class="lineno">15171</span>&#160;    VkMemoryRequirements&amp; memReq,</div>
+<div class="line"><a name="l15172"></a><span class="lineno">15172</span>&#160;    <span class="keywordtype">bool</span>&amp; requiresDedicatedAllocation,</div>
+<div class="line"><a name="l15173"></a><span class="lineno">15173</span>&#160;    <span class="keywordtype">bool</span>&amp; prefersDedicatedAllocation)<span class="keyword"> const</span></div>
+<div class="line"><a name="l15174"></a><span class="lineno">15174</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l15175"></a><span class="lineno">15175</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l15176"></a><span class="lineno">15176</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</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;        VkBufferMemoryRequirementsInfo2KHR memReqInfo = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR };</div>
+<div class="line"><a name="l15179"></a><span class="lineno">15179</span>&#160;        memReqInfo.buffer = hBuffer;</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;        VkMemoryDedicatedRequirementsKHR memDedicatedReq = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR };</div>
+<div class="line"><a name="l15182"></a><span class="lineno">15182</span>&#160; </div>
+<div class="line"><a name="l15183"></a><span class="lineno">15183</span>&#160;        VkMemoryRequirements2KHR memReq2 = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR };</div>
+<div class="line"><a name="l15184"></a><span class="lineno">15184</span>&#160;        memReq2.pNext = &amp;memDedicatedReq;</div>
+<div class="line"><a name="l15185"></a><span class="lineno">15185</span>&#160; </div>
+<div class="line"><a name="l15186"></a><span class="lineno">15186</span>&#160;        (*m_VulkanFunctions.vkGetBufferMemoryRequirements2KHR)(m_hDevice, &amp;memReqInfo, &amp;memReq2);</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;        memReq = memReq2.memoryRequirements;</div>
+<div class="line"><a name="l15189"></a><span class="lineno">15189</span>&#160;        requiresDedicatedAllocation = (memDedicatedReq.requiresDedicatedAllocation != VK_FALSE);</div>
+<div class="line"><a name="l15190"></a><span class="lineno">15190</span>&#160;        prefersDedicatedAllocation  = (memDedicatedReq.prefersDedicatedAllocation  != VK_FALSE);</div>
+<div class="line"><a name="l15191"></a><span class="lineno">15191</span>&#160;    }</div>
+<div class="line"><a name="l15192"></a><span class="lineno">15192</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15193"></a><span class="lineno">15193</span>&#160;<span class="preprocessor">#endif // #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l15194"></a><span class="lineno">15194</span>&#160;    {</div>
+<div class="line"><a name="l15195"></a><span class="lineno">15195</span>&#160;        (*m_VulkanFunctions.vkGetBufferMemoryRequirements)(m_hDevice, hBuffer, &amp;memReq);</div>
+<div class="line"><a name="l15196"></a><span class="lineno">15196</span>&#160;        requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l15197"></a><span class="lineno">15197</span>&#160;        prefersDedicatedAllocation  = <span class="keyword">false</span>;</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;}</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;<span class="keywordtype">void</span> VmaAllocator_T::GetImageMemoryRequirements(</div>
+<div class="line"><a name="l15202"></a><span class="lineno">15202</span>&#160;    VkImage hImage,</div>
+<div class="line"><a name="l15203"></a><span class="lineno">15203</span>&#160;    VkMemoryRequirements&amp; memReq,</div>
+<div class="line"><a name="l15204"></a><span class="lineno">15204</span>&#160;    <span class="keywordtype">bool</span>&amp; requiresDedicatedAllocation,</div>
+<div class="line"><a name="l15205"></a><span class="lineno">15205</span>&#160;    <span class="keywordtype">bool</span>&amp; prefersDedicatedAllocation)<span class="keyword"> const</span></div>
+<div class="line"><a name="l15206"></a><span class="lineno">15206</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l15207"></a><span class="lineno">15207</span>&#160;<span class="preprocessor">#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l15208"></a><span class="lineno">15208</span>&#160;    <span class="keywordflow">if</span>(m_UseKhrDedicatedAllocation || m_VulkanApiVersion &gt;= VK_MAKE_VERSION(1, 1, 0))</div>
+<div class="line"><a name="l15209"></a><span class="lineno">15209</span>&#160;    {</div>
+<div class="line"><a name="l15210"></a><span class="lineno">15210</span>&#160;        VkImageMemoryRequirementsInfo2KHR memReqInfo = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR };</div>
+<div class="line"><a name="l15211"></a><span class="lineno">15211</span>&#160;        memReqInfo.image = hImage;</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;        VkMemoryDedicatedRequirementsKHR memDedicatedReq = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR };</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;        VkMemoryRequirements2KHR memReq2 = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR };</div>
+<div class="line"><a name="l15216"></a><span class="lineno">15216</span>&#160;        memReq2.pNext = &amp;memDedicatedReq;</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;        (*m_VulkanFunctions.vkGetImageMemoryRequirements2KHR)(m_hDevice, &amp;memReqInfo, &amp;memReq2);</div>
+<div class="line"><a name="l15219"></a><span class="lineno">15219</span>&#160; </div>
+<div class="line"><a name="l15220"></a><span class="lineno">15220</span>&#160;        memReq = memReq2.memoryRequirements;</div>
+<div class="line"><a name="l15221"></a><span class="lineno">15221</span>&#160;        requiresDedicatedAllocation = (memDedicatedReq.requiresDedicatedAllocation != VK_FALSE);</div>
+<div class="line"><a name="l15222"></a><span class="lineno">15222</span>&#160;        prefersDedicatedAllocation  = (memDedicatedReq.prefersDedicatedAllocation  != VK_FALSE);</div>
+<div class="line"><a name="l15223"></a><span class="lineno">15223</span>&#160;    }</div>
+<div class="line"><a name="l15224"></a><span class="lineno">15224</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15225"></a><span class="lineno">15225</span>&#160;<span class="preprocessor">#endif // #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION &gt;= 1001000</span></div>
+<div class="line"><a name="l15226"></a><span class="lineno">15226</span>&#160;    {</div>
+<div class="line"><a name="l15227"></a><span class="lineno">15227</span>&#160;        (*m_VulkanFunctions.vkGetImageMemoryRequirements)(m_hDevice, hImage, &amp;memReq);</div>
+<div class="line"><a name="l15228"></a><span class="lineno">15228</span>&#160;        requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l15229"></a><span class="lineno">15229</span>&#160;        prefersDedicatedAllocation  = <span class="keyword">false</span>;</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; </div>
+<div class="line"><a name="l15233"></a><span class="lineno">15233</span>&#160;VkResult VmaAllocator_T::AllocateMemory(</div>
+<div class="line"><a name="l15234"></a><span class="lineno">15234</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements&amp; vkMemReq,</div>
+<div class="line"><a name="l15235"></a><span class="lineno">15235</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation,</div>
+<div class="line"><a name="l15236"></a><span class="lineno">15236</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation,</div>
+<div class="line"><a name="l15237"></a><span class="lineno">15237</span>&#160;    VkBuffer dedicatedBuffer,</div>
+<div class="line"><a name="l15238"></a><span class="lineno">15238</span>&#160;    VkImage dedicatedImage,</div>
+<div class="line"><a name="l15239"></a><span class="lineno">15239</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="l15240"></a><span class="lineno">15240</span>&#160;    VmaSuballocationType suballocType,</div>
+<div class="line"><a name="l15241"></a><span class="lineno">15241</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l15242"></a><span class="lineno">15242</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</div>
+<div class="line"><a name="l15243"></a><span class="lineno">15243</span>&#160;{</div>
+<div class="line"><a name="l15244"></a><span class="lineno">15244</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="l15245"></a><span class="lineno">15245</span>&#160; </div>
+<div class="line"><a name="l15246"></a><span class="lineno">15246</span>&#160;    VMA_ASSERT(VmaIsPow2(vkMemReq.alignment));</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;    <span class="keywordflow">if</span>(vkMemReq.size == 0)</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;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</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>((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="l15253"></a><span class="lineno">15253</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="l15252"></a><span class="lineno">15252</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="l15253"></a><span class="lineno">15253</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="l15254"></a><span class="lineno">15254</span>&#160;    {</div>
-<div class="line"><a name="l15255"></a><span class="lineno">15255</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="l15255"></a><span class="lineno">15255</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="l15256"></a><span class="lineno">15256</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</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;    <span class="keywordflow">if</span>(requiresDedicatedAllocation)</div>
-<div class="line"><a name="l15259"></a><span class="lineno">15259</span>&#160;    {</div>
-<div class="line"><a name="l15260"></a><span class="lineno">15260</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="l15261"></a><span class="lineno">15261</span>&#160;        {</div>
-<div class="line"><a name="l15262"></a><span class="lineno">15262</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="l15263"></a><span class="lineno">15263</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</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">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="l15266"></a><span class="lineno">15266</span>&#160;        {</div>
-<div class="line"><a name="l15267"></a><span class="lineno">15267</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="l15268"></a><span class="lineno">15268</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</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;    }</div>
-<div class="line"><a name="l15271"></a><span class="lineno">15271</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="l15272"></a><span class="lineno">15272</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="l15273"></a><span class="lineno">15273</span>&#160;    {</div>
-<div class="line"><a name="l15274"></a><span class="lineno">15274</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="l15275"></a><span class="lineno">15275</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l15258"></a><span class="lineno">15258</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="l15259"></a><span class="lineno">15259</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="l15260"></a><span class="lineno">15260</span>&#160;    {</div>
+<div class="line"><a name="l15261"></a><span class="lineno">15261</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="l15262"></a><span class="lineno">15262</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l15263"></a><span class="lineno">15263</span>&#160;    }</div>
+<div class="line"><a name="l15264"></a><span class="lineno">15264</span>&#160;    <span class="keywordflow">if</span>(requiresDedicatedAllocation)</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">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="l15267"></a><span class="lineno">15267</span>&#160;        {</div>
+<div class="line"><a name="l15268"></a><span class="lineno">15268</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="l15269"></a><span class="lineno">15269</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</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;        <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="l15272"></a><span class="lineno">15272</span>&#160;        {</div>
+<div class="line"><a name="l15273"></a><span class="lineno">15273</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="l15274"></a><span class="lineno">15274</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</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;    }</div>
-<div class="line"><a name="l15277"></a><span class="lineno">15277</span>&#160; </div>
-<div class="line"><a name="l15278"></a><span class="lineno">15278</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="l15277"></a><span class="lineno">15277</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="l15278"></a><span class="lineno">15278</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="l15279"></a><span class="lineno">15279</span>&#160;    {</div>
-<div class="line"><a name="l15280"></a><span class="lineno">15280</span>&#160;        <span class="keyword">const</span> VkDeviceSize alignmentForPool = VMA_MAX(</div>
-<div class="line"><a name="l15281"></a><span class="lineno">15281</span>&#160;            vkMemReq.alignment,</div>
-<div class="line"><a name="l15282"></a><span class="lineno">15282</span>&#160;            GetMemoryTypeMinAlignment(createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>-&gt;m_BlockVector.GetMemoryTypeIndex()));</div>
+<div class="line"><a name="l15280"></a><span class="lineno">15280</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="l15281"></a><span class="lineno">15281</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l15282"></a><span class="lineno">15282</span>&#160;    }</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;        <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> createInfoForPool = createInfo;</div>
-<div class="line"><a name="l15285"></a><span class="lineno">15285</span>&#160;        <span class="comment">// If memory type is not HOST_VISIBLE, disable MAPPED.</span></div>
-<div class="line"><a name="l15286"></a><span class="lineno">15286</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="l15287"></a><span class="lineno">15287</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="l15288"></a><span class="lineno">15288</span>&#160;        {</div>
-<div class="line"><a name="l15289"></a><span class="lineno">15289</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="l15290"></a><span class="lineno">15290</span>&#160;        }</div>
-<div class="line"><a name="l15291"></a><span class="lineno">15291</span>&#160; </div>
-<div class="line"><a name="l15292"></a><span class="lineno">15292</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="l15293"></a><span class="lineno">15293</span>&#160;            m_CurrentFrameIndex.load(),</div>
-<div class="line"><a name="l15294"></a><span class="lineno">15294</span>&#160;            vkMemReq.size,</div>
-<div class="line"><a name="l15295"></a><span class="lineno">15295</span>&#160;            alignmentForPool,</div>
-<div class="line"><a name="l15296"></a><span class="lineno">15296</span>&#160;            createInfoForPool,</div>
-<div class="line"><a name="l15297"></a><span class="lineno">15297</span>&#160;            suballocType,</div>
-<div class="line"><a name="l15298"></a><span class="lineno">15298</span>&#160;            allocationCount,</div>
-<div class="line"><a name="l15299"></a><span class="lineno">15299</span>&#160;            pAllocations);</div>
-<div class="line"><a name="l15300"></a><span class="lineno">15300</span>&#160;    }</div>
-<div class="line"><a name="l15301"></a><span class="lineno">15301</span>&#160;    <span class="keywordflow">else</span></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;        <span class="comment">// Bit mask of memory Vulkan types acceptable for this allocation.</span></div>
-<div class="line"><a name="l15304"></a><span class="lineno">15304</span>&#160;        uint32_t memoryTypeBits = vkMemReq.memoryTypeBits;</div>
-<div class="line"><a name="l15305"></a><span class="lineno">15305</span>&#160;        uint32_t memTypeIndex = UINT32_MAX;</div>
-<div class="line"><a name="l15306"></a><span class="lineno">15306</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="l15307"></a><span class="lineno">15307</span>&#160;        <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l15308"></a><span class="lineno">15308</span>&#160;        {</div>
-<div class="line"><a name="l15309"></a><span class="lineno">15309</span>&#160;            VkDeviceSize alignmentForMemType = VMA_MAX(</div>
-<div class="line"><a name="l15310"></a><span class="lineno">15310</span>&#160;                vkMemReq.alignment,</div>
-<div class="line"><a name="l15311"></a><span class="lineno">15311</span>&#160;                GetMemoryTypeMinAlignment(memTypeIndex));</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 = AllocateMemoryOfType(</div>
-<div class="line"><a name="l15314"></a><span class="lineno">15314</span>&#160;                vkMemReq.size,</div>
-<div class="line"><a name="l15315"></a><span class="lineno">15315</span>&#160;                alignmentForMemType,</div>
-<div class="line"><a name="l15316"></a><span class="lineno">15316</span>&#160;                requiresDedicatedAllocation || prefersDedicatedAllocation,</div>
-<div class="line"><a name="l15317"></a><span class="lineno">15317</span>&#160;                dedicatedBuffer,</div>
-<div class="line"><a name="l15318"></a><span class="lineno">15318</span>&#160;                dedicatedImage,</div>
-<div class="line"><a name="l15319"></a><span class="lineno">15319</span>&#160;                createInfo,</div>
-<div class="line"><a name="l15320"></a><span class="lineno">15320</span>&#160;                memTypeIndex,</div>
-<div class="line"><a name="l15321"></a><span class="lineno">15321</span>&#160;                suballocType,</div>
-<div class="line"><a name="l15322"></a><span class="lineno">15322</span>&#160;                allocationCount,</div>
-<div class="line"><a name="l15323"></a><span class="lineno">15323</span>&#160;                pAllocations);</div>
-<div class="line"><a name="l15324"></a><span class="lineno">15324</span>&#160;            <span class="comment">// Succeeded on first try.</span></div>
-<div class="line"><a name="l15325"></a><span class="lineno">15325</span>&#160;            <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l15326"></a><span class="lineno">15326</span>&#160;            {</div>
-<div class="line"><a name="l15327"></a><span class="lineno">15327</span>&#160;                <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l15328"></a><span class="lineno">15328</span>&#160;            }</div>
-<div class="line"><a name="l15329"></a><span class="lineno">15329</span>&#160;            <span class="comment">// Allocation from this memory type failed. Try other compatible memory types.</span></div>
-<div class="line"><a name="l15330"></a><span class="lineno">15330</span>&#160;            <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15331"></a><span class="lineno">15331</span>&#160;            {</div>
-<div class="line"><a name="l15332"></a><span class="lineno">15332</span>&#160;                <span class="keywordflow">for</span>(;;)</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;                    <span class="comment">// Remove old memTypeIndex from list of possibilities.</span></div>
-<div class="line"><a name="l15335"></a><span class="lineno">15335</span>&#160;                    memoryTypeBits &amp;= ~(1u &lt;&lt; memTypeIndex);</div>
-<div class="line"><a name="l15336"></a><span class="lineno">15336</span>&#160;                    <span class="comment">// Find alternative memTypeIndex.</span></div>
-<div class="line"><a name="l15337"></a><span class="lineno">15337</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="l15338"></a><span class="lineno">15338</span>&#160;                    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l15339"></a><span class="lineno">15339</span>&#160;                    {</div>
-<div class="line"><a name="l15340"></a><span class="lineno">15340</span>&#160;                        alignmentForMemType = VMA_MAX(</div>
-<div class="line"><a name="l15341"></a><span class="lineno">15341</span>&#160;                            vkMemReq.alignment,</div>
-<div class="line"><a name="l15342"></a><span class="lineno">15342</span>&#160;                            GetMemoryTypeMinAlignment(memTypeIndex));</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;                        res = AllocateMemoryOfType(</div>
-<div class="line"><a name="l15345"></a><span class="lineno">15345</span>&#160;                            vkMemReq.size,</div>
-<div class="line"><a name="l15346"></a><span class="lineno">15346</span>&#160;                            alignmentForMemType,</div>
-<div class="line"><a name="l15347"></a><span class="lineno">15347</span>&#160;                            requiresDedicatedAllocation || prefersDedicatedAllocation,</div>
-<div class="line"><a name="l15348"></a><span class="lineno">15348</span>&#160;                            dedicatedBuffer,</div>
-<div class="line"><a name="l15349"></a><span class="lineno">15349</span>&#160;                            dedicatedImage,</div>
-<div class="line"><a name="l15350"></a><span class="lineno">15350</span>&#160;                            createInfo,</div>
-<div class="line"><a name="l15351"></a><span class="lineno">15351</span>&#160;                            memTypeIndex,</div>
-<div class="line"><a name="l15352"></a><span class="lineno">15352</span>&#160;                            suballocType,</div>
-<div class="line"><a name="l15353"></a><span class="lineno">15353</span>&#160;                            allocationCount,</div>
-<div class="line"><a name="l15354"></a><span class="lineno">15354</span>&#160;                            pAllocations);</div>
-<div class="line"><a name="l15355"></a><span class="lineno">15355</span>&#160;                        <span class="comment">// Allocation from this alternative memory type succeeded.</span></div>
-<div class="line"><a name="l15356"></a><span class="lineno">15356</span>&#160;                        <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;                            <span class="keywordflow">return</span> res;</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">// else: Allocation from this memory type failed. Try next one - next loop iteration.</span></div>
-<div class="line"><a name="l15361"></a><span class="lineno">15361</span>&#160;                    }</div>
-<div class="line"><a name="l15362"></a><span class="lineno">15362</span>&#160;                    <span class="comment">// No other matching memory type index could be found.</span></div>
-<div class="line"><a name="l15363"></a><span class="lineno">15363</span>&#160;                    <span class="keywordflow">else</span></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;                        <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="l15366"></a><span class="lineno">15366</span>&#160;                        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l15284"></a><span class="lineno">15284</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="l15285"></a><span class="lineno">15285</span>&#160;    {</div>
+<div class="line"><a name="l15286"></a><span class="lineno">15286</span>&#160;        <span class="keyword">const</span> VkDeviceSize alignmentForPool = VMA_MAX(</div>
+<div class="line"><a name="l15287"></a><span class="lineno">15287</span>&#160;            vkMemReq.alignment,</div>
+<div class="line"><a name="l15288"></a><span class="lineno">15288</span>&#160;            GetMemoryTypeMinAlignment(createInfo.<a class="code" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">pool</a>-&gt;m_BlockVector.GetMemoryTypeIndex()));</div>
+<div class="line"><a name="l15289"></a><span class="lineno">15289</span>&#160; </div>
+<div class="line"><a name="l15290"></a><span class="lineno">15290</span>&#160;        <a class="code" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> createInfoForPool = createInfo;</div>
+<div class="line"><a name="l15291"></a><span class="lineno">15291</span>&#160;        <span class="comment">// If memory type is not HOST_VISIBLE, disable MAPPED.</span></div>
+<div class="line"><a name="l15292"></a><span class="lineno">15292</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="l15293"></a><span class="lineno">15293</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="l15294"></a><span class="lineno">15294</span>&#160;        {</div>
+<div class="line"><a name="l15295"></a><span class="lineno">15295</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="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="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="l15299"></a><span class="lineno">15299</span>&#160;            m_CurrentFrameIndex.load(),</div>
+<div class="line"><a name="l15300"></a><span class="lineno">15300</span>&#160;            vkMemReq.size,</div>
+<div class="line"><a name="l15301"></a><span class="lineno">15301</span>&#160;            alignmentForPool,</div>
+<div class="line"><a name="l15302"></a><span class="lineno">15302</span>&#160;            createInfoForPool,</div>
+<div class="line"><a name="l15303"></a><span class="lineno">15303</span>&#160;            suballocType,</div>
+<div class="line"><a name="l15304"></a><span class="lineno">15304</span>&#160;            allocationCount,</div>
+<div class="line"><a name="l15305"></a><span class="lineno">15305</span>&#160;            pAllocations);</div>
+<div class="line"><a name="l15306"></a><span class="lineno">15306</span>&#160;    }</div>
+<div class="line"><a name="l15307"></a><span class="lineno">15307</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15308"></a><span class="lineno">15308</span>&#160;    {</div>
+<div class="line"><a name="l15309"></a><span class="lineno">15309</span>&#160;        <span class="comment">// Bit mask of memory Vulkan types acceptable for this allocation.</span></div>
+<div class="line"><a name="l15310"></a><span class="lineno">15310</span>&#160;        uint32_t memoryTypeBits = vkMemReq.memoryTypeBits;</div>
+<div class="line"><a name="l15311"></a><span class="lineno">15311</span>&#160;        uint32_t memTypeIndex = UINT32_MAX;</div>
+<div class="line"><a name="l15312"></a><span class="lineno">15312</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="l15313"></a><span class="lineno">15313</span>&#160;        <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;            VkDeviceSize alignmentForMemType = VMA_MAX(</div>
+<div class="line"><a name="l15316"></a><span class="lineno">15316</span>&#160;                vkMemReq.alignment,</div>
+<div class="line"><a name="l15317"></a><span class="lineno">15317</span>&#160;                GetMemoryTypeMinAlignment(memTypeIndex));</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;            res = AllocateMemoryOfType(</div>
+<div class="line"><a name="l15320"></a><span class="lineno">15320</span>&#160;                vkMemReq.size,</div>
+<div class="line"><a name="l15321"></a><span class="lineno">15321</span>&#160;                alignmentForMemType,</div>
+<div class="line"><a name="l15322"></a><span class="lineno">15322</span>&#160;                requiresDedicatedAllocation || prefersDedicatedAllocation,</div>
+<div class="line"><a name="l15323"></a><span class="lineno">15323</span>&#160;                dedicatedBuffer,</div>
+<div class="line"><a name="l15324"></a><span class="lineno">15324</span>&#160;                dedicatedImage,</div>
+<div class="line"><a name="l15325"></a><span class="lineno">15325</span>&#160;                createInfo,</div>
+<div class="line"><a name="l15326"></a><span class="lineno">15326</span>&#160;                memTypeIndex,</div>
+<div class="line"><a name="l15327"></a><span class="lineno">15327</span>&#160;                suballocType,</div>
+<div class="line"><a name="l15328"></a><span class="lineno">15328</span>&#160;                allocationCount,</div>
+<div class="line"><a name="l15329"></a><span class="lineno">15329</span>&#160;                pAllocations);</div>
+<div class="line"><a name="l15330"></a><span class="lineno">15330</span>&#160;            <span class="comment">// Succeeded on first try.</span></div>
+<div class="line"><a name="l15331"></a><span class="lineno">15331</span>&#160;            <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;                <span class="keywordflow">return</span> res;</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="comment">// Allocation from this memory type failed. Try other compatible memory types.</span></div>
+<div class="line"><a name="l15336"></a><span class="lineno">15336</span>&#160;            <span class="keywordflow">else</span></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;                <span class="keywordflow">for</span>(;;)</div>
+<div class="line"><a name="l15339"></a><span class="lineno">15339</span>&#160;                {</div>
+<div class="line"><a name="l15340"></a><span class="lineno">15340</span>&#160;                    <span class="comment">// Remove old memTypeIndex from list of possibilities.</span></div>
+<div class="line"><a name="l15341"></a><span class="lineno">15341</span>&#160;                    memoryTypeBits &amp;= ~(1u &lt;&lt; memTypeIndex);</div>
+<div class="line"><a name="l15342"></a><span class="lineno">15342</span>&#160;                    <span class="comment">// Find alternative memTypeIndex.</span></div>
+<div class="line"><a name="l15343"></a><span class="lineno">15343</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="l15344"></a><span class="lineno">15344</span>&#160;                    <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l15345"></a><span class="lineno">15345</span>&#160;                    {</div>
+<div class="line"><a name="l15346"></a><span class="lineno">15346</span>&#160;                        alignmentForMemType = VMA_MAX(</div>
+<div class="line"><a name="l15347"></a><span class="lineno">15347</span>&#160;                            vkMemReq.alignment,</div>
+<div class="line"><a name="l15348"></a><span class="lineno">15348</span>&#160;                            GetMemoryTypeMinAlignment(memTypeIndex));</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;                        res = AllocateMemoryOfType(</div>
+<div class="line"><a name="l15351"></a><span class="lineno">15351</span>&#160;                            vkMemReq.size,</div>
+<div class="line"><a name="l15352"></a><span class="lineno">15352</span>&#160;                            alignmentForMemType,</div>
+<div class="line"><a name="l15353"></a><span class="lineno">15353</span>&#160;                            requiresDedicatedAllocation || prefersDedicatedAllocation,</div>
+<div class="line"><a name="l15354"></a><span class="lineno">15354</span>&#160;                            dedicatedBuffer,</div>
+<div class="line"><a name="l15355"></a><span class="lineno">15355</span>&#160;                            dedicatedImage,</div>
+<div class="line"><a name="l15356"></a><span class="lineno">15356</span>&#160;                            createInfo,</div>
+<div class="line"><a name="l15357"></a><span class="lineno">15357</span>&#160;                            memTypeIndex,</div>
+<div class="line"><a name="l15358"></a><span class="lineno">15358</span>&#160;                            suballocType,</div>
+<div class="line"><a name="l15359"></a><span class="lineno">15359</span>&#160;                            allocationCount,</div>
+<div class="line"><a name="l15360"></a><span class="lineno">15360</span>&#160;                            pAllocations);</div>
+<div class="line"><a name="l15361"></a><span class="lineno">15361</span>&#160;                        <span class="comment">// Allocation from this alternative memory type succeeded.</span></div>
+<div class="line"><a name="l15362"></a><span class="lineno">15362</span>&#160;                        <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;                            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l15365"></a><span class="lineno">15365</span>&#160;                        }</div>
+<div class="line"><a name="l15366"></a><span class="lineno">15366</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="l15367"></a><span class="lineno">15367</span>&#160;                    }</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;            }</div>
-<div class="line"><a name="l15370"></a><span class="lineno">15370</span>&#160;        }</div>
-<div class="line"><a name="l15371"></a><span class="lineno">15371</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="l15372"></a><span class="lineno">15372</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15373"></a><span class="lineno">15373</span>&#160;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l15374"></a><span class="lineno">15374</span>&#160;    }</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; </div>
-<div class="line"><a name="l15377"></a><span class="lineno">15377</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::FreeMemory(</div>
-<div class="line"><a name="l15378"></a><span class="lineno">15378</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l15379"></a><span class="lineno">15379</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</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;    VMA_ASSERT(pAllocations);</div>
+<div class="line"><a name="l15368"></a><span class="lineno">15368</span>&#160;                    <span class="comment">// No other matching memory type index could be found.</span></div>
+<div class="line"><a name="l15369"></a><span class="lineno">15369</span>&#160;                    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15370"></a><span class="lineno">15370</span>&#160;                    {</div>
+<div class="line"><a name="l15371"></a><span class="lineno">15371</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="l15372"></a><span class="lineno">15372</span>&#160;                        <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
+<div class="line"><a name="l15373"></a><span class="lineno">15373</span>&#160;                    }</div>
+<div class="line"><a name="l15374"></a><span class="lineno">15374</span>&#160;                }</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;        }</div>
+<div class="line"><a name="l15377"></a><span class="lineno">15377</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="l15378"></a><span class="lineno">15378</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15379"></a><span class="lineno">15379</span>&#160;            <span class="keywordflow">return</span> res;</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; </div>
-<div class="line"><a name="l15383"></a><span class="lineno">15383</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> allocIndex = allocationCount; allocIndex--; )</div>
-<div class="line"><a name="l15384"></a><span class="lineno">15384</span>&#160;    {</div>
-<div class="line"><a name="l15385"></a><span class="lineno">15385</span>&#160;        <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation = pAllocations[allocIndex];</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;        <span class="keywordflow">if</span>(allocation != VK_NULL_HANDLE)</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;            <span class="keywordflow">if</span>(TouchAllocation(allocation))</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;                <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</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;                    FillAllocation(allocation, VMA_ALLOCATION_FILL_PATTERN_DESTROYED);</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; </div>
-<div class="line"><a name="l15396"></a><span class="lineno">15396</span>&#160;                <span class="keywordflow">switch</span>(allocation-&gt;GetType())</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="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
-<div class="line"><a name="l15399"></a><span class="lineno">15399</span>&#160;                    {</div>
-<div class="line"><a name="l15400"></a><span class="lineno">15400</span>&#160;                        VmaBlockVector* pBlockVector = VMA_NULL;</div>
-<div class="line"><a name="l15401"></a><span class="lineno">15401</span>&#160;                        <a class="code" href="struct_vma_pool.html">VmaPool</a> hPool = allocation-&gt;GetBlock()-&gt;GetParentPool();</div>
-<div class="line"><a name="l15402"></a><span class="lineno">15402</span>&#160;                        <span class="keywordflow">if</span>(hPool != VK_NULL_HANDLE)</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;                            pBlockVector = &amp;hPool-&gt;m_BlockVector;</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;                        <span class="keywordflow">else</span></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="keyword">const</span> uint32_t memTypeIndex = allocation-&gt;GetMemoryTypeIndex();</div>
-<div class="line"><a name="l15409"></a><span class="lineno">15409</span>&#160;                            pBlockVector = m_pBlockVectors[memTypeIndex];</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;                        pBlockVector-&gt;Free(allocation);</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;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l15414"></a><span class="lineno">15414</span>&#160;                <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
-<div class="line"><a name="l15415"></a><span class="lineno">15415</span>&#160;                    FreeDedicatedMemory(allocation);</div>
-<div class="line"><a name="l15416"></a><span class="lineno">15416</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l15417"></a><span class="lineno">15417</span>&#160;                <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l15418"></a><span class="lineno">15418</span>&#160;                    VMA_ASSERT(0);</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">// Do this regardless of whether the allocation is lost. Lost allocations still account to Budget.AllocationBytes.</span></div>
-<div class="line"><a name="l15423"></a><span class="lineno">15423</span>&#160;            m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(allocation-&gt;GetMemoryTypeIndex()), allocation-&gt;GetSize());</div>
-<div class="line"><a name="l15424"></a><span class="lineno">15424</span>&#160;            allocation-&gt;SetUserData(<span class="keyword">this</span>, VMA_NULL);</div>
-<div class="line"><a name="l15425"></a><span class="lineno">15425</span>&#160;            allocation-&gt;Dtor();</div>
-<div class="line"><a name="l15426"></a><span class="lineno">15426</span>&#160;            m_AllocationObjectAllocator.Free(allocation);</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;    }</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; </div>
-<div class="line"><a name="l15431"></a><span class="lineno">15431</span>&#160;VkResult VmaAllocator_T::ResizeAllocation(</div>
-<div class="line"><a name="l15432"></a><span class="lineno">15432</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> alloc,</div>
-<div class="line"><a name="l15433"></a><span class="lineno">15433</span>&#160;    VkDeviceSize newSize)</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;    <span class="comment">// This function is deprecated and so it does nothing. It&#39;s left for backward compatibility.</span></div>
-<div class="line"><a name="l15436"></a><span class="lineno">15436</span>&#160;    <span class="keywordflow">if</span>(newSize == 0 || alloc-&gt;GetLastUseFrameIndex() == VMA_FRAME_INDEX_LOST)</div>
-<div class="line"><a name="l15437"></a><span class="lineno">15437</span>&#160;    {</div>
-<div class="line"><a name="l15438"></a><span class="lineno">15438</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</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>(newSize == alloc-&gt;GetSize())</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;        <span class="keywordflow">return</span> VK_SUCCESS;</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> VK_ERROR_OUT_OF_POOL_MEMORY;</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="l15447"></a><span class="lineno">15447</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="l15448"></a><span class="lineno">15448</span>&#160;{</div>
-<div class="line"><a name="l15449"></a><span class="lineno">15449</span>&#160;    <span class="comment">// Initialize.</span></div>
-<div class="line"><a name="l15450"></a><span class="lineno">15450</span>&#160;    InitStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>);</div>
-<div class="line"><a name="l15451"></a><span class="lineno">15451</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="l15452"></a><span class="lineno">15452</span>&#160;        InitStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[i]);</div>
-<div class="line"><a name="l15453"></a><span class="lineno">15453</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="l15454"></a><span class="lineno">15454</span>&#160;        InitStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[i]);</div>
-<div class="line"><a name="l15455"></a><span class="lineno">15455</span>&#160;    </div>
-<div class="line"><a name="l15456"></a><span class="lineno">15456</span>&#160;    <span class="comment">// Process default pools.</span></div>
-<div class="line"><a name="l15457"></a><span class="lineno">15457</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</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;        VmaBlockVector* <span class="keyword">const</span> pBlockVector = m_pBlockVectors[memTypeIndex];</div>
-<div class="line"><a name="l15460"></a><span class="lineno">15460</span>&#160;        VMA_ASSERT(pBlockVector);</div>
-<div class="line"><a name="l15461"></a><span class="lineno">15461</span>&#160;        pBlockVector-&gt;AddStats(pStats);</div>
-<div class="line"><a name="l15462"></a><span class="lineno">15462</span>&#160;    }</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="comment">// Process custom pools.</span></div>
-<div class="line"><a name="l15465"></a><span class="lineno">15465</span>&#160;    {</div>
-<div class="line"><a name="l15466"></a><span class="lineno">15466</span>&#160;        VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);</div>
-<div class="line"><a name="l15467"></a><span class="lineno">15467</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> poolIndex = 0, poolCount = m_Pools.size(); poolIndex &lt; poolCount; ++poolIndex)</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;            m_Pools[poolIndex]-&gt;m_BlockVector.AddStats(pStats);</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;    }</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="comment">// Process dedicated allocations.</span></div>
-<div class="line"><a name="l15474"></a><span class="lineno">15474</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</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="keyword">const</span> uint32_t memHeapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
-<div class="line"><a name="l15477"></a><span class="lineno">15477</span>&#160;        VmaMutexLockRead dedicatedAllocationsLock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
-<div class="line"><a name="l15478"></a><span class="lineno">15478</span>&#160;        AllocationVectorType* <span class="keyword">const</span> pDedicatedAllocVector = m_pDedicatedAllocations[memTypeIndex];</div>
-<div class="line"><a name="l15479"></a><span class="lineno">15479</span>&#160;        VMA_ASSERT(pDedicatedAllocVector);</div>
-<div class="line"><a name="l15480"></a><span class="lineno">15480</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> allocIndex = 0, allocCount = pDedicatedAllocVector-&gt;size(); allocIndex &lt; allocCount; ++allocIndex)</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;            <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> allocationStatInfo;</div>
-<div class="line"><a name="l15483"></a><span class="lineno">15483</span>&#160;            (*pDedicatedAllocVector)[allocIndex]-&gt;DedicatedAllocCalcStatsInfo(allocationStatInfo);</div>
-<div class="line"><a name="l15484"></a><span class="lineno">15484</span>&#160;            VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>, allocationStatInfo);</div>
-<div class="line"><a name="l15485"></a><span class="lineno">15485</span>&#160;            VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[memTypeIndex], allocationStatInfo);</div>
-<div class="line"><a name="l15486"></a><span class="lineno">15486</span>&#160;            VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[memHeapIndex], allocationStatInfo);</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; </div>
-<div class="line"><a name="l15490"></a><span class="lineno">15490</span>&#160;    <span class="comment">// Postprocess.</span></div>
-<div class="line"><a name="l15491"></a><span class="lineno">15491</span>&#160;    VmaPostprocessCalcStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>);</div>
-<div class="line"><a name="l15492"></a><span class="lineno">15492</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="l15493"></a><span class="lineno">15493</span>&#160;        VmaPostprocessCalcStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[i]);</div>
-<div class="line"><a name="l15494"></a><span class="lineno">15494</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="l15495"></a><span class="lineno">15495</span>&#160;        VmaPostprocessCalcStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[i]);</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> 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="l15499"></a><span class="lineno">15499</span>&#160;{</div>
-<div class="line"><a name="l15500"></a><span class="lineno">15500</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l15501"></a><span class="lineno">15501</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget)</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;        <span class="keywordflow">if</span>(m_Budget.m_OperationsSinceBudgetFetch &lt; 30)</div>
-<div class="line"><a name="l15504"></a><span class="lineno">15504</span>&#160;        {</div>
-<div class="line"><a name="l15505"></a><span class="lineno">15505</span>&#160;            VmaMutexLockRead lockRead(m_Budget.m_BudgetMutex, m_UseMutex);</div>
-<div class="line"><a name="l15506"></a><span class="lineno">15506</span>&#160;            <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; heapCount; ++i, ++outBudget)</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="keyword">const</span> uint32_t heapIndex = firstHeap + i;</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;                outBudget-&gt;<a class="code" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">blockBytes</a> = m_Budget.m_BlockBytes[heapIndex];</div>
-<div class="line"><a name="l15511"></a><span class="lineno">15511</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="l15512"></a><span class="lineno">15512</span>&#160; </div>
-<div class="line"><a name="l15513"></a><span class="lineno">15513</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="l15514"></a><span class="lineno">15514</span>&#160;                {</div>
-<div class="line"><a name="l15515"></a><span class="lineno">15515</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="l15516"></a><span class="lineno">15516</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="l15517"></a><span class="lineno">15517</span>&#160;                }</div>
-<div class="line"><a name="l15518"></a><span class="lineno">15518</span>&#160;                <span class="keywordflow">else</span></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;                    outBudget-&gt;<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a> = 0;</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; </div>
-<div class="line"><a name="l15523"></a><span class="lineno">15523</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="l15524"></a><span class="lineno">15524</span>&#160;                outBudget-&gt;<a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a> = VMA_MIN(</div>
-<div class="line"><a name="l15525"></a><span class="lineno">15525</span>&#160;                    m_Budget.m_VulkanBudget[heapIndex], m_MemProps.memoryHeaps[heapIndex].size);</div>
-<div class="line"><a name="l15526"></a><span class="lineno">15526</span>&#160;            }</div>
-<div class="line"><a name="l15527"></a><span class="lineno">15527</span>&#160;        }</div>
-<div class="line"><a name="l15528"></a><span class="lineno">15528</span>&#160;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15529"></a><span class="lineno">15529</span>&#160;        {</div>
-<div class="line"><a name="l15530"></a><span class="lineno">15530</span>&#160;            UpdateVulkanBudget(); <span class="comment">// Outside of mutex lock</span></div>
-<div class="line"><a name="l15531"></a><span class="lineno">15531</span>&#160;            GetBudget(outBudget, firstHeap, heapCount); <span class="comment">// Recursion</span></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="keywordflow">else</span></div>
-<div class="line"><a name="l15535"></a><span class="lineno">15535</span>&#160;<span class="preprocessor">#endif</span></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;        <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; heapCount; ++i, ++outBudget)</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;            <span class="keyword">const</span> uint32_t heapIndex = firstHeap + i;</div>
-<div class="line"><a name="l15540"></a><span class="lineno">15540</span>&#160; </div>
-<div class="line"><a name="l15541"></a><span class="lineno">15541</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="l15542"></a><span class="lineno">15542</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="l15543"></a><span class="lineno">15543</span>&#160; </div>
-<div class="line"><a name="l15544"></a><span class="lineno">15544</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="l15545"></a><span class="lineno">15545</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="l15546"></a><span class="lineno">15546</span>&#160;        }</div>
-<div class="line"><a name="l15547"></a><span class="lineno">15547</span>&#160;    }</div>
-<div class="line"><a name="l15548"></a><span class="lineno">15548</span>&#160;}</div>
+<div class="line"><a name="l15383"></a><span class="lineno">15383</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::FreeMemory(</div>
+<div class="line"><a name="l15384"></a><span class="lineno">15384</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l15385"></a><span class="lineno">15385</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</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;    VMA_ASSERT(pAllocations);</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;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> allocIndex = allocationCount; allocIndex--; )</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;        <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation = pAllocations[allocIndex];</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">if</span>(allocation != VK_NULL_HANDLE)</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;            <span class="keywordflow">if</span>(TouchAllocation(allocation))</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;                <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS)</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;                    FillAllocation(allocation, VMA_ALLOCATION_FILL_PATTERN_DESTROYED);</div>
+<div class="line"><a name="l15400"></a><span class="lineno">15400</span>&#160;                }</div>
+<div class="line"><a name="l15401"></a><span class="lineno">15401</span>&#160; </div>
+<div class="line"><a name="l15402"></a><span class="lineno">15402</span>&#160;                <span class="keywordflow">switch</span>(allocation-&gt;GetType())</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;                <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</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;                        VmaBlockVector* pBlockVector = VMA_NULL;</div>
+<div class="line"><a name="l15407"></a><span class="lineno">15407</span>&#160;                        <a class="code" href="struct_vma_pool.html">VmaPool</a> hPool = allocation-&gt;GetBlock()-&gt;GetParentPool();</div>
+<div class="line"><a name="l15408"></a><span class="lineno">15408</span>&#160;                        <span class="keywordflow">if</span>(hPool != VK_NULL_HANDLE)</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;                            pBlockVector = &amp;hPool-&gt;m_BlockVector;</div>
+<div class="line"><a name="l15411"></a><span class="lineno">15411</span>&#160;                        }</div>
+<div class="line"><a name="l15412"></a><span class="lineno">15412</span>&#160;                        <span class="keywordflow">else</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;                            <span class="keyword">const</span> uint32_t memTypeIndex = allocation-&gt;GetMemoryTypeIndex();</div>
+<div class="line"><a name="l15415"></a><span class="lineno">15415</span>&#160;                            pBlockVector = m_pBlockVectors[memTypeIndex];</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;                        pBlockVector-&gt;Free(allocation);</div>
+<div class="line"><a name="l15418"></a><span class="lineno">15418</span>&#160;                    }</div>
+<div class="line"><a name="l15419"></a><span class="lineno">15419</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l15420"></a><span class="lineno">15420</span>&#160;                <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
+<div class="line"><a name="l15421"></a><span class="lineno">15421</span>&#160;                    FreeDedicatedMemory(allocation);</div>
+<div class="line"><a name="l15422"></a><span class="lineno">15422</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l15423"></a><span class="lineno">15423</span>&#160;                <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l15424"></a><span class="lineno">15424</span>&#160;                    VMA_ASSERT(0);</div>
+<div class="line"><a name="l15425"></a><span class="lineno">15425</span>&#160;                }</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; </div>
+<div class="line"><a name="l15428"></a><span class="lineno">15428</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="l15429"></a><span class="lineno">15429</span>&#160;            m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(allocation-&gt;GetMemoryTypeIndex()), allocation-&gt;GetSize());</div>
+<div class="line"><a name="l15430"></a><span class="lineno">15430</span>&#160;            allocation-&gt;SetUserData(<span class="keyword">this</span>, VMA_NULL);</div>
+<div class="line"><a name="l15431"></a><span class="lineno">15431</span>&#160;            allocation-&gt;Dtor();</div>
+<div class="line"><a name="l15432"></a><span class="lineno">15432</span>&#160;            m_AllocationObjectAllocator.Free(allocation);</div>
+<div class="line"><a name="l15433"></a><span class="lineno">15433</span>&#160;        }</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; </div>
+<div class="line"><a name="l15437"></a><span class="lineno">15437</span>&#160;VkResult VmaAllocator_T::ResizeAllocation(</div>
+<div class="line"><a name="l15438"></a><span class="lineno">15438</span>&#160;    <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> alloc,</div>
+<div class="line"><a name="l15439"></a><span class="lineno">15439</span>&#160;    VkDeviceSize newSize)</div>
+<div class="line"><a name="l15440"></a><span class="lineno">15440</span>&#160;{</div>
+<div class="line"><a name="l15441"></a><span class="lineno">15441</span>&#160;    <span class="comment">// This function is deprecated and so it does nothing. It&#39;s left for backward compatibility.</span></div>
+<div class="line"><a name="l15442"></a><span class="lineno">15442</span>&#160;    <span class="keywordflow">if</span>(newSize == 0 || alloc-&gt;GetLastUseFrameIndex() == VMA_FRAME_INDEX_LOST)</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> VK_ERROR_VALIDATION_FAILED_EXT;</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;    <span class="keywordflow">if</span>(newSize == alloc-&gt;GetSize())</div>
+<div class="line"><a name="l15447"></a><span class="lineno">15447</span>&#160;    {</div>
+<div class="line"><a name="l15448"></a><span class="lineno">15448</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</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="keywordflow">return</span> VK_ERROR_OUT_OF_POOL_MEMORY;</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; </div>
+<div class="line"><a name="l15453"></a><span class="lineno">15453</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="l15454"></a><span class="lineno">15454</span>&#160;{</div>
+<div class="line"><a name="l15455"></a><span class="lineno">15455</span>&#160;    <span class="comment">// Initialize.</span></div>
+<div class="line"><a name="l15456"></a><span class="lineno">15456</span>&#160;    InitStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>);</div>
+<div class="line"><a name="l15457"></a><span class="lineno">15457</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="l15458"></a><span class="lineno">15458</span>&#160;        InitStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[i]);</div>
+<div class="line"><a name="l15459"></a><span class="lineno">15459</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="l15460"></a><span class="lineno">15460</span>&#160;        InitStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[i]);</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;    <span class="comment">// Process default pools.</span></div>
+<div class="line"><a name="l15463"></a><span class="lineno">15463</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</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;        VmaBlockVector* <span class="keyword">const</span> pBlockVector = m_pBlockVectors[memTypeIndex];</div>
+<div class="line"><a name="l15466"></a><span class="lineno">15466</span>&#160;        VMA_ASSERT(pBlockVector);</div>
+<div class="line"><a name="l15467"></a><span class="lineno">15467</span>&#160;        pBlockVector-&gt;AddStats(pStats);</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; </div>
+<div class="line"><a name="l15470"></a><span class="lineno">15470</span>&#160;    <span class="comment">// Process custom pools.</span></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;        VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);</div>
+<div class="line"><a name="l15473"></a><span class="lineno">15473</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> poolIndex = 0, poolCount = m_Pools.size(); poolIndex &lt; poolCount; ++poolIndex)</div>
+<div class="line"><a name="l15474"></a><span class="lineno">15474</span>&#160;        {</div>
+<div class="line"><a name="l15475"></a><span class="lineno">15475</span>&#160;            m_Pools[poolIndex]-&gt;m_BlockVector.AddStats(pStats);</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;    }</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="comment">// Process dedicated allocations.</span></div>
+<div class="line"><a name="l15480"></a><span class="lineno">15480</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</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="keyword">const</span> uint32_t memHeapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);</div>
+<div class="line"><a name="l15483"></a><span class="lineno">15483</span>&#160;        VmaMutexLockRead dedicatedAllocationsLock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
+<div class="line"><a name="l15484"></a><span class="lineno">15484</span>&#160;        AllocationVectorType* <span class="keyword">const</span> pDedicatedAllocVector = m_pDedicatedAllocations[memTypeIndex];</div>
+<div class="line"><a name="l15485"></a><span class="lineno">15485</span>&#160;        VMA_ASSERT(pDedicatedAllocVector);</div>
+<div class="line"><a name="l15486"></a><span class="lineno">15486</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> allocIndex = 0, allocCount = pDedicatedAllocVector-&gt;size(); allocIndex &lt; allocCount; ++allocIndex)</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;            <a class="code" href="struct_vma_stat_info.html">VmaStatInfo</a> allocationStatInfo;</div>
+<div class="line"><a name="l15489"></a><span class="lineno">15489</span>&#160;            (*pDedicatedAllocVector)[allocIndex]-&gt;DedicatedAllocCalcStatsInfo(allocationStatInfo);</div>
+<div class="line"><a name="l15490"></a><span class="lineno">15490</span>&#160;            VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>, allocationStatInfo);</div>
+<div class="line"><a name="l15491"></a><span class="lineno">15491</span>&#160;            VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[memTypeIndex], allocationStatInfo);</div>
+<div class="line"><a name="l15492"></a><span class="lineno">15492</span>&#160;            VmaAddStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[memHeapIndex], allocationStatInfo);</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;    }</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;    <span class="comment">// Postprocess.</span></div>
+<div class="line"><a name="l15497"></a><span class="lineno">15497</span>&#160;    VmaPostprocessCalcStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>);</div>
+<div class="line"><a name="l15498"></a><span class="lineno">15498</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="l15499"></a><span class="lineno">15499</span>&#160;        VmaPostprocessCalcStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[i]);</div>
+<div class="line"><a name="l15500"></a><span class="lineno">15500</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="l15501"></a><span class="lineno">15501</span>&#160;        VmaPostprocessCalcStatInfo(pStats-&gt;<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[i]);</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; </div>
+<div class="line"><a name="l15504"></a><span class="lineno">15504</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="l15505"></a><span class="lineno">15505</span>&#160;{</div>
+<div class="line"><a name="l15506"></a><span class="lineno">15506</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l15507"></a><span class="lineno">15507</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget)</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;        <span class="keywordflow">if</span>(m_Budget.m_OperationsSinceBudgetFetch &lt; 30)</div>
+<div class="line"><a name="l15510"></a><span class="lineno">15510</span>&#160;        {</div>
+<div class="line"><a name="l15511"></a><span class="lineno">15511</span>&#160;            VmaMutexLockRead lockRead(m_Budget.m_BudgetMutex, m_UseMutex);</div>
+<div class="line"><a name="l15512"></a><span class="lineno">15512</span>&#160;            <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; heapCount; ++i, ++outBudget)</div>
+<div class="line"><a name="l15513"></a><span class="lineno">15513</span>&#160;            {</div>
+<div class="line"><a name="l15514"></a><span class="lineno">15514</span>&#160;                <span class="keyword">const</span> uint32_t heapIndex = firstHeap + i;</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;                outBudget-&gt;<a class="code" href="struct_vma_budget.html#a58b492901baab685f466199124e514a0">blockBytes</a> = m_Budget.m_BlockBytes[heapIndex];</div>
+<div class="line"><a name="l15517"></a><span class="lineno">15517</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="l15518"></a><span class="lineno">15518</span>&#160; </div>
+<div class="line"><a name="l15519"></a><span class="lineno">15519</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="l15520"></a><span class="lineno">15520</span>&#160;                {</div>
+<div class="line"><a name="l15521"></a><span class="lineno">15521</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="l15522"></a><span class="lineno">15522</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="l15523"></a><span class="lineno">15523</span>&#160;                }</div>
+<div class="line"><a name="l15524"></a><span class="lineno">15524</span>&#160;                <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15525"></a><span class="lineno">15525</span>&#160;                {</div>
+<div class="line"><a name="l15526"></a><span class="lineno">15526</span>&#160;                    outBudget-&gt;<a class="code" href="struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6">usage</a> = 0;</div>
+<div class="line"><a name="l15527"></a><span class="lineno">15527</span>&#160;                }</div>
+<div class="line"><a name="l15528"></a><span class="lineno">15528</span>&#160; </div>
+<div class="line"><a name="l15529"></a><span class="lineno">15529</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="l15530"></a><span class="lineno">15530</span>&#160;                outBudget-&gt;<a class="code" href="struct_vma_budget.html#ab82e1d1754c2d210d0bdf90220bc6cdd">budget</a> = VMA_MIN(</div>
+<div class="line"><a name="l15531"></a><span class="lineno">15531</span>&#160;                    m_Budget.m_VulkanBudget[heapIndex], m_MemProps.memoryHeaps[heapIndex].size);</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="keywordflow">else</span></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;            UpdateVulkanBudget(); <span class="comment">// Outside of mutex lock</span></div>
+<div class="line"><a name="l15537"></a><span class="lineno">15537</span>&#160;            GetBudget(outBudget, firstHeap, heapCount); <span class="comment">// Recursion</span></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;    }</div>
+<div class="line"><a name="l15540"></a><span class="lineno">15540</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15541"></a><span class="lineno">15541</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l15542"></a><span class="lineno">15542</span>&#160;    {</div>
+<div class="line"><a name="l15543"></a><span class="lineno">15543</span>&#160;        <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; heapCount; ++i, ++outBudget)</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="keyword">const</span> uint32_t heapIndex = firstHeap + i;</div>
+<div class="line"><a name="l15546"></a><span class="lineno">15546</span>&#160; </div>
+<div class="line"><a name="l15547"></a><span class="lineno">15547</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="l15548"></a><span class="lineno">15548</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="l15549"></a><span class="lineno">15549</span>&#160; </div>
-<div class="line"><a name="l15550"></a><span class="lineno">15550</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="l15551"></a><span class="lineno">15551</span>&#160; </div>
-<div class="line"><a name="l15552"></a><span class="lineno">15552</span>&#160;VkResult VmaAllocator_T::DefragmentationBegin(</div>
-<div class="line"><a name="l15553"></a><span class="lineno">15553</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="l15554"></a><span class="lineno">15554</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats,</div>
-<div class="line"><a name="l15555"></a><span class="lineno">15555</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a>* pContext)</div>
-<div class="line"><a name="l15556"></a><span class="lineno">15556</span>&#160;{</div>
-<div class="line"><a name="l15557"></a><span class="lineno">15557</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="l15558"></a><span class="lineno">15558</span>&#160;    {</div>
-<div class="line"><a name="l15559"></a><span class="lineno">15559</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="l15560"></a><span class="lineno">15560</span>&#160;    }</div>
-<div class="line"><a name="l15561"></a><span class="lineno">15561</span>&#160; </div>
-<div class="line"><a name="l15562"></a><span class="lineno">15562</span>&#160;    *pContext = vma_new(<span class="keyword">this</span>, VmaDefragmentationContext_T)(</div>
-<div class="line"><a name="l15563"></a><span class="lineno">15563</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="l15564"></a><span class="lineno">15564</span>&#160; </div>
-<div class="line"><a name="l15565"></a><span class="lineno">15565</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#a0b3effd57f3fcdeb2ed62210b4ef20e1">pPools</a>);</div>
-<div class="line"><a name="l15566"></a><span class="lineno">15566</span>&#160;    (*pContext)-&gt;AddAllocations(</div>
-<div class="line"><a name="l15567"></a><span class="lineno">15567</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#a8943f8d65969ce8e2189a1cdf3205e96">pAllocations</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">pAllocationsChanged</a>);</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;    VkResult res = (*pContext)-&gt;Defragment(</div>
-<div class="line"><a name="l15570"></a><span class="lineno">15570</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="l15571"></a><span class="lineno">15571</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="l15572"></a><span class="lineno">15572</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">commandBuffer</a>, pStats);</div>
-<div class="line"><a name="l15573"></a><span class="lineno">15573</span>&#160; </div>
-<div class="line"><a name="l15574"></a><span class="lineno">15574</span>&#160;    <span class="keywordflow">if</span>(res != VK_NOT_READY)</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;        vma_delete(<span class="keyword">this</span>, *pContext);</div>
-<div class="line"><a name="l15577"></a><span class="lineno">15577</span>&#160;        *pContext = VMA_NULL;</div>
-<div class="line"><a name="l15578"></a><span class="lineno">15578</span>&#160;    }</div>
+<div class="line"><a name="l15550"></a><span class="lineno">15550</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="l15551"></a><span class="lineno">15551</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="l15552"></a><span class="lineno">15552</span>&#160;        }</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;}</div>
+<div class="line"><a name="l15555"></a><span class="lineno">15555</span>&#160; </div>
+<div class="line"><a name="l15556"></a><span class="lineno">15556</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="l15557"></a><span class="lineno">15557</span>&#160; </div>
+<div class="line"><a name="l15558"></a><span class="lineno">15558</span>&#160;VkResult VmaAllocator_T::DefragmentationBegin(</div>
+<div class="line"><a name="l15559"></a><span class="lineno">15559</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="l15560"></a><span class="lineno">15560</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats,</div>
+<div class="line"><a name="l15561"></a><span class="lineno">15561</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a>* pContext)</div>
+<div class="line"><a name="l15562"></a><span class="lineno">15562</span>&#160;{</div>
+<div class="line"><a name="l15563"></a><span class="lineno">15563</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="l15564"></a><span class="lineno">15564</span>&#160;    {</div>
+<div class="line"><a name="l15565"></a><span class="lineno">15565</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="l15566"></a><span class="lineno">15566</span>&#160;    }</div>
+<div class="line"><a name="l15567"></a><span class="lineno">15567</span>&#160; </div>
+<div class="line"><a name="l15568"></a><span class="lineno">15568</span>&#160;    *pContext = vma_new(<span class="keyword">this</span>, VmaDefragmentationContext_T)(</div>
+<div class="line"><a name="l15569"></a><span class="lineno">15569</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="l15570"></a><span class="lineno">15570</span>&#160; </div>
+<div class="line"><a name="l15571"></a><span class="lineno">15571</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#a0b3effd57f3fcdeb2ed62210b4ef20e1">pPools</a>);</div>
+<div class="line"><a name="l15572"></a><span class="lineno">15572</span>&#160;    (*pContext)-&gt;AddAllocations(</div>
+<div class="line"><a name="l15573"></a><span class="lineno">15573</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#a8943f8d65969ce8e2189a1cdf3205e96">pAllocations</a>, info.<a class="code" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">pAllocationsChanged</a>);</div>
+<div class="line"><a name="l15574"></a><span class="lineno">15574</span>&#160; </div>
+<div class="line"><a name="l15575"></a><span class="lineno">15575</span>&#160;    VkResult res = (*pContext)-&gt;Defragment(</div>
+<div class="line"><a name="l15576"></a><span class="lineno">15576</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="l15577"></a><span class="lineno">15577</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="l15578"></a><span class="lineno">15578</span>&#160;        info.<a class="code" href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">commandBuffer</a>, pStats);</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;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l15581"></a><span class="lineno">15581</span>&#160;}</div>
-<div class="line"><a name="l15582"></a><span class="lineno">15582</span>&#160; </div>
-<div class="line"><a name="l15583"></a><span class="lineno">15583</span>&#160;VkResult VmaAllocator_T::DefragmentationEnd(</div>
-<div class="line"><a name="l15584"></a><span class="lineno">15584</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</div>
-<div class="line"><a name="l15585"></a><span class="lineno">15585</span>&#160;{</div>
-<div class="line"><a name="l15586"></a><span class="lineno">15586</span>&#160;    vma_delete(<span class="keyword">this</span>, context);</div>
-<div class="line"><a name="l15587"></a><span class="lineno">15587</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l15588"></a><span class="lineno">15588</span>&#160;}</div>
-<div class="line"><a name="l15589"></a><span class="lineno">15589</span>&#160; </div>
-<div class="line"><a name="l15590"></a><span class="lineno">15590</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="l15580"></a><span class="lineno">15580</span>&#160;    <span class="keywordflow">if</span>(res != VK_NOT_READY)</div>
+<div class="line"><a name="l15581"></a><span class="lineno">15581</span>&#160;    {</div>
+<div class="line"><a name="l15582"></a><span class="lineno">15582</span>&#160;        vma_delete(<span class="keyword">this</span>, *pContext);</div>
+<div class="line"><a name="l15583"></a><span class="lineno">15583</span>&#160;        *pContext = VMA_NULL;</div>
+<div class="line"><a name="l15584"></a><span class="lineno">15584</span>&#160;    }</div>
+<div class="line"><a name="l15585"></a><span class="lineno">15585</span>&#160; </div>
+<div class="line"><a name="l15586"></a><span class="lineno">15586</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l15587"></a><span class="lineno">15587</span>&#160;}</div>
+<div class="line"><a name="l15588"></a><span class="lineno">15588</span>&#160; </div>
+<div class="line"><a name="l15589"></a><span class="lineno">15589</span>&#160;VkResult VmaAllocator_T::DefragmentationEnd(</div>
+<div class="line"><a name="l15590"></a><span class="lineno">15590</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</div>
 <div class="line"><a name="l15591"></a><span class="lineno">15591</span>&#160;{</div>
-<div class="line"><a name="l15592"></a><span class="lineno">15592</span>&#160;    <span class="keywordflow">if</span>(hAllocation-&gt;CanBecomeLost())</div>
-<div class="line"><a name="l15593"></a><span class="lineno">15593</span>&#160;    {</div>
-<div class="line"><a name="l15594"></a><span class="lineno">15594</span>&#160;        <span class="comment">/*</span></div>
-<div class="line"><a name="l15595"></a><span class="lineno">15595</span>&#160;<span class="comment">        Warning: This is a carefully designed algorithm.</span></div>
-<div class="line"><a name="l15596"></a><span class="lineno">15596</span>&#160;<span class="comment">        Do not modify unless you really know what you&#39;re doing :)</span></div>
-<div class="line"><a name="l15597"></a><span class="lineno">15597</span>&#160;<span class="comment">        */</span></div>
-<div class="line"><a name="l15598"></a><span class="lineno">15598</span>&#160;        <span class="keyword">const</span> uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
-<div class="line"><a name="l15599"></a><span class="lineno">15599</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
-<div class="line"><a name="l15600"></a><span class="lineno">15600</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
-<div class="line"><a name="l15601"></a><span class="lineno">15601</span>&#160;        {</div>
-<div class="line"><a name="l15602"></a><span class="lineno">15602</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == VMA_FRAME_INDEX_LOST)</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;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">memoryType</a> = UINT32_MAX;</div>
-<div class="line"><a name="l15605"></a><span class="lineno">15605</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="l15606"></a><span class="lineno">15606</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">offset</a> = 0;</div>
-<div class="line"><a name="l15607"></a><span class="lineno">15607</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="l15608"></a><span class="lineno">15608</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a> = VMA_NULL;</div>
-<div class="line"><a name="l15609"></a><span class="lineno">15609</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="l15610"></a><span class="lineno">15610</span>&#160;                <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l15611"></a><span class="lineno">15611</span>&#160;            }</div>
-<div class="line"><a name="l15612"></a><span class="lineno">15612</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</div>
-<div class="line"><a name="l15613"></a><span class="lineno">15613</span>&#160;            {</div>
-<div class="line"><a name="l15614"></a><span class="lineno">15614</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="l15615"></a><span class="lineno">15615</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="l15616"></a><span class="lineno">15616</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="l15617"></a><span class="lineno">15617</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="l15618"></a><span class="lineno">15618</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a> = VMA_NULL;</div>
-<div class="line"><a name="l15619"></a><span class="lineno">15619</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="l15620"></a><span class="lineno">15620</span>&#160;                <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l15621"></a><span class="lineno">15621</span>&#160;            }</div>
-<div class="line"><a name="l15622"></a><span class="lineno">15622</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></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;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</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;                    localLastUseFrameIndex = localCurrFrameIndex;</div>
-<div class="line"><a name="l15627"></a><span class="lineno">15627</span>&#160;                }</div>
-<div class="line"><a name="l15628"></a><span class="lineno">15628</span>&#160;            }</div>
-<div class="line"><a name="l15629"></a><span class="lineno">15629</span>&#160;        }</div>
-<div class="line"><a name="l15630"></a><span class="lineno">15630</span>&#160;    }</div>
-<div class="line"><a name="l15631"></a><span class="lineno">15631</span>&#160;    <span class="keywordflow">else</span></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;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l15634"></a><span class="lineno">15634</span>&#160;        uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
-<div class="line"><a name="l15635"></a><span class="lineno">15635</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
-<div class="line"><a name="l15636"></a><span class="lineno">15636</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
-<div class="line"><a name="l15637"></a><span class="lineno">15637</span>&#160;        {</div>
-<div class="line"><a name="l15638"></a><span class="lineno">15638</span>&#160;            VMA_ASSERT(localLastUseFrameIndex != VMA_FRAME_INDEX_LOST);</div>
-<div class="line"><a name="l15639"></a><span class="lineno">15639</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</div>
-<div class="line"><a name="l15640"></a><span class="lineno">15640</span>&#160;            {</div>
-<div class="line"><a name="l15641"></a><span class="lineno">15641</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l15642"></a><span class="lineno">15642</span>&#160;            }</div>
-<div class="line"><a name="l15643"></a><span class="lineno">15643</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></div>
-<div class="line"><a name="l15644"></a><span class="lineno">15644</span>&#160;            {</div>
-<div class="line"><a name="l15645"></a><span class="lineno">15645</span>&#160;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</div>
-<div class="line"><a name="l15646"></a><span class="lineno">15646</span>&#160;                {</div>
-<div class="line"><a name="l15647"></a><span class="lineno">15647</span>&#160;                    localLastUseFrameIndex = localCurrFrameIndex;</div>
-<div class="line"><a name="l15648"></a><span class="lineno">15648</span>&#160;                }</div>
-<div class="line"><a name="l15649"></a><span class="lineno">15649</span>&#160;            }</div>
-<div class="line"><a name="l15650"></a><span class="lineno">15650</span>&#160;        }</div>
-<div class="line"><a name="l15651"></a><span class="lineno">15651</span>&#160;<span class="preprocessor">#endif</span></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;        pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">memoryType</a> = hAllocation-&gt;GetMemoryTypeIndex();</div>
-<div class="line"><a name="l15654"></a><span class="lineno">15654</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="l15655"></a><span class="lineno">15655</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="l15656"></a><span class="lineno">15656</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="l15657"></a><span class="lineno">15657</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="l15658"></a><span class="lineno">15658</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="l15659"></a><span class="lineno">15659</span>&#160;    }</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; </div>
-<div class="line"><a name="l15662"></a><span class="lineno">15662</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="l15663"></a><span class="lineno">15663</span>&#160;{</div>
-<div class="line"><a name="l15664"></a><span class="lineno">15664</span>&#160;    <span class="comment">// This is a stripped-down version of VmaAllocator_T::GetAllocationInfo.</span></div>
-<div class="line"><a name="l15665"></a><span class="lineno">15665</span>&#160;    <span class="keywordflow">if</span>(hAllocation-&gt;CanBecomeLost())</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;        uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
-<div class="line"><a name="l15668"></a><span class="lineno">15668</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
-<div class="line"><a name="l15669"></a><span class="lineno">15669</span>&#160;        <span class="keywordflow">for</span>(;;)</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;            <span class="keywordflow">if</span>(localLastUseFrameIndex == VMA_FRAME_INDEX_LOST)</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;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l15674"></a><span class="lineno">15674</span>&#160;            }</div>
-<div class="line"><a name="l15675"></a><span class="lineno">15675</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</div>
-<div class="line"><a name="l15676"></a><span class="lineno">15676</span>&#160;            {</div>
-<div class="line"><a name="l15677"></a><span class="lineno">15677</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</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;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></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="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</div>
-<div class="line"><a name="l15682"></a><span class="lineno">15682</span>&#160;                {</div>
-<div class="line"><a name="l15683"></a><span class="lineno">15683</span>&#160;                    localLastUseFrameIndex = localCurrFrameIndex;</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;            }</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;    }</div>
-<div class="line"><a name="l15688"></a><span class="lineno">15688</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15689"></a><span class="lineno">15689</span>&#160;    {</div>
-<div class="line"><a name="l15690"></a><span class="lineno">15690</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l15691"></a><span class="lineno">15691</span>&#160;        uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
-<div class="line"><a name="l15692"></a><span class="lineno">15692</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
-<div class="line"><a name="l15693"></a><span class="lineno">15693</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
-<div class="line"><a name="l15694"></a><span class="lineno">15694</span>&#160;        {</div>
-<div class="line"><a name="l15695"></a><span class="lineno">15695</span>&#160;            VMA_ASSERT(localLastUseFrameIndex != VMA_FRAME_INDEX_LOST);</div>
-<div class="line"><a name="l15696"></a><span class="lineno">15696</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</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="keywordflow">break</span>;</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;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></div>
-<div class="line"><a name="l15701"></a><span class="lineno">15701</span>&#160;            {</div>
-<div class="line"><a name="l15702"></a><span class="lineno">15702</span>&#160;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</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;                    localLastUseFrameIndex = localCurrFrameIndex;</div>
-<div class="line"><a name="l15705"></a><span class="lineno">15705</span>&#160;                }</div>
-<div class="line"><a name="l15706"></a><span class="lineno">15706</span>&#160;            }</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;<span class="preprocessor">#endif</span></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="keywordflow">return</span> <span class="keyword">true</span>;</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;}</div>
-<div class="line"><a name="l15713"></a><span class="lineno">15713</span>&#160; </div>
-<div class="line"><a name="l15714"></a><span class="lineno">15714</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="l15715"></a><span class="lineno">15715</span>&#160;{</div>
-<div class="line"><a name="l15716"></a><span class="lineno">15716</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="l15717"></a><span class="lineno">15717</span>&#160; </div>
-<div class="line"><a name="l15718"></a><span class="lineno">15718</span>&#160;    <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> newCreateInfo = *pCreateInfo;</div>
+<div class="line"><a name="l15592"></a><span class="lineno">15592</span>&#160;    vma_delete(<span class="keyword">this</span>, context);</div>
+<div class="line"><a name="l15593"></a><span class="lineno">15593</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</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> 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="l15597"></a><span class="lineno">15597</span>&#160;{</div>
+<div class="line"><a name="l15598"></a><span class="lineno">15598</span>&#160;    <span class="keywordflow">if</span>(hAllocation-&gt;CanBecomeLost())</div>
+<div class="line"><a name="l15599"></a><span class="lineno">15599</span>&#160;    {</div>
+<div class="line"><a name="l15600"></a><span class="lineno">15600</span>&#160;        <span class="comment">/*</span></div>
+<div class="line"><a name="l15601"></a><span class="lineno">15601</span>&#160;<span class="comment">        Warning: This is a carefully designed algorithm.</span></div>
+<div class="line"><a name="l15602"></a><span class="lineno">15602</span>&#160;<span class="comment">        Do not modify unless you really know what you&#39;re doing :)</span></div>
+<div class="line"><a name="l15603"></a><span class="lineno">15603</span>&#160;<span class="comment">        */</span></div>
+<div class="line"><a name="l15604"></a><span class="lineno">15604</span>&#160;        <span class="keyword">const</span> uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
+<div class="line"><a name="l15605"></a><span class="lineno">15605</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
+<div class="line"><a name="l15606"></a><span class="lineno">15606</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
+<div class="line"><a name="l15607"></a><span class="lineno">15607</span>&#160;        {</div>
+<div class="line"><a name="l15608"></a><span class="lineno">15608</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == VMA_FRAME_INDEX_LOST)</div>
+<div class="line"><a name="l15609"></a><span class="lineno">15609</span>&#160;            {</div>
+<div class="line"><a name="l15610"></a><span class="lineno">15610</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5">memoryType</a> = UINT32_MAX;</div>
+<div class="line"><a name="l15611"></a><span class="lineno">15611</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="l15612"></a><span class="lineno">15612</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">offset</a> = 0;</div>
+<div class="line"><a name="l15613"></a><span class="lineno">15613</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="l15614"></a><span class="lineno">15614</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a> = VMA_NULL;</div>
+<div class="line"><a name="l15615"></a><span class="lineno">15615</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="l15616"></a><span class="lineno">15616</span>&#160;                <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l15617"></a><span class="lineno">15617</span>&#160;            }</div>
+<div class="line"><a name="l15618"></a><span class="lineno">15618</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</div>
+<div class="line"><a name="l15619"></a><span class="lineno">15619</span>&#160;            {</div>
+<div class="line"><a name="l15620"></a><span class="lineno">15620</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="l15621"></a><span class="lineno">15621</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="l15622"></a><span class="lineno">15622</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="l15623"></a><span class="lineno">15623</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="l15624"></a><span class="lineno">15624</span>&#160;                pAllocationInfo-&gt;<a class="code" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a> = VMA_NULL;</div>
+<div class="line"><a name="l15625"></a><span class="lineno">15625</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="l15626"></a><span class="lineno">15626</span>&#160;                <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l15627"></a><span class="lineno">15627</span>&#160;            }</div>
+<div class="line"><a name="l15628"></a><span class="lineno">15628</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></div>
+<div class="line"><a name="l15629"></a><span class="lineno">15629</span>&#160;            {</div>
+<div class="line"><a name="l15630"></a><span class="lineno">15630</span>&#160;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</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;                    localLastUseFrameIndex = localCurrFrameIndex;</div>
+<div class="line"><a name="l15633"></a><span class="lineno">15633</span>&#160;                }</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;        }</div>
+<div class="line"><a name="l15636"></a><span class="lineno">15636</span>&#160;    }</div>
+<div class="line"><a name="l15637"></a><span class="lineno">15637</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15638"></a><span class="lineno">15638</span>&#160;    {</div>
+<div class="line"><a name="l15639"></a><span class="lineno">15639</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l15640"></a><span class="lineno">15640</span>&#160;        uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
+<div class="line"><a name="l15641"></a><span class="lineno">15641</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
+<div class="line"><a name="l15642"></a><span class="lineno">15642</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
+<div class="line"><a name="l15643"></a><span class="lineno">15643</span>&#160;        {</div>
+<div class="line"><a name="l15644"></a><span class="lineno">15644</span>&#160;            VMA_ASSERT(localLastUseFrameIndex != VMA_FRAME_INDEX_LOST);</div>
+<div class="line"><a name="l15645"></a><span class="lineno">15645</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</div>
+<div class="line"><a name="l15646"></a><span class="lineno">15646</span>&#160;            {</div>
+<div class="line"><a name="l15647"></a><span class="lineno">15647</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l15648"></a><span class="lineno">15648</span>&#160;            }</div>
+<div class="line"><a name="l15649"></a><span class="lineno">15649</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></div>
+<div class="line"><a name="l15650"></a><span class="lineno">15650</span>&#160;            {</div>
+<div class="line"><a name="l15651"></a><span class="lineno">15651</span>&#160;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</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;                    localLastUseFrameIndex = localCurrFrameIndex;</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;            }</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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l15658"></a><span class="lineno">15658</span>&#160; </div>
+<div class="line"><a name="l15659"></a><span class="lineno">15659</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="l15660"></a><span class="lineno">15660</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="l15661"></a><span class="lineno">15661</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="l15662"></a><span class="lineno">15662</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="l15663"></a><span class="lineno">15663</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="l15664"></a><span class="lineno">15664</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="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; </div>
+<div class="line"><a name="l15668"></a><span class="lineno">15668</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="l15669"></a><span class="lineno">15669</span>&#160;{</div>
+<div class="line"><a name="l15670"></a><span class="lineno">15670</span>&#160;    <span class="comment">// This is a stripped-down version of VmaAllocator_T::GetAllocationInfo.</span></div>
+<div class="line"><a name="l15671"></a><span class="lineno">15671</span>&#160;    <span class="keywordflow">if</span>(hAllocation-&gt;CanBecomeLost())</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;        uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
+<div class="line"><a name="l15674"></a><span class="lineno">15674</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
+<div class="line"><a name="l15675"></a><span class="lineno">15675</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
+<div class="line"><a name="l15676"></a><span class="lineno">15676</span>&#160;        {</div>
+<div class="line"><a name="l15677"></a><span class="lineno">15677</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == VMA_FRAME_INDEX_LOST)</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;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</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="keywordflow">else</span> <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</div>
+<div class="line"><a name="l15682"></a><span class="lineno">15682</span>&#160;            {</div>
+<div class="line"><a name="l15683"></a><span class="lineno">15683</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</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;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></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;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</div>
+<div class="line"><a name="l15688"></a><span class="lineno">15688</span>&#160;                {</div>
+<div class="line"><a name="l15689"></a><span class="lineno">15689</span>&#160;                    localLastUseFrameIndex = localCurrFrameIndex;</div>
+<div class="line"><a name="l15690"></a><span class="lineno">15690</span>&#160;                }</div>
+<div class="line"><a name="l15691"></a><span class="lineno">15691</span>&#160;            }</div>
+<div class="line"><a name="l15692"></a><span class="lineno">15692</span>&#160;        }</div>
+<div class="line"><a name="l15693"></a><span class="lineno">15693</span>&#160;    }</div>
+<div class="line"><a name="l15694"></a><span class="lineno">15694</span>&#160;    <span class="keywordflow">else</span></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;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l15697"></a><span class="lineno">15697</span>&#160;        uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();</div>
+<div class="line"><a name="l15698"></a><span class="lineno">15698</span>&#160;        uint32_t localLastUseFrameIndex = hAllocation-&gt;GetLastUseFrameIndex();</div>
+<div class="line"><a name="l15699"></a><span class="lineno">15699</span>&#160;        <span class="keywordflow">for</span>(;;)</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;            VMA_ASSERT(localLastUseFrameIndex != VMA_FRAME_INDEX_LOST);</div>
+<div class="line"><a name="l15702"></a><span class="lineno">15702</span>&#160;            <span class="keywordflow">if</span>(localLastUseFrameIndex == localCurrFrameIndex)</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;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l15705"></a><span class="lineno">15705</span>&#160;            }</div>
+<div class="line"><a name="l15706"></a><span class="lineno">15706</span>&#160;            <span class="keywordflow">else</span> <span class="comment">// Last use time earlier than current time.</span></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;                <span class="keywordflow">if</span>(hAllocation-&gt;CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))</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;                    localLastUseFrameIndex = localCurrFrameIndex;</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;            }</div>
+<div class="line"><a name="l15713"></a><span class="lineno">15713</span>&#160;        }</div>
+<div class="line"><a name="l15714"></a><span class="lineno">15714</span>&#160;<span class="preprocessor">#endif</span></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;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l15717"></a><span class="lineno">15717</span>&#160;    }</div>
+<div class="line"><a name="l15718"></a><span class="lineno">15718</span>&#160;}</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;    <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="l15721"></a><span class="lineno">15721</span>&#160;    {</div>
-<div class="line"><a name="l15722"></a><span class="lineno">15722</span>&#160;        newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a> = SIZE_MAX;</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;    <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="l15725"></a><span class="lineno">15725</span>&#160;    {</div>
-<div class="line"><a name="l15726"></a><span class="lineno">15726</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_INITIALIZATION_FAILED;</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; </div>
-<div class="line"><a name="l15729"></a><span class="lineno">15729</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="l15730"></a><span class="lineno">15730</span>&#160; </div>
-<div class="line"><a name="l15731"></a><span class="lineno">15731</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="l15732"></a><span class="lineno">15732</span>&#160; </div>
-<div class="line"><a name="l15733"></a><span class="lineno">15733</span>&#160;    VkResult res = (*pPool)-&gt;m_BlockVector.CreateMinBlocks();</div>
-<div class="line"><a name="l15734"></a><span class="lineno">15734</span>&#160;    <span class="keywordflow">if</span>(res != VK_SUCCESS)</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;        vma_delete(<span class="keyword">this</span>, *pPool);</div>
-<div class="line"><a name="l15737"></a><span class="lineno">15737</span>&#160;        *pPool = VMA_NULL;</div>
-<div class="line"><a name="l15738"></a><span class="lineno">15738</span>&#160;        <span class="keywordflow">return</span> res;</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; </div>
-<div class="line"><a name="l15741"></a><span class="lineno">15741</span>&#160;    <span class="comment">// Add to m_Pools.</span></div>
-<div class="line"><a name="l15742"></a><span class="lineno">15742</span>&#160;    {</div>
-<div class="line"><a name="l15743"></a><span class="lineno">15743</span>&#160;        VmaMutexLockWrite lock(m_PoolsMutex, m_UseMutex);</div>
-<div class="line"><a name="l15744"></a><span class="lineno">15744</span>&#160;        (*pPool)-&gt;SetId(m_NextPoolId++);</div>
-<div class="line"><a name="l15745"></a><span class="lineno">15745</span>&#160;        VmaVectorInsertSorted&lt;VmaPointerLess&gt;(m_Pools, *pPool);</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="keywordflow">return</span> VK_SUCCESS;</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; </div>
-<div class="line"><a name="l15751"></a><span class="lineno">15751</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="l15752"></a><span class="lineno">15752</span>&#160;{</div>
-<div class="line"><a name="l15753"></a><span class="lineno">15753</span>&#160;    <span class="comment">// Remove from m_Pools.</span></div>
-<div class="line"><a name="l15754"></a><span class="lineno">15754</span>&#160;    {</div>
-<div class="line"><a name="l15755"></a><span class="lineno">15755</span>&#160;        VmaMutexLockWrite lock(m_PoolsMutex, m_UseMutex);</div>
-<div class="line"><a name="l15756"></a><span class="lineno">15756</span>&#160;        <span class="keywordtype">bool</span> success = VmaVectorRemoveSorted&lt;VmaPointerLess&gt;(m_Pools, pool);</div>
-<div class="line"><a name="l15757"></a><span class="lineno">15757</span>&#160;        VMA_ASSERT(success &amp;&amp; <span class="stringliteral">&quot;Pool not found in Allocator.&quot;</span>);</div>
-<div class="line"><a name="l15758"></a><span class="lineno">15758</span>&#160;    }</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;    vma_delete(<span class="keyword">this</span>, pool);</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; </div>
-<div class="line"><a name="l15763"></a><span class="lineno">15763</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="l15764"></a><span class="lineno">15764</span>&#160;{</div>
-<div class="line"><a name="l15765"></a><span class="lineno">15765</span>&#160;    pool-&gt;m_BlockVector.GetPoolStats(pPoolStats);</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; </div>
-<div class="line"><a name="l15768"></a><span class="lineno">15768</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::SetCurrentFrameIndex(uint32_t frameIndex)</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;    m_CurrentFrameIndex.store(frameIndex);</div>
-<div class="line"><a name="l15771"></a><span class="lineno">15771</span>&#160; </div>
-<div class="line"><a name="l15772"></a><span class="lineno">15772</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l15773"></a><span class="lineno">15773</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget)</div>
-<div class="line"><a name="l15774"></a><span class="lineno">15774</span>&#160;    {</div>
-<div class="line"><a name="l15775"></a><span class="lineno">15775</span>&#160;        UpdateVulkanBudget();</div>
-<div class="line"><a name="l15776"></a><span class="lineno">15776</span>&#160;    }</div>
-<div class="line"><a name="l15777"></a><span class="lineno">15777</span>&#160;<span class="preprocessor">#endif // #if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l15778"></a><span class="lineno">15778</span>&#160;}</div>
-<div class="line"><a name="l15779"></a><span class="lineno">15779</span>&#160; </div>
-<div class="line"><a name="l15780"></a><span class="lineno">15780</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::MakePoolAllocationsLost(</div>
-<div class="line"><a name="l15781"></a><span class="lineno">15781</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> hPool,</div>
-<div class="line"><a name="l15782"></a><span class="lineno">15782</span>&#160;    <span class="keywordtype">size_t</span>* pLostAllocationCount)</div>
-<div class="line"><a name="l15783"></a><span class="lineno">15783</span>&#160;{</div>
-<div class="line"><a name="l15784"></a><span class="lineno">15784</span>&#160;    hPool-&gt;m_BlockVector.MakePoolAllocationsLost(</div>
-<div class="line"><a name="l15785"></a><span class="lineno">15785</span>&#160;        m_CurrentFrameIndex.load(),</div>
-<div class="line"><a name="l15786"></a><span class="lineno">15786</span>&#160;        pLostAllocationCount);</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; </div>
-<div class="line"><a name="l15789"></a><span class="lineno">15789</span>&#160;VkResult VmaAllocator_T::CheckPoolCorruption(<a class="code" href="struct_vma_pool.html">VmaPool</a> hPool)</div>
-<div class="line"><a name="l15790"></a><span class="lineno">15790</span>&#160;{</div>
-<div class="line"><a name="l15791"></a><span class="lineno">15791</span>&#160;    <span class="keywordflow">return</span> hPool-&gt;m_BlockVector.CheckCorruption();</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; </div>
-<div class="line"><a name="l15794"></a><span class="lineno">15794</span>&#160;VkResult VmaAllocator_T::CheckCorruption(uint32_t memoryTypeBits)</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;    VkResult finalRes = VK_ERROR_FEATURE_NOT_PRESENT;</div>
-<div class="line"><a name="l15797"></a><span class="lineno">15797</span>&#160; </div>
-<div class="line"><a name="l15798"></a><span class="lineno">15798</span>&#160;    <span class="comment">// Process default pools.</span></div>
-<div class="line"><a name="l15799"></a><span class="lineno">15799</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
-<div class="line"><a name="l15800"></a><span class="lineno">15800</span>&#160;    {</div>
-<div class="line"><a name="l15801"></a><span class="lineno">15801</span>&#160;        <span class="keywordflow">if</span>(((1u &lt;&lt; memTypeIndex) &amp; memoryTypeBits) != 0)</div>
-<div class="line"><a name="l15802"></a><span class="lineno">15802</span>&#160;        {</div>
-<div class="line"><a name="l15803"></a><span class="lineno">15803</span>&#160;            VmaBlockVector* <span class="keyword">const</span> pBlockVector = m_pBlockVectors[memTypeIndex];</div>
-<div class="line"><a name="l15804"></a><span class="lineno">15804</span>&#160;            VMA_ASSERT(pBlockVector);</div>
-<div class="line"><a name="l15805"></a><span class="lineno">15805</span>&#160;            VkResult localRes = pBlockVector-&gt;CheckCorruption();</div>
-<div class="line"><a name="l15806"></a><span class="lineno">15806</span>&#160;            <span class="keywordflow">switch</span>(localRes)</div>
-<div class="line"><a name="l15807"></a><span class="lineno">15807</span>&#160;            {</div>
-<div class="line"><a name="l15808"></a><span class="lineno">15808</span>&#160;            <span class="keywordflow">case</span> VK_ERROR_FEATURE_NOT_PRESENT:</div>
-<div class="line"><a name="l15809"></a><span class="lineno">15809</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l15810"></a><span class="lineno">15810</span>&#160;            <span class="keywordflow">case</span> VK_SUCCESS:</div>
-<div class="line"><a name="l15811"></a><span class="lineno">15811</span>&#160;                finalRes = VK_SUCCESS;</div>
-<div class="line"><a name="l15812"></a><span class="lineno">15812</span>&#160;                <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l15813"></a><span class="lineno">15813</span>&#160;            <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l15814"></a><span class="lineno">15814</span>&#160;                <span class="keywordflow">return</span> localRes;</div>
-<div class="line"><a name="l15815"></a><span class="lineno">15815</span>&#160;            }</div>
-<div class="line"><a name="l15816"></a><span class="lineno">15816</span>&#160;        }</div>
-<div class="line"><a name="l15817"></a><span class="lineno">15817</span>&#160;    }</div>
-<div class="line"><a name="l15818"></a><span class="lineno">15818</span>&#160; </div>
-<div class="line"><a name="l15819"></a><span class="lineno">15819</span>&#160;    <span class="comment">// Process custom pools.</span></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;        VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);</div>
-<div class="line"><a name="l15822"></a><span class="lineno">15822</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> poolIndex = 0, poolCount = m_Pools.size(); poolIndex &lt; poolCount; ++poolIndex)</div>
-<div class="line"><a name="l15823"></a><span class="lineno">15823</span>&#160;        {</div>
-<div class="line"><a name="l15824"></a><span class="lineno">15824</span>&#160;            <span class="keywordflow">if</span>(((1u &lt;&lt; m_Pools[poolIndex]-&gt;m_BlockVector.GetMemoryTypeIndex()) &amp; memoryTypeBits) != 0)</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;                VkResult localRes = m_Pools[poolIndex]-&gt;m_BlockVector.CheckCorruption();</div>
-<div class="line"><a name="l15827"></a><span class="lineno">15827</span>&#160;                <span class="keywordflow">switch</span>(localRes)</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;                <span class="keywordflow">case</span> VK_ERROR_FEATURE_NOT_PRESENT:</div>
-<div class="line"><a name="l15830"></a><span class="lineno">15830</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l15831"></a><span class="lineno">15831</span>&#160;                <span class="keywordflow">case</span> VK_SUCCESS:</div>
-<div class="line"><a name="l15832"></a><span class="lineno">15832</span>&#160;                    finalRes = VK_SUCCESS;</div>
-<div class="line"><a name="l15833"></a><span class="lineno">15833</span>&#160;                    <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l15834"></a><span class="lineno">15834</span>&#160;                <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l15835"></a><span class="lineno">15835</span>&#160;                    <span class="keywordflow">return</span> localRes;</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;            }</div>
-<div class="line"><a name="l15838"></a><span class="lineno">15838</span>&#160;        }</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; </div>
-<div class="line"><a name="l15841"></a><span class="lineno">15841</span>&#160;    <span class="keywordflow">return</span> finalRes;</div>
-<div class="line"><a name="l15842"></a><span class="lineno">15842</span>&#160;}</div>
-<div class="line"><a name="l15843"></a><span class="lineno">15843</span>&#160; </div>
-<div class="line"><a name="l15844"></a><span class="lineno">15844</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="l15845"></a><span class="lineno">15845</span>&#160;{</div>
-<div class="line"><a name="l15846"></a><span class="lineno">15846</span>&#160;    *pAllocation = m_AllocationObjectAllocator.Allocate();</div>
-<div class="line"><a name="l15847"></a><span class="lineno">15847</span>&#160;    (*pAllocation)-&gt;Ctor(VMA_FRAME_INDEX_LOST, <span class="keyword">false</span>);</div>
-<div class="line"><a name="l15848"></a><span class="lineno">15848</span>&#160;    (*pAllocation)-&gt;InitLost();</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; </div>
-<div class="line"><a name="l15851"></a><span class="lineno">15851</span>&#160;VkResult VmaAllocator_T::AllocateVulkanMemory(<span class="keyword">const</span> VkMemoryAllocateInfo* pAllocateInfo, VkDeviceMemory* pMemory)</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;    <span class="keyword">const</span> uint32_t heapIndex = MemoryTypeIndexToHeapIndex(pAllocateInfo-&gt;memoryTypeIndex);</div>
-<div class="line"><a name="l15854"></a><span class="lineno">15854</span>&#160; </div>
-<div class="line"><a name="l15855"></a><span class="lineno">15855</span>&#160;    <span class="comment">// HeapSizeLimit is in effect for this heap.</span></div>
-<div class="line"><a name="l15856"></a><span class="lineno">15856</span>&#160;    <span class="keywordflow">if</span>((m_HeapSizeLimitMask &amp; (1u &lt;&lt; heapIndex)) != 0)</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="keyword">const</span> VkDeviceSize heapSize = m_MemProps.memoryHeaps[heapIndex].size;</div>
-<div class="line"><a name="l15859"></a><span class="lineno">15859</span>&#160;        VkDeviceSize blockBytes = m_Budget.m_BlockBytes[heapIndex];</div>
-<div class="line"><a name="l15860"></a><span class="lineno">15860</span>&#160;        <span class="keywordflow">for</span>(;;)</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;            <span class="keyword">const</span> VkDeviceSize blockBytesAfterAllocation = blockBytes + pAllocateInfo-&gt;allocationSize;</div>
-<div class="line"><a name="l15863"></a><span class="lineno">15863</span>&#160;            <span class="keywordflow">if</span>(blockBytesAfterAllocation &gt; heapSize)</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;                <span class="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</div>
-<div class="line"><a name="l15866"></a><span class="lineno">15866</span>&#160;            }</div>
-<div class="line"><a name="l15867"></a><span class="lineno">15867</span>&#160;            <span class="keywordflow">if</span>(m_Budget.m_BlockBytes-&gt;compare_exchange_strong(blockBytes, blockBytesAfterAllocation))</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;                <span class="keywordflow">break</span>;</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;        }</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;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15874"></a><span class="lineno">15874</span>&#160;    {</div>
-<div class="line"><a name="l15875"></a><span class="lineno">15875</span>&#160;        m_Budget.m_BlockBytes[heapIndex] += pAllocateInfo-&gt;allocationSize;</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; </div>
-<div class="line"><a name="l15878"></a><span class="lineno">15878</span>&#160;    <span class="comment">// VULKAN CALL vkAllocateMemory.</span></div>
-<div class="line"><a name="l15879"></a><span class="lineno">15879</span>&#160;    VkResult res = (*m_VulkanFunctions.vkAllocateMemory)(m_hDevice, pAllocateInfo, GetAllocationCallbacks(), pMemory);</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;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</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="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l15884"></a><span class="lineno">15884</span>&#160;        ++m_Budget.m_OperationsSinceBudgetFetch;</div>
-<div class="line"><a name="l15885"></a><span class="lineno">15885</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l15720"></a><span class="lineno">15720</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="l15721"></a><span class="lineno">15721</span>&#160;{</div>
+<div class="line"><a name="l15722"></a><span class="lineno">15722</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="l15723"></a><span class="lineno">15723</span>&#160; </div>
+<div class="line"><a name="l15724"></a><span class="lineno">15724</span>&#160;    <a class="code" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> newCreateInfo = *pCreateInfo;</div>
+<div class="line"><a name="l15725"></a><span class="lineno">15725</span>&#160; </div>
+<div class="line"><a name="l15726"></a><span class="lineno">15726</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="l15727"></a><span class="lineno">15727</span>&#160;    {</div>
+<div class="line"><a name="l15728"></a><span class="lineno">15728</span>&#160;        newCreateInfo.<a class="code" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a> = SIZE_MAX;</div>
+<div class="line"><a name="l15729"></a><span class="lineno">15729</span>&#160;    }</div>
+<div class="line"><a name="l15730"></a><span class="lineno">15730</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="l15731"></a><span class="lineno">15731</span>&#160;    {</div>
+<div class="line"><a name="l15732"></a><span class="lineno">15732</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_INITIALIZATION_FAILED;</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; </div>
+<div class="line"><a name="l15735"></a><span class="lineno">15735</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="l15736"></a><span class="lineno">15736</span>&#160; </div>
+<div class="line"><a name="l15737"></a><span class="lineno">15737</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="l15738"></a><span class="lineno">15738</span>&#160; </div>
+<div class="line"><a name="l15739"></a><span class="lineno">15739</span>&#160;    VkResult res = (*pPool)-&gt;m_BlockVector.CreateMinBlocks();</div>
+<div class="line"><a name="l15740"></a><span class="lineno">15740</span>&#160;    <span class="keywordflow">if</span>(res != VK_SUCCESS)</div>
+<div class="line"><a name="l15741"></a><span class="lineno">15741</span>&#160;    {</div>
+<div class="line"><a name="l15742"></a><span class="lineno">15742</span>&#160;        vma_delete(<span class="keyword">this</span>, *pPool);</div>
+<div class="line"><a name="l15743"></a><span class="lineno">15743</span>&#160;        *pPool = VMA_NULL;</div>
+<div class="line"><a name="l15744"></a><span class="lineno">15744</span>&#160;        <span class="keywordflow">return</span> res;</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="comment">// Add to m_Pools.</span></div>
+<div class="line"><a name="l15748"></a><span class="lineno">15748</span>&#160;    {</div>
+<div class="line"><a name="l15749"></a><span class="lineno">15749</span>&#160;        VmaMutexLockWrite lock(m_PoolsMutex, m_UseMutex);</div>
+<div class="line"><a name="l15750"></a><span class="lineno">15750</span>&#160;        (*pPool)-&gt;SetId(m_NextPoolId++);</div>
+<div class="line"><a name="l15751"></a><span class="lineno">15751</span>&#160;        VmaVectorInsertSorted&lt;VmaPointerLess&gt;(m_Pools, *pPool);</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; </div>
+<div class="line"><a name="l15754"></a><span class="lineno">15754</span>&#160;    <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l15755"></a><span class="lineno">15755</span>&#160;}</div>
+<div class="line"><a name="l15756"></a><span class="lineno">15756</span>&#160; </div>
+<div class="line"><a name="l15757"></a><span class="lineno">15757</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="l15758"></a><span class="lineno">15758</span>&#160;{</div>
+<div class="line"><a name="l15759"></a><span class="lineno">15759</span>&#160;    <span class="comment">// Remove from m_Pools.</span></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;        VmaMutexLockWrite lock(m_PoolsMutex, m_UseMutex);</div>
+<div class="line"><a name="l15762"></a><span class="lineno">15762</span>&#160;        <span class="keywordtype">bool</span> success = VmaVectorRemoveSorted&lt;VmaPointerLess&gt;(m_Pools, pool);</div>
+<div class="line"><a name="l15763"></a><span class="lineno">15763</span>&#160;        VMA_ASSERT(success &amp;&amp; <span class="stringliteral">&quot;Pool not found in Allocator.&quot;</span>);</div>
+<div class="line"><a name="l15764"></a><span class="lineno">15764</span>&#160;    }</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;    vma_delete(<span class="keyword">this</span>, pool);</div>
+<div class="line"><a name="l15767"></a><span class="lineno">15767</span>&#160;}</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;<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="l15770"></a><span class="lineno">15770</span>&#160;{</div>
+<div class="line"><a name="l15771"></a><span class="lineno">15771</span>&#160;    pool-&gt;m_BlockVector.GetPoolStats(pPoolStats);</div>
+<div class="line"><a name="l15772"></a><span class="lineno">15772</span>&#160;}</div>
+<div class="line"><a name="l15773"></a><span class="lineno">15773</span>&#160; </div>
+<div class="line"><a name="l15774"></a><span class="lineno">15774</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::SetCurrentFrameIndex(uint32_t frameIndex)</div>
+<div class="line"><a name="l15775"></a><span class="lineno">15775</span>&#160;{</div>
+<div class="line"><a name="l15776"></a><span class="lineno">15776</span>&#160;    m_CurrentFrameIndex.store(frameIndex);</div>
+<div class="line"><a name="l15777"></a><span class="lineno">15777</span>&#160; </div>
+<div class="line"><a name="l15778"></a><span class="lineno">15778</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l15779"></a><span class="lineno">15779</span>&#160;    <span class="keywordflow">if</span>(m_UseExtMemoryBudget)</div>
+<div class="line"><a name="l15780"></a><span class="lineno">15780</span>&#160;    {</div>
+<div class="line"><a name="l15781"></a><span class="lineno">15781</span>&#160;        UpdateVulkanBudget();</div>
+<div class="line"><a name="l15782"></a><span class="lineno">15782</span>&#160;    }</div>
+<div class="line"><a name="l15783"></a><span class="lineno">15783</span>&#160;<span class="preprocessor">#endif // #if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l15784"></a><span class="lineno">15784</span>&#160;}</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;<span class="keywordtype">void</span> VmaAllocator_T::MakePoolAllocationsLost(</div>
+<div class="line"><a name="l15787"></a><span class="lineno">15787</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> hPool,</div>
+<div class="line"><a name="l15788"></a><span class="lineno">15788</span>&#160;    <span class="keywordtype">size_t</span>* pLostAllocationCount)</div>
+<div class="line"><a name="l15789"></a><span class="lineno">15789</span>&#160;{</div>
+<div class="line"><a name="l15790"></a><span class="lineno">15790</span>&#160;    hPool-&gt;m_BlockVector.MakePoolAllocationsLost(</div>
+<div class="line"><a name="l15791"></a><span class="lineno">15791</span>&#160;        m_CurrentFrameIndex.load(),</div>
+<div class="line"><a name="l15792"></a><span class="lineno">15792</span>&#160;        pLostAllocationCount);</div>
+<div class="line"><a name="l15793"></a><span class="lineno">15793</span>&#160;}</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;VkResult VmaAllocator_T::CheckPoolCorruption(<a class="code" href="struct_vma_pool.html">VmaPool</a> hPool)</div>
+<div class="line"><a name="l15796"></a><span class="lineno">15796</span>&#160;{</div>
+<div class="line"><a name="l15797"></a><span class="lineno">15797</span>&#160;    <span class="keywordflow">return</span> hPool-&gt;m_BlockVector.CheckCorruption();</div>
+<div class="line"><a name="l15798"></a><span class="lineno">15798</span>&#160;}</div>
+<div class="line"><a name="l15799"></a><span class="lineno">15799</span>&#160; </div>
+<div class="line"><a name="l15800"></a><span class="lineno">15800</span>&#160;VkResult VmaAllocator_T::CheckCorruption(uint32_t memoryTypeBits)</div>
+<div class="line"><a name="l15801"></a><span class="lineno">15801</span>&#160;{</div>
+<div class="line"><a name="l15802"></a><span class="lineno">15802</span>&#160;    VkResult finalRes = VK_ERROR_FEATURE_NOT_PRESENT;</div>
+<div class="line"><a name="l15803"></a><span class="lineno">15803</span>&#160; </div>
+<div class="line"><a name="l15804"></a><span class="lineno">15804</span>&#160;    <span class="comment">// Process default pools.</span></div>
+<div class="line"><a name="l15805"></a><span class="lineno">15805</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</div>
+<div class="line"><a name="l15806"></a><span class="lineno">15806</span>&#160;    {</div>
+<div class="line"><a name="l15807"></a><span class="lineno">15807</span>&#160;        <span class="keywordflow">if</span>(((1u &lt;&lt; memTypeIndex) &amp; memoryTypeBits) != 0)</div>
+<div class="line"><a name="l15808"></a><span class="lineno">15808</span>&#160;        {</div>
+<div class="line"><a name="l15809"></a><span class="lineno">15809</span>&#160;            VmaBlockVector* <span class="keyword">const</span> pBlockVector = m_pBlockVectors[memTypeIndex];</div>
+<div class="line"><a name="l15810"></a><span class="lineno">15810</span>&#160;            VMA_ASSERT(pBlockVector);</div>
+<div class="line"><a name="l15811"></a><span class="lineno">15811</span>&#160;            VkResult localRes = pBlockVector-&gt;CheckCorruption();</div>
+<div class="line"><a name="l15812"></a><span class="lineno">15812</span>&#160;            <span class="keywordflow">switch</span>(localRes)</div>
+<div class="line"><a name="l15813"></a><span class="lineno">15813</span>&#160;            {</div>
+<div class="line"><a name="l15814"></a><span class="lineno">15814</span>&#160;            <span class="keywordflow">case</span> VK_ERROR_FEATURE_NOT_PRESENT:</div>
+<div class="line"><a name="l15815"></a><span class="lineno">15815</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l15816"></a><span class="lineno">15816</span>&#160;            <span class="keywordflow">case</span> VK_SUCCESS:</div>
+<div class="line"><a name="l15817"></a><span class="lineno">15817</span>&#160;                finalRes = VK_SUCCESS;</div>
+<div class="line"><a name="l15818"></a><span class="lineno">15818</span>&#160;                <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l15819"></a><span class="lineno">15819</span>&#160;            <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l15820"></a><span class="lineno">15820</span>&#160;                <span class="keywordflow">return</span> localRes;</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;    }</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;    <span class="comment">// Process custom pools.</span></div>
+<div class="line"><a name="l15826"></a><span class="lineno">15826</span>&#160;    {</div>
+<div class="line"><a name="l15827"></a><span class="lineno">15827</span>&#160;        VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);</div>
+<div class="line"><a name="l15828"></a><span class="lineno">15828</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> poolIndex = 0, poolCount = m_Pools.size(); poolIndex &lt; poolCount; ++poolIndex)</div>
+<div class="line"><a name="l15829"></a><span class="lineno">15829</span>&#160;        {</div>
+<div class="line"><a name="l15830"></a><span class="lineno">15830</span>&#160;            <span class="keywordflow">if</span>(((1u &lt;&lt; m_Pools[poolIndex]-&gt;m_BlockVector.GetMemoryTypeIndex()) &amp; memoryTypeBits) != 0)</div>
+<div class="line"><a name="l15831"></a><span class="lineno">15831</span>&#160;            {</div>
+<div class="line"><a name="l15832"></a><span class="lineno">15832</span>&#160;                VkResult localRes = m_Pools[poolIndex]-&gt;m_BlockVector.CheckCorruption();</div>
+<div class="line"><a name="l15833"></a><span class="lineno">15833</span>&#160;                <span class="keywordflow">switch</span>(localRes)</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="keywordflow">case</span> VK_ERROR_FEATURE_NOT_PRESENT:</div>
+<div class="line"><a name="l15836"></a><span class="lineno">15836</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l15837"></a><span class="lineno">15837</span>&#160;                <span class="keywordflow">case</span> VK_SUCCESS:</div>
+<div class="line"><a name="l15838"></a><span class="lineno">15838</span>&#160;                    finalRes = VK_SUCCESS;</div>
+<div class="line"><a name="l15839"></a><span class="lineno">15839</span>&#160;                    <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l15840"></a><span class="lineno">15840</span>&#160;                <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l15841"></a><span class="lineno">15841</span>&#160;                    <span class="keywordflow">return</span> localRes;</div>
+<div class="line"><a name="l15842"></a><span class="lineno">15842</span>&#160;                }</div>
+<div class="line"><a name="l15843"></a><span class="lineno">15843</span>&#160;            }</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; </div>
+<div class="line"><a name="l15847"></a><span class="lineno">15847</span>&#160;    <span class="keywordflow">return</span> finalRes;</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; </div>
+<div class="line"><a name="l15850"></a><span class="lineno">15850</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="l15851"></a><span class="lineno">15851</span>&#160;{</div>
+<div class="line"><a name="l15852"></a><span class="lineno">15852</span>&#160;    *pAllocation = m_AllocationObjectAllocator.Allocate();</div>
+<div class="line"><a name="l15853"></a><span class="lineno">15853</span>&#160;    (*pAllocation)-&gt;Ctor(VMA_FRAME_INDEX_LOST, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l15854"></a><span class="lineno">15854</span>&#160;    (*pAllocation)-&gt;InitLost();</div>
+<div class="line"><a name="l15855"></a><span class="lineno">15855</span>&#160;}</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;VkResult VmaAllocator_T::AllocateVulkanMemory(<span class="keyword">const</span> VkMemoryAllocateInfo* pAllocateInfo, VkDeviceMemory* pMemory)</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="keyword">const</span> uint32_t heapIndex = MemoryTypeIndexToHeapIndex(pAllocateInfo-&gt;memoryTypeIndex);</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;    <span class="comment">// HeapSizeLimit is in effect for this heap.</span></div>
+<div class="line"><a name="l15862"></a><span class="lineno">15862</span>&#160;    <span class="keywordflow">if</span>((m_HeapSizeLimitMask &amp; (1u &lt;&lt; heapIndex)) != 0)</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;        <span class="keyword">const</span> VkDeviceSize heapSize = m_MemProps.memoryHeaps[heapIndex].size;</div>
+<div class="line"><a name="l15865"></a><span class="lineno">15865</span>&#160;        VkDeviceSize blockBytes = m_Budget.m_BlockBytes[heapIndex];</div>
+<div class="line"><a name="l15866"></a><span class="lineno">15866</span>&#160;        <span class="keywordflow">for</span>(;;)</div>
+<div class="line"><a name="l15867"></a><span class="lineno">15867</span>&#160;        {</div>
+<div class="line"><a name="l15868"></a><span class="lineno">15868</span>&#160;            <span class="keyword">const</span> VkDeviceSize blockBytesAfterAllocation = blockBytes + pAllocateInfo-&gt;allocationSize;</div>
+<div class="line"><a name="l15869"></a><span class="lineno">15869</span>&#160;            <span class="keywordflow">if</span>(blockBytesAfterAllocation &gt; heapSize)</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="keywordflow">return</span> VK_ERROR_OUT_OF_DEVICE_MEMORY;</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;            <span class="keywordflow">if</span>(m_Budget.m_BlockBytes[heapIndex].compare_exchange_strong(blockBytes, blockBytesAfterAllocation))</div>
+<div class="line"><a name="l15874"></a><span class="lineno">15874</span>&#160;            {</div>
+<div class="line"><a name="l15875"></a><span class="lineno">15875</span>&#160;                <span class="keywordflow">break</span>;</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;        }</div>
+<div class="line"><a name="l15878"></a><span class="lineno">15878</span>&#160;    }</div>
+<div class="line"><a name="l15879"></a><span class="lineno">15879</span>&#160;    <span class="keywordflow">else</span></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;        m_Budget.m_BlockBytes[heapIndex] += pAllocateInfo-&gt;allocationSize;</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; </div>
+<div class="line"><a name="l15884"></a><span class="lineno">15884</span>&#160;    <span class="comment">// VULKAN CALL vkAllocateMemory.</span></div>
+<div class="line"><a name="l15885"></a><span class="lineno">15885</span>&#160;    VkResult res = (*m_VulkanFunctions.vkAllocateMemory)(m_hDevice, pAllocateInfo, GetAllocationCallbacks(), pMemory);</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;        <span class="comment">// Informative callback.</span></div>
-<div class="line"><a name="l15888"></a><span class="lineno">15888</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="l15889"></a><span class="lineno">15889</span>&#160;        {</div>
-<div class="line"><a name="l15890"></a><span class="lineno">15890</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);</div>
-<div class="line"><a name="l15891"></a><span class="lineno">15891</span>&#160;        }</div>
-<div class="line"><a name="l15892"></a><span class="lineno">15892</span>&#160;    }</div>
-<div class="line"><a name="l15893"></a><span class="lineno">15893</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15894"></a><span class="lineno">15894</span>&#160;    {</div>
-<div class="line"><a name="l15895"></a><span class="lineno">15895</span>&#160;        m_Budget.m_BlockBytes[heapIndex] -= pAllocateInfo-&gt;allocationSize;</div>
-<div class="line"><a name="l15896"></a><span class="lineno">15896</span>&#160;    }</div>
-<div class="line"><a name="l15897"></a><span class="lineno">15897</span>&#160; </div>
-<div class="line"><a name="l15898"></a><span class="lineno">15898</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l15899"></a><span class="lineno">15899</span>&#160;}</div>
-<div class="line"><a name="l15900"></a><span class="lineno">15900</span>&#160; </div>
-<div class="line"><a name="l15901"></a><span class="lineno">15901</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::FreeVulkanMemory(uint32_t memoryType, VkDeviceSize size, VkDeviceMemory hMemory)</div>
-<div class="line"><a name="l15902"></a><span class="lineno">15902</span>&#160;{</div>
-<div class="line"><a name="l15903"></a><span class="lineno">15903</span>&#160;    <span class="comment">// Informative callback.</span></div>
-<div class="line"><a name="l15904"></a><span class="lineno">15904</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="l15905"></a><span class="lineno">15905</span>&#160;    {</div>
-<div class="line"><a name="l15906"></a><span class="lineno">15906</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);</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; </div>
-<div class="line"><a name="l15909"></a><span class="lineno">15909</span>&#160;    <span class="comment">// VULKAN CALL vkFreeMemory.</span></div>
-<div class="line"><a name="l15910"></a><span class="lineno">15910</span>&#160;    (*m_VulkanFunctions.vkFreeMemory)(m_hDevice, hMemory, GetAllocationCallbacks());</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;    m_Budget.m_BlockBytes[MemoryTypeIndexToHeapIndex(memoryType)] -= size;</div>
-<div class="line"><a name="l15913"></a><span class="lineno">15913</span>&#160;}</div>
+<div class="line"><a name="l15887"></a><span class="lineno">15887</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
+<div class="line"><a name="l15890"></a><span class="lineno">15890</span>&#160;        ++m_Budget.m_OperationsSinceBudgetFetch;</div>
+<div class="line"><a name="l15891"></a><span class="lineno">15891</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l15892"></a><span class="lineno">15892</span>&#160; </div>
+<div class="line"><a name="l15893"></a><span class="lineno">15893</span>&#160;        <span class="comment">// Informative callback.</span></div>
+<div class="line"><a name="l15894"></a><span class="lineno">15894</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="l15895"></a><span class="lineno">15895</span>&#160;        {</div>
+<div class="line"><a name="l15896"></a><span class="lineno">15896</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);</div>
+<div class="line"><a name="l15897"></a><span class="lineno">15897</span>&#160;        }</div>
+<div class="line"><a name="l15898"></a><span class="lineno">15898</span>&#160;    }</div>
+<div class="line"><a name="l15899"></a><span class="lineno">15899</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15900"></a><span class="lineno">15900</span>&#160;    {</div>
+<div class="line"><a name="l15901"></a><span class="lineno">15901</span>&#160;        m_Budget.m_BlockBytes[heapIndex] -= pAllocateInfo-&gt;allocationSize;</div>
+<div class="line"><a name="l15902"></a><span class="lineno">15902</span>&#160;    }</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;    <span class="keywordflow">return</span> res;</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; </div>
+<div class="line"><a name="l15907"></a><span class="lineno">15907</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::FreeVulkanMemory(uint32_t memoryType, VkDeviceSize size, VkDeviceMemory hMemory)</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;    <span class="comment">// Informative callback.</span></div>
+<div class="line"><a name="l15910"></a><span class="lineno">15910</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="l15911"></a><span class="lineno">15911</span>&#160;    {</div>
+<div class="line"><a name="l15912"></a><span class="lineno">15912</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);</div>
+<div class="line"><a name="l15913"></a><span class="lineno">15913</span>&#160;    }</div>
 <div class="line"><a name="l15914"></a><span class="lineno">15914</span>&#160; </div>
-<div class="line"><a name="l15915"></a><span class="lineno">15915</span>&#160;VkResult VmaAllocator_T::BindVulkanBuffer(</div>
-<div class="line"><a name="l15916"></a><span class="lineno">15916</span>&#160;    VkDeviceMemory memory,</div>
-<div class="line"><a name="l15917"></a><span class="lineno">15917</span>&#160;    VkDeviceSize memoryOffset,</div>
-<div class="line"><a name="l15918"></a><span class="lineno">15918</span>&#160;    VkBuffer buffer,</div>
-<div class="line"><a name="l15919"></a><span class="lineno">15919</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</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;    <span class="keywordflow">if</span>(pNext != VMA_NULL)</div>
-<div class="line"><a name="l15922"></a><span class="lineno">15922</span>&#160;    {</div>
-<div class="line"><a name="l15923"></a><span class="lineno">15923</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000 || VMA_BIND_MEMORY2</span></div>
-<div class="line"><a name="l15924"></a><span class="lineno">15924</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="l15925"></a><span class="lineno">15925</span>&#160;            m_VulkanFunctions.vkBindBufferMemory2KHR != VMA_NULL)</div>
-<div class="line"><a name="l15926"></a><span class="lineno">15926</span>&#160;        {</div>
-<div class="line"><a name="l15927"></a><span class="lineno">15927</span>&#160;            VkBindBufferMemoryInfoKHR bindBufferMemoryInfo = { VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR };</div>
-<div class="line"><a name="l15928"></a><span class="lineno">15928</span>&#160;            bindBufferMemoryInfo.pNext = pNext;</div>
-<div class="line"><a name="l15929"></a><span class="lineno">15929</span>&#160;            bindBufferMemoryInfo.buffer = buffer;</div>
-<div class="line"><a name="l15930"></a><span class="lineno">15930</span>&#160;            bindBufferMemoryInfo.memory = memory;</div>
-<div class="line"><a name="l15931"></a><span class="lineno">15931</span>&#160;            bindBufferMemoryInfo.memoryOffset = memoryOffset;</div>
-<div class="line"><a name="l15932"></a><span class="lineno">15932</span>&#160;            <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindBufferMemory2KHR)(m_hDevice, 1, &amp;bindBufferMemoryInfo);</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">else</span></div>
-<div class="line"><a name="l15935"></a><span class="lineno">15935</span>&#160;<span class="preprocessor">#endif // #if VMA_VULKAN_VERSION &gt;= 1001000 || VMA_BIND_MEMORY2</span></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;            <span class="keywordflow">return</span> VK_ERROR_EXTENSION_NOT_PRESENT;</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;    }</div>
-<div class="line"><a name="l15940"></a><span class="lineno">15940</span>&#160;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15941"></a><span class="lineno">15941</span>&#160;    {</div>
-<div class="line"><a name="l15942"></a><span class="lineno">15942</span>&#160;        <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindBufferMemory)(m_hDevice, buffer, memory, memoryOffset);</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; </div>
-<div class="line"><a name="l15946"></a><span class="lineno">15946</span>&#160;VkResult VmaAllocator_T::BindVulkanImage(</div>
-<div class="line"><a name="l15947"></a><span class="lineno">15947</span>&#160;    VkDeviceMemory memory,</div>
-<div class="line"><a name="l15948"></a><span class="lineno">15948</span>&#160;    VkDeviceSize memoryOffset,</div>
-<div class="line"><a name="l15949"></a><span class="lineno">15949</span>&#160;    VkImage image,</div>
-<div class="line"><a name="l15950"></a><span class="lineno">15950</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</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="keywordflow">if</span>(pNext != VMA_NULL)</div>
-<div class="line"><a name="l15953"></a><span class="lineno">15953</span>&#160;    {</div>
-<div class="line"><a name="l15954"></a><span class="lineno">15954</span>&#160;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000 || VMA_BIND_MEMORY2</span></div>
-<div class="line"><a name="l15955"></a><span class="lineno">15955</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="l15956"></a><span class="lineno">15956</span>&#160;            m_VulkanFunctions.vkBindImageMemory2KHR != VMA_NULL)</div>
-<div class="line"><a name="l15957"></a><span class="lineno">15957</span>&#160;        {</div>
-<div class="line"><a name="l15958"></a><span class="lineno">15958</span>&#160;            VkBindImageMemoryInfoKHR bindBufferMemoryInfo = { VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR };</div>
-<div class="line"><a name="l15959"></a><span class="lineno">15959</span>&#160;            bindBufferMemoryInfo.pNext = pNext;</div>
-<div class="line"><a name="l15960"></a><span class="lineno">15960</span>&#160;            bindBufferMemoryInfo.image = image;</div>
-<div class="line"><a name="l15961"></a><span class="lineno">15961</span>&#160;            bindBufferMemoryInfo.memory = memory;</div>
-<div class="line"><a name="l15962"></a><span class="lineno">15962</span>&#160;            bindBufferMemoryInfo.memoryOffset = memoryOffset;</div>
-<div class="line"><a name="l15963"></a><span class="lineno">15963</span>&#160;            <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindImageMemory2KHR)(m_hDevice, 1, &amp;bindBufferMemoryInfo);</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;        <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15966"></a><span class="lineno">15966</span>&#160;<span class="preprocessor">#endif // #if VMA_BIND_MEMORY2</span></div>
-<div class="line"><a name="l15967"></a><span class="lineno">15967</span>&#160;        {</div>
-<div class="line"><a name="l15968"></a><span class="lineno">15968</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_EXTENSION_NOT_PRESENT;</div>
-<div class="line"><a name="l15969"></a><span class="lineno">15969</span>&#160;        }</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;    <span class="keywordflow">else</span></div>
-<div class="line"><a name="l15972"></a><span class="lineno">15972</span>&#160;    {</div>
-<div class="line"><a name="l15973"></a><span class="lineno">15973</span>&#160;        <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindImageMemory)(m_hDevice, image, memory, memoryOffset);</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;}</div>
-<div class="line"><a name="l15976"></a><span class="lineno">15976</span>&#160; </div>
-<div class="line"><a name="l15977"></a><span class="lineno">15977</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="l15978"></a><span class="lineno">15978</span>&#160;{</div>
-<div class="line"><a name="l15979"></a><span class="lineno">15979</span>&#160;    <span class="keywordflow">if</span>(hAllocation-&gt;CanBecomeLost())</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;        <span class="keywordflow">return</span> VK_ERROR_MEMORY_MAP_FAILED;</div>
-<div class="line"><a name="l15982"></a><span class="lineno">15982</span>&#160;    }</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;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</div>
-<div class="line"><a name="l15985"></a><span class="lineno">15985</span>&#160;    {</div>
-<div class="line"><a name="l15986"></a><span class="lineno">15986</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</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;            VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = hAllocation-&gt;GetBlock();</div>
-<div class="line"><a name="l15989"></a><span class="lineno">15989</span>&#160;            <span class="keywordtype">char</span> *pBytes = VMA_NULL;</div>
-<div class="line"><a name="l15990"></a><span class="lineno">15990</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="l15991"></a><span class="lineno">15991</span>&#160;            <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;                *ppData = pBytes + (ptrdiff_t)hAllocation-&gt;GetOffset();</div>
-<div class="line"><a name="l15994"></a><span class="lineno">15994</span>&#160;                hAllocation-&gt;BlockAllocMap();</div>
-<div class="line"><a name="l15995"></a><span class="lineno">15995</span>&#160;            }</div>
-<div class="line"><a name="l15996"></a><span class="lineno">15996</span>&#160;            <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l15997"></a><span class="lineno">15997</span>&#160;        }</div>
-<div class="line"><a name="l15998"></a><span class="lineno">15998</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
-<div class="line"><a name="l15999"></a><span class="lineno">15999</span>&#160;        <span class="keywordflow">return</span> hAllocation-&gt;DedicatedAllocMap(<span class="keyword">this</span>, ppData);</div>
-<div class="line"><a name="l16000"></a><span class="lineno">16000</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l16001"></a><span class="lineno">16001</span>&#160;        VMA_ASSERT(0);</div>
-<div class="line"><a name="l16002"></a><span class="lineno">16002</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_MEMORY_MAP_FAILED;</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;}</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> VmaAllocator_T::Unmap(<a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation)</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="keywordflow">switch</span>(hAllocation-&gt;GetType())</div>
-<div class="line"><a name="l16009"></a><span class="lineno">16009</span>&#160;    {</div>
-<div class="line"><a name="l16010"></a><span class="lineno">16010</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
-<div class="line"><a name="l16011"></a><span class="lineno">16011</span>&#160;        {</div>
-<div class="line"><a name="l16012"></a><span class="lineno">16012</span>&#160;            VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = hAllocation-&gt;GetBlock();</div>
-<div class="line"><a name="l16013"></a><span class="lineno">16013</span>&#160;            hAllocation-&gt;BlockAllocUnmap();</div>
-<div class="line"><a name="l16014"></a><span class="lineno">16014</span>&#160;            pBlock-&gt;Unmap(<span class="keyword">this</span>, 1);</div>
-<div class="line"><a name="l16015"></a><span class="lineno">16015</span>&#160;        }</div>
-<div class="line"><a name="l16016"></a><span class="lineno">16016</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16017"></a><span class="lineno">16017</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
-<div class="line"><a name="l16018"></a><span class="lineno">16018</span>&#160;        hAllocation-&gt;DedicatedAllocUnmap(<span class="keyword">this</span>);</div>
-<div class="line"><a name="l16019"></a><span class="lineno">16019</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16020"></a><span class="lineno">16020</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l16021"></a><span class="lineno">16021</span>&#160;        VMA_ASSERT(0);</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;}</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;VkResult VmaAllocator_T::BindBufferMemory(</div>
-<div class="line"><a name="l16026"></a><span class="lineno">16026</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
-<div class="line"><a name="l16027"></a><span class="lineno">16027</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
-<div class="line"><a name="l16028"></a><span class="lineno">16028</span>&#160;    VkBuffer hBuffer,</div>
-<div class="line"><a name="l16029"></a><span class="lineno">16029</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</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;    VkResult res = VK_SUCCESS;</div>
-<div class="line"><a name="l16032"></a><span class="lineno">16032</span>&#160;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</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;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
-<div class="line"><a name="l16035"></a><span class="lineno">16035</span>&#160;        res = BindVulkanBuffer(hAllocation-&gt;GetMemory(), allocationLocalOffset, hBuffer, pNext);</div>
-<div class="line"><a name="l16036"></a><span class="lineno">16036</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16037"></a><span class="lineno">16037</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</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;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = hAllocation-&gt;GetBlock();</div>
-<div class="line"><a name="l16040"></a><span class="lineno">16040</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="l16041"></a><span class="lineno">16041</span>&#160;        res = pBlock-&gt;BindBufferMemory(<span class="keyword">this</span>, hAllocation, allocationLocalOffset, hBuffer, pNext);</div>
+<div class="line"><a name="l15915"></a><span class="lineno">15915</span>&#160;    <span class="comment">// VULKAN CALL vkFreeMemory.</span></div>
+<div class="line"><a name="l15916"></a><span class="lineno">15916</span>&#160;    (*m_VulkanFunctions.vkFreeMemory)(m_hDevice, hMemory, GetAllocationCallbacks());</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;    m_Budget.m_BlockBytes[MemoryTypeIndexToHeapIndex(memoryType)] -= size;</div>
+<div class="line"><a name="l15919"></a><span class="lineno">15919</span>&#160;}</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;VkResult VmaAllocator_T::BindVulkanBuffer(</div>
+<div class="line"><a name="l15922"></a><span class="lineno">15922</span>&#160;    VkDeviceMemory memory,</div>
+<div class="line"><a name="l15923"></a><span class="lineno">15923</span>&#160;    VkDeviceSize memoryOffset,</div>
+<div class="line"><a name="l15924"></a><span class="lineno">15924</span>&#160;    VkBuffer buffer,</div>
+<div class="line"><a name="l15925"></a><span class="lineno">15925</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
+<div class="line"><a name="l15926"></a><span class="lineno">15926</span>&#160;{</div>
+<div class="line"><a name="l15927"></a><span class="lineno">15927</span>&#160;    <span class="keywordflow">if</span>(pNext != VMA_NULL)</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;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000 || VMA_BIND_MEMORY2</span></div>
+<div class="line"><a name="l15930"></a><span class="lineno">15930</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="l15931"></a><span class="lineno">15931</span>&#160;            m_VulkanFunctions.vkBindBufferMemory2KHR != VMA_NULL)</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;            VkBindBufferMemoryInfoKHR bindBufferMemoryInfo = { VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR };</div>
+<div class="line"><a name="l15934"></a><span class="lineno">15934</span>&#160;            bindBufferMemoryInfo.pNext = pNext;</div>
+<div class="line"><a name="l15935"></a><span class="lineno">15935</span>&#160;            bindBufferMemoryInfo.buffer = buffer;</div>
+<div class="line"><a name="l15936"></a><span class="lineno">15936</span>&#160;            bindBufferMemoryInfo.memory = memory;</div>
+<div class="line"><a name="l15937"></a><span class="lineno">15937</span>&#160;            bindBufferMemoryInfo.memoryOffset = memoryOffset;</div>
+<div class="line"><a name="l15938"></a><span class="lineno">15938</span>&#160;            <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindBufferMemory2KHR)(m_hDevice, 1, &amp;bindBufferMemoryInfo);</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="keywordflow">else</span></div>
+<div class="line"><a name="l15941"></a><span class="lineno">15941</span>&#160;<span class="preprocessor">#endif // #if VMA_VULKAN_VERSION &gt;= 1001000 || VMA_BIND_MEMORY2</span></div>
+<div class="line"><a name="l15942"></a><span class="lineno">15942</span>&#160;        {</div>
+<div class="line"><a name="l15943"></a><span class="lineno">15943</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_EXTENSION_NOT_PRESENT;</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;        <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindBufferMemory)(m_hDevice, buffer, memory, memoryOffset);</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;VkResult VmaAllocator_T::BindVulkanImage(</div>
+<div class="line"><a name="l15953"></a><span class="lineno">15953</span>&#160;    VkDeviceMemory memory,</div>
+<div class="line"><a name="l15954"></a><span class="lineno">15954</span>&#160;    VkDeviceSize memoryOffset,</div>
+<div class="line"><a name="l15955"></a><span class="lineno">15955</span>&#160;    VkImage image,</div>
+<div class="line"><a name="l15956"></a><span class="lineno">15956</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
+<div class="line"><a name="l15957"></a><span class="lineno">15957</span>&#160;{</div>
+<div class="line"><a name="l15958"></a><span class="lineno">15958</span>&#160;    <span class="keywordflow">if</span>(pNext != VMA_NULL)</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;<span class="preprocessor">#if VMA_VULKAN_VERSION &gt;= 1001000 || VMA_BIND_MEMORY2</span></div>
+<div class="line"><a name="l15961"></a><span class="lineno">15961</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="l15962"></a><span class="lineno">15962</span>&#160;            m_VulkanFunctions.vkBindImageMemory2KHR != VMA_NULL)</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;            VkBindImageMemoryInfoKHR bindBufferMemoryInfo = { VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR };</div>
+<div class="line"><a name="l15965"></a><span class="lineno">15965</span>&#160;            bindBufferMemoryInfo.pNext = pNext;</div>
+<div class="line"><a name="l15966"></a><span class="lineno">15966</span>&#160;            bindBufferMemoryInfo.image = image;</div>
+<div class="line"><a name="l15967"></a><span class="lineno">15967</span>&#160;            bindBufferMemoryInfo.memory = memory;</div>
+<div class="line"><a name="l15968"></a><span class="lineno">15968</span>&#160;            bindBufferMemoryInfo.memoryOffset = memoryOffset;</div>
+<div class="line"><a name="l15969"></a><span class="lineno">15969</span>&#160;            <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindImageMemory2KHR)(m_hDevice, 1, &amp;bindBufferMemoryInfo);</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;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l15972"></a><span class="lineno">15972</span>&#160;<span class="preprocessor">#endif // #if VMA_BIND_MEMORY2</span></div>
+<div class="line"><a name="l15973"></a><span class="lineno">15973</span>&#160;        {</div>
+<div class="line"><a name="l15974"></a><span class="lineno">15974</span>&#160;            <span class="keywordflow">return</span> VK_ERROR_EXTENSION_NOT_PRESENT;</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;    }</div>
+<div class="line"><a name="l15977"></a><span class="lineno">15977</span>&#160;    <span class="keywordflow">else</span></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;        <span class="keywordflow">return</span> (*m_VulkanFunctions.vkBindImageMemory)(m_hDevice, image, memory, memoryOffset);</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;}</div>
+<div class="line"><a name="l15982"></a><span class="lineno">15982</span>&#160; </div>
+<div class="line"><a name="l15983"></a><span class="lineno">15983</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="l15984"></a><span class="lineno">15984</span>&#160;{</div>
+<div class="line"><a name="l15985"></a><span class="lineno">15985</span>&#160;    <span class="keywordflow">if</span>(hAllocation-&gt;CanBecomeLost())</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;        <span class="keywordflow">return</span> VK_ERROR_MEMORY_MAP_FAILED;</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; </div>
+<div class="line"><a name="l15990"></a><span class="lineno">15990</span>&#160;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</div>
+<div class="line"><a name="l15991"></a><span class="lineno">15991</span>&#160;    {</div>
+<div class="line"><a name="l15992"></a><span class="lineno">15992</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</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;            VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = hAllocation-&gt;GetBlock();</div>
+<div class="line"><a name="l15995"></a><span class="lineno">15995</span>&#160;            <span class="keywordtype">char</span> *pBytes = VMA_NULL;</div>
+<div class="line"><a name="l15996"></a><span class="lineno">15996</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="l15997"></a><span class="lineno">15997</span>&#160;            <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
+<div class="line"><a name="l15998"></a><span class="lineno">15998</span>&#160;            {</div>
+<div class="line"><a name="l15999"></a><span class="lineno">15999</span>&#160;                *ppData = pBytes + (ptrdiff_t)hAllocation-&gt;GetOffset();</div>
+<div class="line"><a name="l16000"></a><span class="lineno">16000</span>&#160;                hAllocation-&gt;BlockAllocMap();</div>
+<div class="line"><a name="l16001"></a><span class="lineno">16001</span>&#160;            }</div>
+<div class="line"><a name="l16002"></a><span class="lineno">16002</span>&#160;            <span class="keywordflow">return</span> res;</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;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
+<div class="line"><a name="l16005"></a><span class="lineno">16005</span>&#160;        <span class="keywordflow">return</span> hAllocation-&gt;DedicatedAllocMap(<span class="keyword">this</span>, ppData);</div>
+<div class="line"><a name="l16006"></a><span class="lineno">16006</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l16007"></a><span class="lineno">16007</span>&#160;        VMA_ASSERT(0);</div>
+<div class="line"><a name="l16008"></a><span class="lineno">16008</span>&#160;        <span class="keywordflow">return</span> VK_ERROR_MEMORY_MAP_FAILED;</div>
+<div class="line"><a name="l16009"></a><span class="lineno">16009</span>&#160;    }</div>
+<div class="line"><a name="l16010"></a><span class="lineno">16010</span>&#160;}</div>
+<div class="line"><a name="l16011"></a><span class="lineno">16011</span>&#160; </div>
+<div class="line"><a name="l16012"></a><span class="lineno">16012</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="l16013"></a><span class="lineno">16013</span>&#160;{</div>
+<div class="line"><a name="l16014"></a><span class="lineno">16014</span>&#160;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</div>
+<div class="line"><a name="l16015"></a><span class="lineno">16015</span>&#160;    {</div>
+<div class="line"><a name="l16016"></a><span class="lineno">16016</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
+<div class="line"><a name="l16017"></a><span class="lineno">16017</span>&#160;        {</div>
+<div class="line"><a name="l16018"></a><span class="lineno">16018</span>&#160;            VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = hAllocation-&gt;GetBlock();</div>
+<div class="line"><a name="l16019"></a><span class="lineno">16019</span>&#160;            hAllocation-&gt;BlockAllocUnmap();</div>
+<div class="line"><a name="l16020"></a><span class="lineno">16020</span>&#160;            pBlock-&gt;Unmap(<span class="keyword">this</span>, 1);</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="keywordflow">break</span>;</div>
+<div class="line"><a name="l16023"></a><span class="lineno">16023</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
+<div class="line"><a name="l16024"></a><span class="lineno">16024</span>&#160;        hAllocation-&gt;DedicatedAllocUnmap(<span class="keyword">this</span>);</div>
+<div class="line"><a name="l16025"></a><span class="lineno">16025</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l16026"></a><span class="lineno">16026</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l16027"></a><span class="lineno">16027</span>&#160;        VMA_ASSERT(0);</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;}</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;VkResult VmaAllocator_T::BindBufferMemory(</div>
+<div class="line"><a name="l16032"></a><span class="lineno">16032</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
+<div class="line"><a name="l16033"></a><span class="lineno">16033</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
+<div class="line"><a name="l16034"></a><span class="lineno">16034</span>&#160;    VkBuffer hBuffer,</div>
+<div class="line"><a name="l16035"></a><span class="lineno">16035</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</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;    VkResult res = VK_SUCCESS;</div>
+<div class="line"><a name="l16038"></a><span class="lineno">16038</span>&#160;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</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">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
+<div class="line"><a name="l16041"></a><span class="lineno">16041</span>&#160;        res = BindVulkanBuffer(hAllocation-&gt;GetMemory(), allocationLocalOffset, hBuffer, pNext);</div>
 <div class="line"><a name="l16042"></a><span class="lineno">16042</span>&#160;        <span class="keywordflow">break</span>;</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;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l16045"></a><span class="lineno">16045</span>&#160;        VMA_ASSERT(0);</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="keywordflow">return</span> res;</div>
-<div class="line"><a name="l16048"></a><span class="lineno">16048</span>&#160;}</div>
-<div class="line"><a name="l16049"></a><span class="lineno">16049</span>&#160; </div>
-<div class="line"><a name="l16050"></a><span class="lineno">16050</span>&#160;VkResult VmaAllocator_T::BindImageMemory(</div>
-<div class="line"><a name="l16051"></a><span class="lineno">16051</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
-<div class="line"><a name="l16052"></a><span class="lineno">16052</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
-<div class="line"><a name="l16053"></a><span class="lineno">16053</span>&#160;    VkImage hImage,</div>
-<div class="line"><a name="l16054"></a><span class="lineno">16054</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</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;    VkResult res = VK_SUCCESS;</div>
-<div class="line"><a name="l16057"></a><span class="lineno">16057</span>&#160;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</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;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
-<div class="line"><a name="l16060"></a><span class="lineno">16060</span>&#160;        res = BindVulkanImage(hAllocation-&gt;GetMemory(), allocationLocalOffset, hImage, pNext);</div>
-<div class="line"><a name="l16061"></a><span class="lineno">16061</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16062"></a><span class="lineno">16062</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</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;        VmaDeviceMemoryBlock* pBlock = hAllocation-&gt;GetBlock();</div>
-<div class="line"><a name="l16065"></a><span class="lineno">16065</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="l16066"></a><span class="lineno">16066</span>&#160;        res = pBlock-&gt;BindImageMemory(<span class="keyword">this</span>, hAllocation, allocationLocalOffset, hImage, pNext);</div>
+<div class="line"><a name="l16043"></a><span class="lineno">16043</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</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;        VmaDeviceMemoryBlock* <span class="keyword">const</span> pBlock = hAllocation-&gt;GetBlock();</div>
+<div class="line"><a name="l16046"></a><span class="lineno">16046</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="l16047"></a><span class="lineno">16047</span>&#160;        res = pBlock-&gt;BindBufferMemory(<span class="keyword">this</span>, hAllocation, allocationLocalOffset, hBuffer, pNext);</div>
+<div class="line"><a name="l16048"></a><span class="lineno">16048</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l16049"></a><span class="lineno">16049</span>&#160;    }</div>
+<div class="line"><a name="l16050"></a><span class="lineno">16050</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l16051"></a><span class="lineno">16051</span>&#160;        VMA_ASSERT(0);</div>
+<div class="line"><a name="l16052"></a><span class="lineno">16052</span>&#160;    }</div>
+<div class="line"><a name="l16053"></a><span class="lineno">16053</span>&#160;    <span class="keywordflow">return</span> res;</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;VkResult VmaAllocator_T::BindImageMemory(</div>
+<div class="line"><a name="l16057"></a><span class="lineno">16057</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
+<div class="line"><a name="l16058"></a><span class="lineno">16058</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
+<div class="line"><a name="l16059"></a><span class="lineno">16059</span>&#160;    VkImage hImage,</div>
+<div class="line"><a name="l16060"></a><span class="lineno">16060</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</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;    VkResult res = VK_SUCCESS;</div>
+<div class="line"><a name="l16063"></a><span class="lineno">16063</span>&#160;    <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</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;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
+<div class="line"><a name="l16066"></a><span class="lineno">16066</span>&#160;        res = BindVulkanImage(hAllocation-&gt;GetMemory(), allocationLocalOffset, hImage, pNext);</div>
 <div class="line"><a name="l16067"></a><span class="lineno">16067</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16068"></a><span class="lineno">16068</span>&#160;    }</div>
-<div class="line"><a name="l16069"></a><span class="lineno">16069</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l16070"></a><span class="lineno">16070</span>&#160;        VMA_ASSERT(0);</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;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l16073"></a><span class="lineno">16073</span>&#160;}</div>
-<div class="line"><a name="l16074"></a><span class="lineno">16074</span>&#160; </div>
-<div class="line"><a name="l16075"></a><span class="lineno">16075</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::FlushOrInvalidateAllocation(</div>
-<div class="line"><a name="l16076"></a><span class="lineno">16076</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
-<div class="line"><a name="l16077"></a><span class="lineno">16077</span>&#160;    VkDeviceSize offset, VkDeviceSize size,</div>
-<div class="line"><a name="l16078"></a><span class="lineno">16078</span>&#160;    VMA_CACHE_OPERATION op)</div>
-<div class="line"><a name="l16079"></a><span class="lineno">16079</span>&#160;{</div>
-<div class="line"><a name="l16080"></a><span class="lineno">16080</span>&#160;    <span class="keyword">const</span> uint32_t memTypeIndex = hAllocation-&gt;GetMemoryTypeIndex();</div>
-<div class="line"><a name="l16081"></a><span class="lineno">16081</span>&#160;    <span class="keywordflow">if</span>(size &gt; 0 &amp;&amp; IsMemoryTypeNonCoherent(memTypeIndex))</div>
-<div class="line"><a name="l16082"></a><span class="lineno">16082</span>&#160;    {</div>
-<div class="line"><a name="l16083"></a><span class="lineno">16083</span>&#160;        <span class="keyword">const</span> VkDeviceSize allocationSize = hAllocation-&gt;GetSize();</div>
-<div class="line"><a name="l16084"></a><span class="lineno">16084</span>&#160;        VMA_ASSERT(offset &lt;= allocationSize);</div>
-<div class="line"><a name="l16085"></a><span class="lineno">16085</span>&#160; </div>
-<div class="line"><a name="l16086"></a><span class="lineno">16086</span>&#160;        <span class="keyword">const</span> VkDeviceSize nonCoherentAtomSize = m_PhysicalDeviceProperties.limits.nonCoherentAtomSize;</div>
-<div class="line"><a name="l16087"></a><span class="lineno">16087</span>&#160; </div>
-<div class="line"><a name="l16088"></a><span class="lineno">16088</span>&#160;        VkMappedMemoryRange memRange = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE };</div>
-<div class="line"><a name="l16089"></a><span class="lineno">16089</span>&#160;        memRange.memory = hAllocation-&gt;GetMemory();</div>
-<div class="line"><a name="l16090"></a><span class="lineno">16090</span>&#160;        </div>
-<div class="line"><a name="l16091"></a><span class="lineno">16091</span>&#160;        <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</div>
-<div class="line"><a name="l16092"></a><span class="lineno">16092</span>&#160;        {</div>
-<div class="line"><a name="l16093"></a><span class="lineno">16093</span>&#160;        <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
-<div class="line"><a name="l16094"></a><span class="lineno">16094</span>&#160;            memRange.offset = VmaAlignDown(offset, nonCoherentAtomSize);</div>
-<div class="line"><a name="l16095"></a><span class="lineno">16095</span>&#160;            <span class="keywordflow">if</span>(size == VK_WHOLE_SIZE)</div>
-<div class="line"><a name="l16096"></a><span class="lineno">16096</span>&#160;            {</div>
-<div class="line"><a name="l16097"></a><span class="lineno">16097</span>&#160;                memRange.size = allocationSize - memRange.offset;</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">else</span></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;                VMA_ASSERT(offset + size &lt;= allocationSize);</div>
-<div class="line"><a name="l16102"></a><span class="lineno">16102</span>&#160;                memRange.size = VMA_MIN(</div>
-<div class="line"><a name="l16103"></a><span class="lineno">16103</span>&#160;                    VmaAlignUp(size + (offset - memRange.offset), nonCoherentAtomSize),</div>
-<div class="line"><a name="l16104"></a><span class="lineno">16104</span>&#160;                    allocationSize - memRange.offset);</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="keywordflow">break</span>;</div>
-<div class="line"><a name="l16107"></a><span class="lineno">16107</span>&#160; </div>
-<div class="line"><a name="l16108"></a><span class="lineno">16108</span>&#160;        <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</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;            <span class="comment">// 1. Still within this allocation.</span></div>
-<div class="line"><a name="l16111"></a><span class="lineno">16111</span>&#160;            memRange.offset = VmaAlignDown(offset, nonCoherentAtomSize);</div>
-<div class="line"><a name="l16112"></a><span class="lineno">16112</span>&#160;            <span class="keywordflow">if</span>(size == VK_WHOLE_SIZE)</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;                size = allocationSize - offset;</div>
-<div class="line"><a name="l16115"></a><span class="lineno">16115</span>&#160;            }</div>
-<div class="line"><a name="l16116"></a><span class="lineno">16116</span>&#160;            <span class="keywordflow">else</span></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(offset + size &lt;= allocationSize);</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;            memRange.size = VmaAlignUp(size + (offset - memRange.offset), nonCoherentAtomSize);</div>
-<div class="line"><a name="l16121"></a><span class="lineno">16121</span>&#160; </div>
-<div class="line"><a name="l16122"></a><span class="lineno">16122</span>&#160;            <span class="comment">// 2. Adjust to whole block.</span></div>
-<div class="line"><a name="l16123"></a><span class="lineno">16123</span>&#160;            <span class="keyword">const</span> VkDeviceSize allocationOffset = hAllocation-&gt;GetOffset();</div>
-<div class="line"><a name="l16124"></a><span class="lineno">16124</span>&#160;            VMA_ASSERT(allocationOffset % nonCoherentAtomSize == 0);</div>
-<div class="line"><a name="l16125"></a><span class="lineno">16125</span>&#160;            <span class="keyword">const</span> VkDeviceSize blockSize = hAllocation-&gt;GetBlock()-&gt;m_pMetadata-&gt;GetSize();</div>
-<div class="line"><a name="l16126"></a><span class="lineno">16126</span>&#160;            memRange.offset += allocationOffset;</div>
-<div class="line"><a name="l16127"></a><span class="lineno">16127</span>&#160;            memRange.size = VMA_MIN(memRange.size, blockSize - memRange.offset);</div>
-<div class="line"><a name="l16128"></a><span class="lineno">16128</span>&#160;            </div>
-<div class="line"><a name="l16129"></a><span class="lineno">16129</span>&#160;            <span class="keywordflow">break</span>;</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;        </div>
-<div class="line"><a name="l16132"></a><span class="lineno">16132</span>&#160;        <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l16133"></a><span class="lineno">16133</span>&#160;            VMA_ASSERT(0);</div>
-<div class="line"><a name="l16134"></a><span class="lineno">16134</span>&#160;        }</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;        <span class="keywordflow">switch</span>(op)</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="keywordflow">case</span> VMA_CACHE_FLUSH:</div>
-<div class="line"><a name="l16139"></a><span class="lineno">16139</span>&#160;            (*GetVulkanFunctions().vkFlushMappedMemoryRanges)(m_hDevice, 1, &amp;memRange);</div>
-<div class="line"><a name="l16140"></a><span class="lineno">16140</span>&#160;            <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16141"></a><span class="lineno">16141</span>&#160;        <span class="keywordflow">case</span> VMA_CACHE_INVALIDATE:</div>
-<div class="line"><a name="l16142"></a><span class="lineno">16142</span>&#160;            (*GetVulkanFunctions().vkInvalidateMappedMemoryRanges)(m_hDevice, 1, &amp;memRange);</div>
-<div class="line"><a name="l16143"></a><span class="lineno">16143</span>&#160;            <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16144"></a><span class="lineno">16144</span>&#160;        <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l16145"></a><span class="lineno">16145</span>&#160;            VMA_ASSERT(0);</div>
-<div class="line"><a name="l16146"></a><span class="lineno">16146</span>&#160;        }</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;    <span class="comment">// else: Just ignore this call.</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; </div>
-<div class="line"><a name="l16151"></a><span class="lineno">16151</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="l16152"></a><span class="lineno">16152</span>&#160;{</div>
-<div class="line"><a name="l16153"></a><span class="lineno">16153</span>&#160;    VMA_ASSERT(allocation &amp;&amp; allocation-&gt;GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED);</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;    <span class="keyword">const</span> uint32_t memTypeIndex = allocation-&gt;GetMemoryTypeIndex();</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;        VmaMutexLockWrite lock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
-<div class="line"><a name="l16158"></a><span class="lineno">16158</span>&#160;        AllocationVectorType* <span class="keyword">const</span> pDedicatedAllocations = m_pDedicatedAllocations[memTypeIndex];</div>
-<div class="line"><a name="l16159"></a><span class="lineno">16159</span>&#160;        VMA_ASSERT(pDedicatedAllocations);</div>
-<div class="line"><a name="l16160"></a><span class="lineno">16160</span>&#160;        <span class="keywordtype">bool</span> success = VmaVectorRemoveSorted&lt;VmaPointerLess&gt;(*pDedicatedAllocations, allocation);</div>
-<div class="line"><a name="l16161"></a><span class="lineno">16161</span>&#160;        VMA_ASSERT(success);</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; </div>
-<div class="line"><a name="l16164"></a><span class="lineno">16164</span>&#160;    VkDeviceMemory hMemory = allocation-&gt;GetMemory();</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="comment">/*</span></div>
-<div class="line"><a name="l16167"></a><span class="lineno">16167</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="l16168"></a><span class="lineno">16168</span>&#160;<span class="comment">    before vkFreeMemory.</span></div>
-<div class="line"><a name="l16169"></a><span class="lineno">16169</span>&#160;<span class="comment"></span> </div>
-<div class="line"><a name="l16170"></a><span class="lineno">16170</span>&#160;<span class="comment">    if(allocation-&gt;GetMappedData() != VMA_NULL)</span></div>
-<div class="line"><a name="l16171"></a><span class="lineno">16171</span>&#160;<span class="comment">    {</span></div>
-<div class="line"><a name="l16172"></a><span class="lineno">16172</span>&#160;<span class="comment">        (*m_VulkanFunctions.vkUnmapMemory)(m_hDevice, hMemory);</span></div>
-<div class="line"><a name="l16173"></a><span class="lineno">16173</span>&#160;<span class="comment">    }</span></div>
-<div class="line"><a name="l16174"></a><span class="lineno">16174</span>&#160;<span class="comment">    */</span></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;    FreeVulkanMemory(memTypeIndex, allocation-&gt;GetSize(), hMemory);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Freed DedicatedMemory MemoryTypeIndex=%u&quot;</span>, memTypeIndex);</div>
-<div class="line"><a name="l16179"></a><span class="lineno">16179</span>&#160;}</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;uint32_t VmaAllocator_T::CalculateGpuDefragmentationMemoryTypeBits()<span class="keyword"> const</span></div>
-<div class="line"><a name="l16182"></a><span class="lineno">16182</span>&#160;<span class="keyword"></span>{</div>
-<div class="line"><a name="l16183"></a><span class="lineno">16183</span>&#160;    VkBufferCreateInfo dummyBufCreateInfo;</div>
-<div class="line"><a name="l16184"></a><span class="lineno">16184</span>&#160;    VmaFillGpuDefragmentationBufferCreateInfo(dummyBufCreateInfo);</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;    uint32_t memoryTypeBits = 0;</div>
-<div class="line"><a name="l16187"></a><span class="lineno">16187</span>&#160; </div>
-<div class="line"><a name="l16188"></a><span class="lineno">16188</span>&#160;    <span class="comment">// Create buffer.</span></div>
-<div class="line"><a name="l16189"></a><span class="lineno">16189</span>&#160;    VkBuffer buf = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l16190"></a><span class="lineno">16190</span>&#160;    VkResult res = (*GetVulkanFunctions().vkCreateBuffer)(</div>
-<div class="line"><a name="l16191"></a><span class="lineno">16191</span>&#160;        m_hDevice, &amp;dummyBufCreateInfo, GetAllocationCallbacks(), &amp;buf);</div>
-<div class="line"><a name="l16192"></a><span class="lineno">16192</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;        <span class="comment">// Query for supported memory types.</span></div>
-<div class="line"><a name="l16195"></a><span class="lineno">16195</span>&#160;        VkMemoryRequirements memReq;</div>
-<div class="line"><a name="l16196"></a><span class="lineno">16196</span>&#160;        (*GetVulkanFunctions().vkGetBufferMemoryRequirements)(m_hDevice, buf, &amp;memReq);</div>
-<div class="line"><a name="l16197"></a><span class="lineno">16197</span>&#160;        memoryTypeBits = memReq.memoryTypeBits;</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="comment">// Destroy buffer.</span></div>
-<div class="line"><a name="l16200"></a><span class="lineno">16200</span>&#160;        (*GetVulkanFunctions().vkDestroyBuffer)(m_hDevice, buf, GetAllocationCallbacks());</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; </div>
-<div class="line"><a name="l16203"></a><span class="lineno">16203</span>&#160;    <span class="keywordflow">return</span> memoryTypeBits;</div>
-<div class="line"><a name="l16204"></a><span class="lineno">16204</span>&#160;}</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;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l16207"></a><span class="lineno">16207</span>&#160; </div>
-<div class="line"><a name="l16208"></a><span class="lineno">16208</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::UpdateVulkanBudget()</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;    VMA_ASSERT(m_UseExtMemoryBudget);</div>
+<div class="line"><a name="l16068"></a><span class="lineno">16068</span>&#160;    <span class="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
+<div class="line"><a name="l16069"></a><span class="lineno">16069</span>&#160;    {</div>
+<div class="line"><a name="l16070"></a><span class="lineno">16070</span>&#160;        VmaDeviceMemoryBlock* pBlock = hAllocation-&gt;GetBlock();</div>
+<div class="line"><a name="l16071"></a><span class="lineno">16071</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="l16072"></a><span class="lineno">16072</span>&#160;        res = pBlock-&gt;BindImageMemory(<span class="keyword">this</span>, hAllocation, allocationLocalOffset, hImage, pNext);</div>
+<div class="line"><a name="l16073"></a><span class="lineno">16073</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l16074"></a><span class="lineno">16074</span>&#160;    }</div>
+<div class="line"><a name="l16075"></a><span class="lineno">16075</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l16076"></a><span class="lineno">16076</span>&#160;        VMA_ASSERT(0);</div>
+<div class="line"><a name="l16077"></a><span class="lineno">16077</span>&#160;    }</div>
+<div class="line"><a name="l16078"></a><span class="lineno">16078</span>&#160;    <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l16079"></a><span class="lineno">16079</span>&#160;}</div>
+<div class="line"><a name="l16080"></a><span class="lineno">16080</span>&#160; </div>
+<div class="line"><a name="l16081"></a><span class="lineno">16081</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::FlushOrInvalidateAllocation(</div>
+<div class="line"><a name="l16082"></a><span class="lineno">16082</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAllocation,</div>
+<div class="line"><a name="l16083"></a><span class="lineno">16083</span>&#160;    VkDeviceSize offset, VkDeviceSize size,</div>
+<div class="line"><a name="l16084"></a><span class="lineno">16084</span>&#160;    VMA_CACHE_OPERATION op)</div>
+<div class="line"><a name="l16085"></a><span class="lineno">16085</span>&#160;{</div>
+<div class="line"><a name="l16086"></a><span class="lineno">16086</span>&#160;    <span class="keyword">const</span> uint32_t memTypeIndex = hAllocation-&gt;GetMemoryTypeIndex();</div>
+<div class="line"><a name="l16087"></a><span class="lineno">16087</span>&#160;    <span class="keywordflow">if</span>(size &gt; 0 &amp;&amp; IsMemoryTypeNonCoherent(memTypeIndex))</div>
+<div class="line"><a name="l16088"></a><span class="lineno">16088</span>&#160;    {</div>
+<div class="line"><a name="l16089"></a><span class="lineno">16089</span>&#160;        <span class="keyword">const</span> VkDeviceSize allocationSize = hAllocation-&gt;GetSize();</div>
+<div class="line"><a name="l16090"></a><span class="lineno">16090</span>&#160;        VMA_ASSERT(offset &lt;= allocationSize);</div>
+<div class="line"><a name="l16091"></a><span class="lineno">16091</span>&#160; </div>
+<div class="line"><a name="l16092"></a><span class="lineno">16092</span>&#160;        <span class="keyword">const</span> VkDeviceSize nonCoherentAtomSize = m_PhysicalDeviceProperties.limits.nonCoherentAtomSize;</div>
+<div class="line"><a name="l16093"></a><span class="lineno">16093</span>&#160; </div>
+<div class="line"><a name="l16094"></a><span class="lineno">16094</span>&#160;        VkMappedMemoryRange memRange = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE };</div>
+<div class="line"><a name="l16095"></a><span class="lineno">16095</span>&#160;        memRange.memory = hAllocation-&gt;GetMemory();</div>
+<div class="line"><a name="l16096"></a><span class="lineno">16096</span>&#160;        </div>
+<div class="line"><a name="l16097"></a><span class="lineno">16097</span>&#160;        <span class="keywordflow">switch</span>(hAllocation-&gt;GetType())</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">case</span> VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:</div>
+<div class="line"><a name="l16100"></a><span class="lineno">16100</span>&#160;            memRange.offset = VmaAlignDown(offset, nonCoherentAtomSize);</div>
+<div class="line"><a name="l16101"></a><span class="lineno">16101</span>&#160;            <span class="keywordflow">if</span>(size == VK_WHOLE_SIZE)</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;                memRange.size = allocationSize - memRange.offset;</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">else</span></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;                VMA_ASSERT(offset + size &lt;= allocationSize);</div>
+<div class="line"><a name="l16108"></a><span class="lineno">16108</span>&#160;                memRange.size = VMA_MIN(</div>
+<div class="line"><a name="l16109"></a><span class="lineno">16109</span>&#160;                    VmaAlignUp(size + (offset - memRange.offset), nonCoherentAtomSize),</div>
+<div class="line"><a name="l16110"></a><span class="lineno">16110</span>&#160;                    allocationSize - memRange.offset);</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">break</span>;</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="keywordflow">case</span> VmaAllocation_T::ALLOCATION_TYPE_BLOCK:</div>
+<div class="line"><a name="l16115"></a><span class="lineno">16115</span>&#160;        {</div>
+<div class="line"><a name="l16116"></a><span class="lineno">16116</span>&#160;            <span class="comment">// 1. Still within this allocation.</span></div>
+<div class="line"><a name="l16117"></a><span class="lineno">16117</span>&#160;            memRange.offset = VmaAlignDown(offset, nonCoherentAtomSize);</div>
+<div class="line"><a name="l16118"></a><span class="lineno">16118</span>&#160;            <span class="keywordflow">if</span>(size == VK_WHOLE_SIZE)</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;                size = allocationSize - offset;</div>
+<div class="line"><a name="l16121"></a><span class="lineno">16121</span>&#160;            }</div>
+<div class="line"><a name="l16122"></a><span class="lineno">16122</span>&#160;            <span class="keywordflow">else</span></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(offset + size &lt;= allocationSize);</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;            memRange.size = VmaAlignUp(size + (offset - memRange.offset), nonCoherentAtomSize);</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="comment">// 2. Adjust to whole block.</span></div>
+<div class="line"><a name="l16129"></a><span class="lineno">16129</span>&#160;            <span class="keyword">const</span> VkDeviceSize allocationOffset = hAllocation-&gt;GetOffset();</div>
+<div class="line"><a name="l16130"></a><span class="lineno">16130</span>&#160;            VMA_ASSERT(allocationOffset % nonCoherentAtomSize == 0);</div>
+<div class="line"><a name="l16131"></a><span class="lineno">16131</span>&#160;            <span class="keyword">const</span> VkDeviceSize blockSize = hAllocation-&gt;GetBlock()-&gt;m_pMetadata-&gt;GetSize();</div>
+<div class="line"><a name="l16132"></a><span class="lineno">16132</span>&#160;            memRange.offset += allocationOffset;</div>
+<div class="line"><a name="l16133"></a><span class="lineno">16133</span>&#160;            memRange.size = VMA_MIN(memRange.size, blockSize - memRange.offset);</div>
+<div class="line"><a name="l16134"></a><span class="lineno">16134</span>&#160;            </div>
+<div class="line"><a name="l16135"></a><span class="lineno">16135</span>&#160;            <span class="keywordflow">break</span>;</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;        </div>
+<div class="line"><a name="l16138"></a><span class="lineno">16138</span>&#160;        <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l16139"></a><span class="lineno">16139</span>&#160;            VMA_ASSERT(0);</div>
+<div class="line"><a name="l16140"></a><span class="lineno">16140</span>&#160;        }</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;        <span class="keywordflow">switch</span>(op)</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="keywordflow">case</span> VMA_CACHE_FLUSH:</div>
+<div class="line"><a name="l16145"></a><span class="lineno">16145</span>&#160;            (*GetVulkanFunctions().vkFlushMappedMemoryRanges)(m_hDevice, 1, &amp;memRange);</div>
+<div class="line"><a name="l16146"></a><span class="lineno">16146</span>&#160;            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l16147"></a><span class="lineno">16147</span>&#160;        <span class="keywordflow">case</span> VMA_CACHE_INVALIDATE:</div>
+<div class="line"><a name="l16148"></a><span class="lineno">16148</span>&#160;            (*GetVulkanFunctions().vkInvalidateMappedMemoryRanges)(m_hDevice, 1, &amp;memRange);</div>
+<div class="line"><a name="l16149"></a><span class="lineno">16149</span>&#160;            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l16150"></a><span class="lineno">16150</span>&#160;        <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l16151"></a><span class="lineno">16151</span>&#160;            VMA_ASSERT(0);</div>
+<div class="line"><a name="l16152"></a><span class="lineno">16152</span>&#160;        }</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;    <span class="comment">// else: Just ignore this call.</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; </div>
+<div class="line"><a name="l16157"></a><span class="lineno">16157</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="l16158"></a><span class="lineno">16158</span>&#160;{</div>
+<div class="line"><a name="l16159"></a><span class="lineno">16159</span>&#160;    VMA_ASSERT(allocation &amp;&amp; allocation-&gt;GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED);</div>
+<div class="line"><a name="l16160"></a><span class="lineno">16160</span>&#160; </div>
+<div class="line"><a name="l16161"></a><span class="lineno">16161</span>&#160;    <span class="keyword">const</span> uint32_t memTypeIndex = allocation-&gt;GetMemoryTypeIndex();</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;        VmaMutexLockWrite lock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
+<div class="line"><a name="l16164"></a><span class="lineno">16164</span>&#160;        AllocationVectorType* <span class="keyword">const</span> pDedicatedAllocations = m_pDedicatedAllocations[memTypeIndex];</div>
+<div class="line"><a name="l16165"></a><span class="lineno">16165</span>&#160;        VMA_ASSERT(pDedicatedAllocations);</div>
+<div class="line"><a name="l16166"></a><span class="lineno">16166</span>&#160;        <span class="keywordtype">bool</span> success = VmaVectorRemoveSorted&lt;VmaPointerLess&gt;(*pDedicatedAllocations, allocation);</div>
+<div class="line"><a name="l16167"></a><span class="lineno">16167</span>&#160;        VMA_ASSERT(success);</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; </div>
+<div class="line"><a name="l16170"></a><span class="lineno">16170</span>&#160;    VkDeviceMemory hMemory = allocation-&gt;GetMemory();</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;    <span class="comment">/*</span></div>
+<div class="line"><a name="l16173"></a><span class="lineno">16173</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="l16174"></a><span class="lineno">16174</span>&#160;<span class="comment">    before vkFreeMemory.</span></div>
+<div class="line"><a name="l16175"></a><span class="lineno">16175</span>&#160;<span class="comment"></span> </div>
+<div class="line"><a name="l16176"></a><span class="lineno">16176</span>&#160;<span class="comment">    if(allocation-&gt;GetMappedData() != VMA_NULL)</span></div>
+<div class="line"><a name="l16177"></a><span class="lineno">16177</span>&#160;<span class="comment">    {</span></div>
+<div class="line"><a name="l16178"></a><span class="lineno">16178</span>&#160;<span class="comment">        (*m_VulkanFunctions.vkUnmapMemory)(m_hDevice, hMemory);</span></div>
+<div class="line"><a name="l16179"></a><span class="lineno">16179</span>&#160;<span class="comment">    }</span></div>
+<div class="line"><a name="l16180"></a><span class="lineno">16180</span>&#160;<span class="comment">    */</span></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;    FreeVulkanMemory(memTypeIndex, allocation-&gt;GetSize(), hMemory);</div>
+<div class="line"><a name="l16183"></a><span class="lineno">16183</span>&#160; </div>
+<div class="line"><a name="l16184"></a><span class="lineno">16184</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;    Freed DedicatedMemory MemoryTypeIndex=%u&quot;</span>, memTypeIndex);</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; </div>
+<div class="line"><a name="l16187"></a><span class="lineno">16187</span>&#160;uint32_t VmaAllocator_T::CalculateGpuDefragmentationMemoryTypeBits()<span class="keyword"> const</span></div>
+<div class="line"><a name="l16188"></a><span class="lineno">16188</span>&#160;<span class="keyword"></span>{</div>
+<div class="line"><a name="l16189"></a><span class="lineno">16189</span>&#160;    VkBufferCreateInfo dummyBufCreateInfo;</div>
+<div class="line"><a name="l16190"></a><span class="lineno">16190</span>&#160;    VmaFillGpuDefragmentationBufferCreateInfo(dummyBufCreateInfo);</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;    uint32_t memoryTypeBits = 0;</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;    <span class="comment">// Create buffer.</span></div>
+<div class="line"><a name="l16195"></a><span class="lineno">16195</span>&#160;    VkBuffer buf = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l16196"></a><span class="lineno">16196</span>&#160;    VkResult res = (*GetVulkanFunctions().vkCreateBuffer)(</div>
+<div class="line"><a name="l16197"></a><span class="lineno">16197</span>&#160;        m_hDevice, &amp;dummyBufCreateInfo, GetAllocationCallbacks(), &amp;buf);</div>
+<div class="line"><a name="l16198"></a><span class="lineno">16198</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</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="comment">// Query for supported memory types.</span></div>
+<div class="line"><a name="l16201"></a><span class="lineno">16201</span>&#160;        VkMemoryRequirements memReq;</div>
+<div class="line"><a name="l16202"></a><span class="lineno">16202</span>&#160;        (*GetVulkanFunctions().vkGetBufferMemoryRequirements)(m_hDevice, buf, &amp;memReq);</div>
+<div class="line"><a name="l16203"></a><span class="lineno">16203</span>&#160;        memoryTypeBits = memReq.memoryTypeBits;</div>
+<div class="line"><a name="l16204"></a><span class="lineno">16204</span>&#160; </div>
+<div class="line"><a name="l16205"></a><span class="lineno">16205</span>&#160;        <span class="comment">// Destroy buffer.</span></div>
+<div class="line"><a name="l16206"></a><span class="lineno">16206</span>&#160;        (*GetVulkanFunctions().vkDestroyBuffer)(m_hDevice, buf, GetAllocationCallbacks());</div>
+<div class="line"><a name="l16207"></a><span class="lineno">16207</span>&#160;    }</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;    <span class="keywordflow">return</span> memoryTypeBits;</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;    VkPhysicalDeviceMemoryProperties2KHR memProps = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR };</div>
+<div class="line"><a name="l16212"></a><span class="lineno">16212</span>&#160;<span class="preprocessor">#if VMA_MEMORY_BUDGET</span></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;    VkPhysicalDeviceMemoryBudgetPropertiesEXT budgetProps = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT };</div>
-<div class="line"><a name="l16215"></a><span class="lineno">16215</span>&#160;    memProps.pNext = &amp;budgetProps;</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;    GetVulkanFunctions().vkGetPhysicalDeviceMemoryProperties2KHR(m_PhysicalDevice, &amp;memProps);</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;    {</div>
-<div class="line"><a name="l16220"></a><span class="lineno">16220</span>&#160;        VmaMutexLockWrite lockWrite(m_Budget.m_BudgetMutex, m_UseMutex);</div>
-<div class="line"><a name="l16221"></a><span class="lineno">16221</span>&#160; </div>
-<div class="line"><a name="l16222"></a><span class="lineno">16222</span>&#160;        <span class="keywordflow">for</span>(uint32_t heapIndex = 0; heapIndex &lt; GetMemoryHeapCount(); ++heapIndex)</div>
-<div class="line"><a name="l16223"></a><span class="lineno">16223</span>&#160;        {</div>
-<div class="line"><a name="l16224"></a><span class="lineno">16224</span>&#160;            m_Budget.m_VulkanUsage[heapIndex] = budgetProps.heapUsage[heapIndex];</div>
-<div class="line"><a name="l16225"></a><span class="lineno">16225</span>&#160;            m_Budget.m_VulkanBudget[heapIndex] = budgetProps.heapBudget[heapIndex];</div>
-<div class="line"><a name="l16226"></a><span class="lineno">16226</span>&#160;            m_Budget.m_BlockBytesAtBudgetFetch[heapIndex] = m_Budget.m_BlockBytes[heapIndex].load();</div>
-<div class="line"><a name="l16227"></a><span class="lineno">16227</span>&#160;        }</div>
-<div class="line"><a name="l16228"></a><span class="lineno">16228</span>&#160;        m_Budget.m_OperationsSinceBudgetFetch = 0;</div>
-<div class="line"><a name="l16229"></a><span class="lineno">16229</span>&#160;    }</div>
-<div class="line"><a name="l16230"></a><span class="lineno">16230</span>&#160;}</div>
-<div class="line"><a name="l16231"></a><span class="lineno">16231</span>&#160; </div>
-<div class="line"><a name="l16232"></a><span class="lineno">16232</span>&#160;<span class="preprocessor">#endif // #if VMA_MEMORY_BUDGET</span></div>
-<div class="line"><a name="l16233"></a><span class="lineno">16233</span>&#160; </div>
-<div class="line"><a name="l16234"></a><span class="lineno">16234</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="l16235"></a><span class="lineno">16235</span>&#160;{</div>
-<div class="line"><a name="l16236"></a><span class="lineno">16236</span>&#160;    <span class="keywordflow">if</span>(VMA_DEBUG_INITIALIZE_ALLOCATIONS &amp;&amp;</div>
-<div class="line"><a name="l16237"></a><span class="lineno">16237</span>&#160;        !hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
-<div class="line"><a name="l16238"></a><span class="lineno">16238</span>&#160;        (m_MemProps.memoryTypes[hAllocation-&gt;GetMemoryTypeIndex()].propertyFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0)</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;        <span class="keywordtype">void</span>* pData = VMA_NULL;</div>
-<div class="line"><a name="l16241"></a><span class="lineno">16241</span>&#160;        VkResult res = Map(hAllocation, &amp;pData);</div>
-<div class="line"><a name="l16242"></a><span class="lineno">16242</span>&#160;        <span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
-<div class="line"><a name="l16243"></a><span class="lineno">16243</span>&#160;        {</div>
-<div class="line"><a name="l16244"></a><span class="lineno">16244</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="l16245"></a><span class="lineno">16245</span>&#160;            FlushOrInvalidateAllocation(hAllocation, 0, VK_WHOLE_SIZE, VMA_CACHE_FLUSH);</div>
-<div class="line"><a name="l16246"></a><span class="lineno">16246</span>&#160;            Unmap(hAllocation);</div>
-<div class="line"><a name="l16247"></a><span class="lineno">16247</span>&#160;        }</div>
-<div class="line"><a name="l16248"></a><span class="lineno">16248</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l16214"></a><span class="lineno">16214</span>&#160;<span class="keywordtype">void</span> VmaAllocator_T::UpdateVulkanBudget()</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;    VMA_ASSERT(m_UseExtMemoryBudget);</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;    VkPhysicalDeviceMemoryProperties2KHR memProps = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR };</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;    VkPhysicalDeviceMemoryBudgetPropertiesEXT budgetProps = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT };</div>
+<div class="line"><a name="l16221"></a><span class="lineno">16221</span>&#160;    memProps.pNext = &amp;budgetProps;</div>
+<div class="line"><a name="l16222"></a><span class="lineno">16222</span>&#160; </div>
+<div class="line"><a name="l16223"></a><span class="lineno">16223</span>&#160;    GetVulkanFunctions().vkGetPhysicalDeviceMemoryProperties2KHR(m_PhysicalDevice, &amp;memProps);</div>
+<div class="line"><a name="l16224"></a><span class="lineno">16224</span>&#160; </div>
+<div class="line"><a name="l16225"></a><span class="lineno">16225</span>&#160;    {</div>
+<div class="line"><a name="l16226"></a><span class="lineno">16226</span>&#160;        VmaMutexLockWrite lockWrite(m_Budget.m_BudgetMutex, m_UseMutex);</div>
+<div class="line"><a name="l16227"></a><span class="lineno">16227</span>&#160; </div>
+<div class="line"><a name="l16228"></a><span class="lineno">16228</span>&#160;        <span class="keywordflow">for</span>(uint32_t heapIndex = 0; heapIndex &lt; GetMemoryHeapCount(); ++heapIndex)</div>
+<div class="line"><a name="l16229"></a><span class="lineno">16229</span>&#160;        {</div>
+<div class="line"><a name="l16230"></a><span class="lineno">16230</span>&#160;            m_Budget.m_VulkanUsage[heapIndex] = budgetProps.heapUsage[heapIndex];</div>
+<div class="line"><a name="l16231"></a><span class="lineno">16231</span>&#160;            m_Budget.m_VulkanBudget[heapIndex] = budgetProps.heapBudget[heapIndex];</div>
+<div class="line"><a name="l16232"></a><span class="lineno">16232</span>&#160;            m_Budget.m_BlockBytesAtBudgetFetch[heapIndex] = m_Budget.m_BlockBytes[heapIndex].load();</div>
+<div class="line"><a name="l16233"></a><span class="lineno">16233</span>&#160;        }</div>
+<div class="line"><a name="l16234"></a><span class="lineno">16234</span>&#160;        m_Budget.m_OperationsSinceBudgetFetch = 0;</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;<span class="preprocessor">#endif // #if VMA_MEMORY_BUDGET</span></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;<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="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>(VMA_DEBUG_INITIALIZE_ALLOCATIONS &amp;&amp;</div>
+<div class="line"><a name="l16243"></a><span class="lineno">16243</span>&#160;        !hAllocation-&gt;CanBecomeLost() &amp;&amp;</div>
+<div class="line"><a name="l16244"></a><span class="lineno">16244</span>&#160;        (m_MemProps.memoryTypes[hAllocation-&gt;GetMemoryTypeIndex()].propertyFlags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0)</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="keywordtype">void</span>* pData = VMA_NULL;</div>
+<div class="line"><a name="l16247"></a><span class="lineno">16247</span>&#160;        VkResult res = Map(hAllocation, &amp;pData);</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;            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="l16251"></a><span class="lineno">16251</span>&#160;        }</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;}</div>
-<div class="line"><a name="l16254"></a><span class="lineno">16254</span>&#160; </div>
-<div class="line"><a name="l16255"></a><span class="lineno">16255</span>&#160;uint32_t VmaAllocator_T::GetGpuDefragmentationMemoryTypeBits()</div>
-<div class="line"><a name="l16256"></a><span class="lineno">16256</span>&#160;{</div>
-<div class="line"><a name="l16257"></a><span class="lineno">16257</span>&#160;    uint32_t memoryTypeBits = m_GpuDefragmentationMemoryTypeBits.load();</div>
-<div class="line"><a name="l16258"></a><span class="lineno">16258</span>&#160;    <span class="keywordflow">if</span>(memoryTypeBits == UINT32_MAX)</div>
-<div class="line"><a name="l16259"></a><span class="lineno">16259</span>&#160;    {</div>
-<div class="line"><a name="l16260"></a><span class="lineno">16260</span>&#160;        memoryTypeBits = CalculateGpuDefragmentationMemoryTypeBits();</div>
-<div class="line"><a name="l16261"></a><span class="lineno">16261</span>&#160;        m_GpuDefragmentationMemoryTypeBits.store(memoryTypeBits);</div>
-<div class="line"><a name="l16262"></a><span class="lineno">16262</span>&#160;    }</div>
-<div class="line"><a name="l16263"></a><span class="lineno">16263</span>&#160;    <span class="keywordflow">return</span> memoryTypeBits;</div>
-<div class="line"><a name="l16264"></a><span class="lineno">16264</span>&#160;}</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;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</span></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="keywordtype">void</span> VmaAllocator_T::PrintDetailedMap(VmaJsonWriter&amp; json)</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;    <span class="keywordtype">bool</span> dedicatedAllocationsStarted = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l16271"></a><span class="lineno">16271</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</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;        VmaMutexLockRead dedicatedAllocationsLock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
-<div class="line"><a name="l16274"></a><span class="lineno">16274</span>&#160;        AllocationVectorType* <span class="keyword">const</span> pDedicatedAllocVector = m_pDedicatedAllocations[memTypeIndex];</div>
-<div class="line"><a name="l16275"></a><span class="lineno">16275</span>&#160;        VMA_ASSERT(pDedicatedAllocVector);</div>
-<div class="line"><a name="l16276"></a><span class="lineno">16276</span>&#160;        <span class="keywordflow">if</span>(pDedicatedAllocVector-&gt;empty() == <span class="keyword">false</span>)</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;            <span class="keywordflow">if</span>(dedicatedAllocationsStarted == <span class="keyword">false</span>)</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;                dedicatedAllocationsStarted = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l16281"></a><span class="lineno">16281</span>&#160;                json.WriteString(<span class="stringliteral">&quot;DedicatedAllocations&quot;</span>);</div>
-<div class="line"><a name="l16282"></a><span class="lineno">16282</span>&#160;                json.BeginObject();</div>
-<div class="line"><a name="l16283"></a><span class="lineno">16283</span>&#160;            }</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;            json.BeginString(<span class="stringliteral">&quot;Type &quot;</span>);</div>
-<div class="line"><a name="l16286"></a><span class="lineno">16286</span>&#160;            json.ContinueString(memTypeIndex);</div>
-<div class="line"><a name="l16287"></a><span class="lineno">16287</span>&#160;            json.EndString();</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;            json.BeginArray();</div>
+<div class="line"><a name="l16250"></a><span class="lineno">16250</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="l16251"></a><span class="lineno">16251</span>&#160;            FlushOrInvalidateAllocation(hAllocation, 0, VK_WHOLE_SIZE, VMA_CACHE_FLUSH);</div>
+<div class="line"><a name="l16252"></a><span class="lineno">16252</span>&#160;            Unmap(hAllocation);</div>
+<div class="line"><a name="l16253"></a><span class="lineno">16253</span>&#160;        }</div>
+<div class="line"><a name="l16254"></a><span class="lineno">16254</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l16255"></a><span class="lineno">16255</span>&#160;        {</div>
+<div class="line"><a name="l16256"></a><span class="lineno">16256</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="l16257"></a><span class="lineno">16257</span>&#160;        }</div>
+<div class="line"><a name="l16258"></a><span class="lineno">16258</span>&#160;    }</div>
+<div class="line"><a name="l16259"></a><span class="lineno">16259</span>&#160;}</div>
+<div class="line"><a name="l16260"></a><span class="lineno">16260</span>&#160; </div>
+<div class="line"><a name="l16261"></a><span class="lineno">16261</span>&#160;uint32_t VmaAllocator_T::GetGpuDefragmentationMemoryTypeBits()</div>
+<div class="line"><a name="l16262"></a><span class="lineno">16262</span>&#160;{</div>
+<div class="line"><a name="l16263"></a><span class="lineno">16263</span>&#160;    uint32_t memoryTypeBits = m_GpuDefragmentationMemoryTypeBits.load();</div>
+<div class="line"><a name="l16264"></a><span class="lineno">16264</span>&#160;    <span class="keywordflow">if</span>(memoryTypeBits == UINT32_MAX)</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;        memoryTypeBits = CalculateGpuDefragmentationMemoryTypeBits();</div>
+<div class="line"><a name="l16267"></a><span class="lineno">16267</span>&#160;        m_GpuDefragmentationMemoryTypeBits.store(memoryTypeBits);</div>
+<div class="line"><a name="l16268"></a><span class="lineno">16268</span>&#160;    }</div>
+<div class="line"><a name="l16269"></a><span class="lineno">16269</span>&#160;    <span class="keywordflow">return</span> memoryTypeBits;</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; </div>
+<div class="line"><a name="l16272"></a><span class="lineno">16272</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</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="keywordtype">void</span> VmaAllocator_T::PrintDetailedMap(VmaJsonWriter&amp; json)</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;    <span class="keywordtype">bool</span> dedicatedAllocationsStarted = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l16277"></a><span class="lineno">16277</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</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;        VmaMutexLockRead dedicatedAllocationsLock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);</div>
+<div class="line"><a name="l16280"></a><span class="lineno">16280</span>&#160;        AllocationVectorType* <span class="keyword">const</span> pDedicatedAllocVector = m_pDedicatedAllocations[memTypeIndex];</div>
+<div class="line"><a name="l16281"></a><span class="lineno">16281</span>&#160;        VMA_ASSERT(pDedicatedAllocVector);</div>
+<div class="line"><a name="l16282"></a><span class="lineno">16282</span>&#160;        <span class="keywordflow">if</span>(pDedicatedAllocVector-&gt;empty() == <span class="keyword">false</span>)</div>
+<div class="line"><a name="l16283"></a><span class="lineno">16283</span>&#160;        {</div>
+<div class="line"><a name="l16284"></a><span class="lineno">16284</span>&#160;            <span class="keywordflow">if</span>(dedicatedAllocationsStarted == <span class="keyword">false</span>)</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;                dedicatedAllocationsStarted = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l16287"></a><span class="lineno">16287</span>&#160;                json.WriteString(<span class="stringliteral">&quot;DedicatedAllocations&quot;</span>);</div>
+<div class="line"><a name="l16288"></a><span class="lineno">16288</span>&#160;                json.BeginObject();</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; </div>
-<div class="line"><a name="l16291"></a><span class="lineno">16291</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; pDedicatedAllocVector-&gt;size(); ++i)</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;                json.BeginObject(<span class="keyword">true</span>);</div>
-<div class="line"><a name="l16294"></a><span class="lineno">16294</span>&#160;                <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAlloc = (*pDedicatedAllocVector)[i];</div>
-<div class="line"><a name="l16295"></a><span class="lineno">16295</span>&#160;                hAlloc-&gt;PrintParameters(json);</div>
-<div class="line"><a name="l16296"></a><span class="lineno">16296</span>&#160;                json.EndObject();</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;            json.EndArray();</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;    }</div>
-<div class="line"><a name="l16302"></a><span class="lineno">16302</span>&#160;    <span class="keywordflow">if</span>(dedicatedAllocationsStarted)</div>
-<div class="line"><a name="l16303"></a><span class="lineno">16303</span>&#160;    {</div>
-<div class="line"><a name="l16304"></a><span class="lineno">16304</span>&#160;        json.EndObject();</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; </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;        <span class="keywordtype">bool</span> allocationsStarted = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l16309"></a><span class="lineno">16309</span>&#160;        <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</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="keywordflow">if</span>(m_pBlockVectors[memTypeIndex]-&gt;IsEmpty() == <span class="keyword">false</span>)</div>
-<div class="line"><a name="l16312"></a><span class="lineno">16312</span>&#160;            {</div>
-<div class="line"><a name="l16313"></a><span class="lineno">16313</span>&#160;                <span class="keywordflow">if</span>(allocationsStarted == <span class="keyword">false</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;                    allocationsStarted = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l16316"></a><span class="lineno">16316</span>&#160;                    json.WriteString(<span class="stringliteral">&quot;DefaultPools&quot;</span>);</div>
-<div class="line"><a name="l16317"></a><span class="lineno">16317</span>&#160;                    json.BeginObject();</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; </div>
-<div class="line"><a name="l16320"></a><span class="lineno">16320</span>&#160;                json.BeginString(<span class="stringliteral">&quot;Type &quot;</span>);</div>
-<div class="line"><a name="l16321"></a><span class="lineno">16321</span>&#160;                json.ContinueString(memTypeIndex);</div>
-<div class="line"><a name="l16322"></a><span class="lineno">16322</span>&#160;                json.EndString();</div>
-<div class="line"><a name="l16323"></a><span class="lineno">16323</span>&#160; </div>
-<div class="line"><a name="l16324"></a><span class="lineno">16324</span>&#160;                m_pBlockVectors[memTypeIndex]-&gt;PrintDetailedMap(json);</div>
-<div class="line"><a name="l16325"></a><span class="lineno">16325</span>&#160;            }</div>
-<div class="line"><a name="l16326"></a><span class="lineno">16326</span>&#160;        }</div>
-<div class="line"><a name="l16327"></a><span class="lineno">16327</span>&#160;        <span class="keywordflow">if</span>(allocationsStarted)</div>
-<div class="line"><a name="l16328"></a><span class="lineno">16328</span>&#160;        {</div>
-<div class="line"><a name="l16329"></a><span class="lineno">16329</span>&#160;            json.EndObject();</div>
-<div class="line"><a name="l16330"></a><span class="lineno">16330</span>&#160;        }</div>
-<div class="line"><a name="l16331"></a><span class="lineno">16331</span>&#160;    }</div>
-<div class="line"><a name="l16332"></a><span class="lineno">16332</span>&#160; </div>
-<div class="line"><a name="l16333"></a><span class="lineno">16333</span>&#160;    <span class="comment">// Custom pools</span></div>
-<div class="line"><a name="l16334"></a><span class="lineno">16334</span>&#160;    {</div>
-<div class="line"><a name="l16335"></a><span class="lineno">16335</span>&#160;        VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);</div>
-<div class="line"><a name="l16336"></a><span class="lineno">16336</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> poolCount = m_Pools.size();</div>
-<div class="line"><a name="l16337"></a><span class="lineno">16337</span>&#160;        <span class="keywordflow">if</span>(poolCount &gt; 0)</div>
-<div class="line"><a name="l16338"></a><span class="lineno">16338</span>&#160;        {</div>
-<div class="line"><a name="l16339"></a><span class="lineno">16339</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Pools&quot;</span>);</div>
-<div class="line"><a name="l16340"></a><span class="lineno">16340</span>&#160;            json.BeginObject();</div>
-<div class="line"><a name="l16341"></a><span class="lineno">16341</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> poolIndex = 0; poolIndex &lt; poolCount; ++poolIndex)</div>
-<div class="line"><a name="l16342"></a><span class="lineno">16342</span>&#160;            {</div>
-<div class="line"><a name="l16343"></a><span class="lineno">16343</span>&#160;                json.BeginString();</div>
-<div class="line"><a name="l16344"></a><span class="lineno">16344</span>&#160;                json.ContinueString(m_Pools[poolIndex]-&gt;GetId());</div>
-<div class="line"><a name="l16345"></a><span class="lineno">16345</span>&#160;                json.EndString();</div>
-<div class="line"><a name="l16346"></a><span class="lineno">16346</span>&#160; </div>
-<div class="line"><a name="l16347"></a><span class="lineno">16347</span>&#160;                m_Pools[poolIndex]-&gt;m_BlockVector.PrintDetailedMap(json);</div>
-<div class="line"><a name="l16348"></a><span class="lineno">16348</span>&#160;            }</div>
-<div class="line"><a name="l16349"></a><span class="lineno">16349</span>&#160;            json.EndObject();</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;    }</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 // #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l16355"></a><span class="lineno">16355</span>&#160; </div>
-<div class="line"><a name="l16357"></a><span class="lineno">16357</span>&#160;<span class="comment">// Public interface</span></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_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a>(</div>
-<div class="line"><a name="l16360"></a><span class="lineno">16360</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="l16361"></a><span class="lineno">16361</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a>* pAllocator)</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_ASSERT(pCreateInfo &amp;&amp; pAllocator);</div>
-<div class="line"><a name="l16364"></a><span class="lineno">16364</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="l16365"></a><span class="lineno">16365</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;= 1));</div>
-<div class="line"><a name="l16366"></a><span class="lineno">16366</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreateAllocator&quot;</span>);</div>
-<div class="line"><a name="l16367"></a><span class="lineno">16367</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="l16368"></a><span class="lineno">16368</span>&#160;    <span class="keywordflow">return</span> (*pAllocator)-&gt;Init(pCreateInfo);</div>
-<div class="line"><a name="l16369"></a><span class="lineno">16369</span>&#160;}</div>
-<div class="line"><a name="l16370"></a><span class="lineno">16370</span>&#160; </div>
-<div class="line"><a name="l16371"></a><span class="lineno">16371</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="l16372"></a><span class="lineno">16372</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator)</div>
-<div class="line"><a name="l16373"></a><span class="lineno">16373</span>&#160;{</div>
-<div class="line"><a name="l16374"></a><span class="lineno">16374</span>&#160;    <span class="keywordflow">if</span>(allocator != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l16375"></a><span class="lineno">16375</span>&#160;    {</div>
-<div class="line"><a name="l16376"></a><span class="lineno">16376</span>&#160;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyAllocator&quot;</span>);</div>
-<div class="line"><a name="l16377"></a><span class="lineno">16377</span>&#160;        VkAllocationCallbacks allocationCallbacks = allocator-&gt;m_AllocationCallbacks;</div>
-<div class="line"><a name="l16378"></a><span class="lineno">16378</span>&#160;        vma_delete(&amp;allocationCallbacks, allocator);</div>
-<div class="line"><a name="l16379"></a><span class="lineno">16379</span>&#160;    }</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; </div>
-<div class="line"><a name="l16382"></a><span class="lineno">16382</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="l16383"></a><span class="lineno">16383</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16384"></a><span class="lineno">16384</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceProperties **ppPhysicalDeviceProperties)</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;    VMA_ASSERT(allocator &amp;&amp; ppPhysicalDeviceProperties);</div>
-<div class="line"><a name="l16387"></a><span class="lineno">16387</span>&#160;    *ppPhysicalDeviceProperties = &amp;allocator-&gt;m_PhysicalDeviceProperties;</div>
-<div class="line"><a name="l16388"></a><span class="lineno">16388</span>&#160;}</div>
-<div class="line"><a name="l16389"></a><span class="lineno">16389</span>&#160; </div>
-<div class="line"><a name="l16390"></a><span class="lineno">16390</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="l16391"></a><span class="lineno">16391</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16392"></a><span class="lineno">16392</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceMemoryProperties** ppPhysicalDeviceMemoryProperties)</div>
-<div class="line"><a name="l16393"></a><span class="lineno">16393</span>&#160;{</div>
-<div class="line"><a name="l16394"></a><span class="lineno">16394</span>&#160;    VMA_ASSERT(allocator &amp;&amp; ppPhysicalDeviceMemoryProperties);</div>
-<div class="line"><a name="l16395"></a><span class="lineno">16395</span>&#160;    *ppPhysicalDeviceMemoryProperties = &amp;allocator-&gt;m_MemProps;</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;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="l16399"></a><span class="lineno">16399</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16400"></a><span class="lineno">16400</span>&#160;    uint32_t memoryTypeIndex,</div>
-<div class="line"><a name="l16401"></a><span class="lineno">16401</span>&#160;    VkMemoryPropertyFlags* pFlags)</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;    VMA_ASSERT(allocator &amp;&amp; pFlags);</div>
-<div class="line"><a name="l16404"></a><span class="lineno">16404</span>&#160;    VMA_ASSERT(memoryTypeIndex &lt; allocator-&gt;GetMemoryTypeCount());</div>
-<div class="line"><a name="l16405"></a><span class="lineno">16405</span>&#160;    *pFlags = allocator-&gt;m_MemProps.memoryTypes[memoryTypeIndex].propertyFlags;</div>
-<div class="line"><a name="l16406"></a><span class="lineno">16406</span>&#160;}</div>
-<div class="line"><a name="l16407"></a><span class="lineno">16407</span>&#160; </div>
-<div class="line"><a name="l16408"></a><span class="lineno">16408</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="l16409"></a><span class="lineno">16409</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16410"></a><span class="lineno">16410</span>&#160;    uint32_t frameIndex)</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_ASSERT(allocator);</div>
-<div class="line"><a name="l16413"></a><span class="lineno">16413</span>&#160;    VMA_ASSERT(frameIndex != VMA_FRAME_INDEX_LOST);</div>
-<div class="line"><a name="l16414"></a><span class="lineno">16414</span>&#160; </div>
-<div class="line"><a name="l16415"></a><span class="lineno">16415</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l16416"></a><span class="lineno">16416</span>&#160; </div>
-<div class="line"><a name="l16417"></a><span class="lineno">16417</span>&#160;    allocator-&gt;SetCurrentFrameIndex(frameIndex);</div>
-<div class="line"><a name="l16418"></a><span class="lineno">16418</span>&#160;}</div>
-<div class="line"><a name="l16419"></a><span class="lineno">16419</span>&#160; </div>
-<div class="line"><a name="l16420"></a><span class="lineno">16420</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="l16421"></a><span class="lineno">16421</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16422"></a><span class="lineno">16422</span>&#160;    <a class="code" href="struct_vma_stats.html">VmaStats</a>* pStats)</div>
-<div class="line"><a name="l16423"></a><span class="lineno">16423</span>&#160;{</div>
-<div class="line"><a name="l16424"></a><span class="lineno">16424</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pStats);</div>
-<div class="line"><a name="l16425"></a><span class="lineno">16425</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l16426"></a><span class="lineno">16426</span>&#160;    allocator-&gt;CalculateStats(pStats);</div>
-<div class="line"><a name="l16427"></a><span class="lineno">16427</span>&#160;}</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;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="l16430"></a><span class="lineno">16430</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16431"></a><span class="lineno">16431</span>&#160;    <a class="code" href="struct_vma_budget.html">VmaBudget</a>* pBudget)</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_ASSERT(allocator &amp;&amp; pBudget);</div>
-<div class="line"><a name="l16434"></a><span class="lineno">16434</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l16435"></a><span class="lineno">16435</span>&#160;    allocator-&gt;GetBudget(pBudget, 0, allocator-&gt;GetMemoryHeapCount());</div>
-<div class="line"><a name="l16436"></a><span class="lineno">16436</span>&#160;}</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">#if VMA_STATS_STRING_ENABLED</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;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="l16441"></a><span class="lineno">16441</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16442"></a><span class="lineno">16442</span>&#160;    <span class="keywordtype">char</span>** ppStatsString,</div>
-<div class="line"><a name="l16443"></a><span class="lineno">16443</span>&#160;    VkBool32 detailedMap)</div>
-<div class="line"><a name="l16444"></a><span class="lineno">16444</span>&#160;{</div>
-<div class="line"><a name="l16445"></a><span class="lineno">16445</span>&#160;    VMA_ASSERT(allocator &amp;&amp; ppStatsString);</div>
-<div class="line"><a name="l16446"></a><span class="lineno">16446</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    VmaStringBuilder sb(allocator);</div>
-<div class="line"><a name="l16449"></a><span class="lineno">16449</span>&#160;    {</div>
-<div class="line"><a name="l16450"></a><span class="lineno">16450</span>&#160;        VmaJsonWriter json(allocator-&gt;GetAllocationCallbacks(), sb);</div>
-<div class="line"><a name="l16451"></a><span class="lineno">16451</span>&#160;        json.BeginObject();</div>
-<div class="line"><a name="l16452"></a><span class="lineno">16452</span>&#160; </div>
-<div class="line"><a name="l16453"></a><span class="lineno">16453</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> budget[VK_MAX_MEMORY_HEAPS];</div>
-<div class="line"><a name="l16454"></a><span class="lineno">16454</span>&#160;        allocator-&gt;GetBudget(budget, 0, allocator-&gt;GetMemoryHeapCount());</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;        <a class="code" href="struct_vma_stats.html">VmaStats</a> stats;</div>
-<div class="line"><a name="l16457"></a><span class="lineno">16457</span>&#160;        allocator-&gt;CalculateStats(&amp;stats);</div>
+<div class="line"><a name="l16291"></a><span class="lineno">16291</span>&#160;            json.BeginString(<span class="stringliteral">&quot;Type &quot;</span>);</div>
+<div class="line"><a name="l16292"></a><span class="lineno">16292</span>&#160;            json.ContinueString(memTypeIndex);</div>
+<div class="line"><a name="l16293"></a><span class="lineno">16293</span>&#160;            json.EndString();</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;            json.BeginArray();</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;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; pDedicatedAllocVector-&gt;size(); ++i)</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;                json.BeginObject(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l16300"></a><span class="lineno">16300</span>&#160;                <span class="keyword">const</span> <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> hAlloc = (*pDedicatedAllocVector)[i];</div>
+<div class="line"><a name="l16301"></a><span class="lineno">16301</span>&#160;                hAlloc-&gt;PrintParameters(json);</div>
+<div class="line"><a name="l16302"></a><span class="lineno">16302</span>&#160;                json.EndObject();</div>
+<div class="line"><a name="l16303"></a><span class="lineno">16303</span>&#160;            }</div>
+<div class="line"><a name="l16304"></a><span class="lineno">16304</span>&#160; </div>
+<div class="line"><a name="l16305"></a><span class="lineno">16305</span>&#160;            json.EndArray();</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;    }</div>
+<div class="line"><a name="l16308"></a><span class="lineno">16308</span>&#160;    <span class="keywordflow">if</span>(dedicatedAllocationsStarted)</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;        json.EndObject();</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; </div>
+<div class="line"><a name="l16313"></a><span class="lineno">16313</span>&#160;    {</div>
+<div class="line"><a name="l16314"></a><span class="lineno">16314</span>&#160;        <span class="keywordtype">bool</span> allocationsStarted = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l16315"></a><span class="lineno">16315</span>&#160;        <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0; memTypeIndex &lt; GetMemoryTypeCount(); ++memTypeIndex)</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;            <span class="keywordflow">if</span>(m_pBlockVectors[memTypeIndex]-&gt;IsEmpty() == <span class="keyword">false</span>)</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="keywordflow">if</span>(allocationsStarted == <span class="keyword">false</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;                    allocationsStarted = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l16322"></a><span class="lineno">16322</span>&#160;                    json.WriteString(<span class="stringliteral">&quot;DefaultPools&quot;</span>);</div>
+<div class="line"><a name="l16323"></a><span class="lineno">16323</span>&#160;                    json.BeginObject();</div>
+<div class="line"><a name="l16324"></a><span class="lineno">16324</span>&#160;                }</div>
+<div class="line"><a name="l16325"></a><span class="lineno">16325</span>&#160; </div>
+<div class="line"><a name="l16326"></a><span class="lineno">16326</span>&#160;                json.BeginString(<span class="stringliteral">&quot;Type &quot;</span>);</div>
+<div class="line"><a name="l16327"></a><span class="lineno">16327</span>&#160;                json.ContinueString(memTypeIndex);</div>
+<div class="line"><a name="l16328"></a><span class="lineno">16328</span>&#160;                json.EndString();</div>
+<div class="line"><a name="l16329"></a><span class="lineno">16329</span>&#160; </div>
+<div class="line"><a name="l16330"></a><span class="lineno">16330</span>&#160;                m_pBlockVectors[memTypeIndex]-&gt;PrintDetailedMap(json);</div>
+<div class="line"><a name="l16331"></a><span class="lineno">16331</span>&#160;            }</div>
+<div class="line"><a name="l16332"></a><span class="lineno">16332</span>&#160;        }</div>
+<div class="line"><a name="l16333"></a><span class="lineno">16333</span>&#160;        <span class="keywordflow">if</span>(allocationsStarted)</div>
+<div class="line"><a name="l16334"></a><span class="lineno">16334</span>&#160;        {</div>
+<div class="line"><a name="l16335"></a><span class="lineno">16335</span>&#160;            json.EndObject();</div>
+<div class="line"><a name="l16336"></a><span class="lineno">16336</span>&#160;        }</div>
+<div class="line"><a name="l16337"></a><span class="lineno">16337</span>&#160;    }</div>
+<div class="line"><a name="l16338"></a><span class="lineno">16338</span>&#160; </div>
+<div class="line"><a name="l16339"></a><span class="lineno">16339</span>&#160;    <span class="comment">// Custom pools</span></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;        VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);</div>
+<div class="line"><a name="l16342"></a><span class="lineno">16342</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">size_t</span> poolCount = m_Pools.size();</div>
+<div class="line"><a name="l16343"></a><span class="lineno">16343</span>&#160;        <span class="keywordflow">if</span>(poolCount &gt; 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;            json.WriteString(<span class="stringliteral">&quot;Pools&quot;</span>);</div>
+<div class="line"><a name="l16346"></a><span class="lineno">16346</span>&#160;            json.BeginObject();</div>
+<div class="line"><a name="l16347"></a><span class="lineno">16347</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> poolIndex = 0; poolIndex &lt; poolCount; ++poolIndex)</div>
+<div class="line"><a name="l16348"></a><span class="lineno">16348</span>&#160;            {</div>
+<div class="line"><a name="l16349"></a><span class="lineno">16349</span>&#160;                json.BeginString();</div>
+<div class="line"><a name="l16350"></a><span class="lineno">16350</span>&#160;                json.ContinueString(m_Pools[poolIndex]-&gt;GetId());</div>
+<div class="line"><a name="l16351"></a><span class="lineno">16351</span>&#160;                json.EndString();</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;                m_Pools[poolIndex]-&gt;m_BlockVector.PrintDetailedMap(json);</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;            json.EndObject();</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;    }</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; </div>
+<div class="line"><a name="l16360"></a><span class="lineno">16360</span>&#160;<span class="preprocessor">#endif // #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l16361"></a><span class="lineno">16361</span>&#160; </div>
+<div class="line"><a name="l16363"></a><span class="lineno">16363</span>&#160;<span class="comment">// Public interface</span></div>
+<div class="line"><a name="l16364"></a><span class="lineno">16364</span>&#160; </div>
+<div class="line"><a name="l16365"></a><span class="lineno">16365</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="l16366"></a><span class="lineno">16366</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="l16367"></a><span class="lineno">16367</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a>* pAllocator)</div>
+<div class="line"><a name="l16368"></a><span class="lineno">16368</span>&#160;{</div>
+<div class="line"><a name="l16369"></a><span class="lineno">16369</span>&#160;    VMA_ASSERT(pCreateInfo &amp;&amp; pAllocator);</div>
+<div class="line"><a name="l16370"></a><span class="lineno">16370</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="l16371"></a><span class="lineno">16371</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;= 1));</div>
+<div class="line"><a name="l16372"></a><span class="lineno">16372</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreateAllocator&quot;</span>);</div>
+<div class="line"><a name="l16373"></a><span class="lineno">16373</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="l16374"></a><span class="lineno">16374</span>&#160;    <span class="keywordflow">return</span> (*pAllocator)-&gt;Init(pCreateInfo);</div>
+<div class="line"><a name="l16375"></a><span class="lineno">16375</span>&#160;}</div>
+<div class="line"><a name="l16376"></a><span class="lineno">16376</span>&#160; </div>
+<div class="line"><a name="l16377"></a><span class="lineno">16377</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="l16378"></a><span class="lineno">16378</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator)</div>
+<div class="line"><a name="l16379"></a><span class="lineno">16379</span>&#160;{</div>
+<div class="line"><a name="l16380"></a><span class="lineno">16380</span>&#160;    <span class="keywordflow">if</span>(allocator != VK_NULL_HANDLE)</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;        VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyAllocator&quot;</span>);</div>
+<div class="line"><a name="l16383"></a><span class="lineno">16383</span>&#160;        VkAllocationCallbacks allocationCallbacks = allocator-&gt;m_AllocationCallbacks;</div>
+<div class="line"><a name="l16384"></a><span class="lineno">16384</span>&#160;        vma_delete(&amp;allocationCallbacks, allocator);</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;}</div>
+<div class="line"><a name="l16387"></a><span class="lineno">16387</span>&#160; </div>
+<div class="line"><a name="l16388"></a><span class="lineno">16388</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="l16389"></a><span class="lineno">16389</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16390"></a><span class="lineno">16390</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceProperties **ppPhysicalDeviceProperties)</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;    VMA_ASSERT(allocator &amp;&amp; ppPhysicalDeviceProperties);</div>
+<div class="line"><a name="l16393"></a><span class="lineno">16393</span>&#160;    *ppPhysicalDeviceProperties = &amp;allocator-&gt;m_PhysicalDeviceProperties;</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; </div>
+<div class="line"><a name="l16396"></a><span class="lineno">16396</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="l16397"></a><span class="lineno">16397</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16398"></a><span class="lineno">16398</span>&#160;    <span class="keyword">const</span> VkPhysicalDeviceMemoryProperties** ppPhysicalDeviceMemoryProperties)</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;    VMA_ASSERT(allocator &amp;&amp; ppPhysicalDeviceMemoryProperties);</div>
+<div class="line"><a name="l16401"></a><span class="lineno">16401</span>&#160;    *ppPhysicalDeviceMemoryProperties = &amp;allocator-&gt;m_MemProps;</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; </div>
+<div class="line"><a name="l16404"></a><span class="lineno">16404</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="l16405"></a><span class="lineno">16405</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16406"></a><span class="lineno">16406</span>&#160;    uint32_t memoryTypeIndex,</div>
+<div class="line"><a name="l16407"></a><span class="lineno">16407</span>&#160;    VkMemoryPropertyFlags* pFlags)</div>
+<div class="line"><a name="l16408"></a><span class="lineno">16408</span>&#160;{</div>
+<div class="line"><a name="l16409"></a><span class="lineno">16409</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pFlags);</div>
+<div class="line"><a name="l16410"></a><span class="lineno">16410</span>&#160;    VMA_ASSERT(memoryTypeIndex &lt; allocator-&gt;GetMemoryTypeCount());</div>
+<div class="line"><a name="l16411"></a><span class="lineno">16411</span>&#160;    *pFlags = allocator-&gt;m_MemProps.memoryTypes[memoryTypeIndex].propertyFlags;</div>
+<div class="line"><a name="l16412"></a><span class="lineno">16412</span>&#160;}</div>
+<div class="line"><a name="l16413"></a><span class="lineno">16413</span>&#160; </div>
+<div class="line"><a name="l16414"></a><span class="lineno">16414</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="l16415"></a><span class="lineno">16415</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16416"></a><span class="lineno">16416</span>&#160;    uint32_t frameIndex)</div>
+<div class="line"><a name="l16417"></a><span class="lineno">16417</span>&#160;{</div>
+<div class="line"><a name="l16418"></a><span class="lineno">16418</span>&#160;    VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l16419"></a><span class="lineno">16419</span>&#160;    VMA_ASSERT(frameIndex != VMA_FRAME_INDEX_LOST);</div>
+<div class="line"><a name="l16420"></a><span class="lineno">16420</span>&#160; </div>
+<div class="line"><a name="l16421"></a><span class="lineno">16421</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l16422"></a><span class="lineno">16422</span>&#160; </div>
+<div class="line"><a name="l16423"></a><span class="lineno">16423</span>&#160;    allocator-&gt;SetCurrentFrameIndex(frameIndex);</div>
+<div class="line"><a name="l16424"></a><span class="lineno">16424</span>&#160;}</div>
+<div class="line"><a name="l16425"></a><span class="lineno">16425</span>&#160; </div>
+<div class="line"><a name="l16426"></a><span class="lineno">16426</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="l16427"></a><span class="lineno">16427</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16428"></a><span class="lineno">16428</span>&#160;    <a class="code" href="struct_vma_stats.html">VmaStats</a>* pStats)</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;    VMA_ASSERT(allocator &amp;&amp; pStats);</div>
+<div class="line"><a name="l16431"></a><span class="lineno">16431</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l16432"></a><span class="lineno">16432</span>&#160;    allocator-&gt;CalculateStats(pStats);</div>
+<div class="line"><a name="l16433"></a><span class="lineno">16433</span>&#160;}</div>
+<div class="line"><a name="l16434"></a><span class="lineno">16434</span>&#160; </div>
+<div class="line"><a name="l16435"></a><span class="lineno">16435</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="l16436"></a><span class="lineno">16436</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16437"></a><span class="lineno">16437</span>&#160;    <a class="code" href="struct_vma_budget.html">VmaBudget</a>* pBudget)</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;    VMA_ASSERT(allocator &amp;&amp; pBudget);</div>
+<div class="line"><a name="l16440"></a><span class="lineno">16440</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l16441"></a><span class="lineno">16441</span>&#160;    allocator-&gt;GetBudget(pBudget, 0, allocator-&gt;GetMemoryHeapCount());</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; </div>
+<div class="line"><a name="l16444"></a><span class="lineno">16444</span>&#160;<span class="preprocessor">#if VMA_STATS_STRING_ENABLED</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;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="l16447"></a><span class="lineno">16447</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16448"></a><span class="lineno">16448</span>&#160;    <span class="keywordtype">char</span>** ppStatsString,</div>
+<div class="line"><a name="l16449"></a><span class="lineno">16449</span>&#160;    VkBool32 detailedMap)</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_ASSERT(allocator &amp;&amp; ppStatsString);</div>
+<div class="line"><a name="l16452"></a><span class="lineno">16452</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    VmaStringBuilder sb(allocator);</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;        VmaJsonWriter json(allocator-&gt;GetAllocationCallbacks(), sb);</div>
+<div class="line"><a name="l16457"></a><span class="lineno">16457</span>&#160;        json.BeginObject();</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;        json.WriteString(<span class="stringliteral">&quot;Total&quot;</span>);</div>
-<div class="line"><a name="l16460"></a><span class="lineno">16460</span>&#160;        VmaPrintStatInfo(json, stats.<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>);</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="keywordflow">for</span>(uint32_t heapIndex = 0; heapIndex &lt; allocator-&gt;GetMemoryHeapCount(); ++heapIndex)</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;            json.BeginString(<span class="stringliteral">&quot;Heap &quot;</span>);</div>
-<div class="line"><a name="l16465"></a><span class="lineno">16465</span>&#160;            json.ContinueString(heapIndex);</div>
-<div class="line"><a name="l16466"></a><span class="lineno">16466</span>&#160;            json.EndString();</div>
-<div class="line"><a name="l16467"></a><span class="lineno">16467</span>&#160;            json.BeginObject();</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;            json.WriteString(<span class="stringliteral">&quot;Size&quot;</span>);</div>
-<div class="line"><a name="l16470"></a><span class="lineno">16470</span>&#160;            json.WriteNumber(allocator-&gt;m_MemProps.memoryHeaps[heapIndex].size);</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;            json.WriteString(<span class="stringliteral">&quot;Flags&quot;</span>);</div>
-<div class="line"><a name="l16473"></a><span class="lineno">16473</span>&#160;            json.BeginArray(<span class="keyword">true</span>);</div>
-<div class="line"><a name="l16474"></a><span class="lineno">16474</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="l16475"></a><span class="lineno">16475</span>&#160;            {</div>
-<div class="line"><a name="l16476"></a><span class="lineno">16476</span>&#160;                json.WriteString(<span class="stringliteral">&quot;DEVICE_LOCAL&quot;</span>);</div>
-<div class="line"><a name="l16477"></a><span class="lineno">16477</span>&#160;            }</div>
-<div class="line"><a name="l16478"></a><span class="lineno">16478</span>&#160;            json.EndArray();</div>
-<div class="line"><a name="l16479"></a><span class="lineno">16479</span>&#160; </div>
-<div class="line"><a name="l16480"></a><span class="lineno">16480</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Budget&quot;</span>);</div>
-<div class="line"><a name="l16481"></a><span class="lineno">16481</span>&#160;            json.BeginObject();</div>
-<div class="line"><a name="l16482"></a><span class="lineno">16482</span>&#160;            {</div>
-<div class="line"><a name="l16483"></a><span class="lineno">16483</span>&#160;                json.WriteString(<span class="stringliteral">&quot;BlockBytes&quot;</span>);</div>
-<div class="line"><a name="l16484"></a><span class="lineno">16484</span>&#160;                json.WriteNumber(budget[heapIndex].blockBytes);</div>
-<div class="line"><a name="l16485"></a><span class="lineno">16485</span>&#160;                json.WriteString(<span class="stringliteral">&quot;AllocationBytes&quot;</span>);</div>
-<div class="line"><a name="l16486"></a><span class="lineno">16486</span>&#160;                json.WriteNumber(budget[heapIndex].allocationBytes);</div>
-<div class="line"><a name="l16487"></a><span class="lineno">16487</span>&#160;                json.WriteString(<span class="stringliteral">&quot;Usage&quot;</span>);</div>
-<div class="line"><a name="l16488"></a><span class="lineno">16488</span>&#160;                json.WriteNumber(budget[heapIndex].usage);</div>
-<div class="line"><a name="l16489"></a><span class="lineno">16489</span>&#160;                json.WriteString(<span class="stringliteral">&quot;Budget&quot;</span>);</div>
-<div class="line"><a name="l16490"></a><span class="lineno">16490</span>&#160;                json.WriteNumber(budget[heapIndex].budget);</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;            json.EndObject();</div>
-<div class="line"><a name="l16493"></a><span class="lineno">16493</span>&#160; </div>
-<div class="line"><a name="l16494"></a><span class="lineno">16494</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="l16495"></a><span class="lineno">16495</span>&#160;            {</div>
-<div class="line"><a name="l16496"></a><span class="lineno">16496</span>&#160;                json.WriteString(<span class="stringliteral">&quot;Stats&quot;</span>);</div>
-<div class="line"><a name="l16497"></a><span class="lineno">16497</span>&#160;                VmaPrintStatInfo(json, stats.<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[heapIndex]);</div>
-<div class="line"><a name="l16498"></a><span class="lineno">16498</span>&#160;            }</div>
+<div class="line"><a name="l16459"></a><span class="lineno">16459</span>&#160;        <a class="code" href="struct_vma_budget.html">VmaBudget</a> budget[VK_MAX_MEMORY_HEAPS];</div>
+<div class="line"><a name="l16460"></a><span class="lineno">16460</span>&#160;        allocator-&gt;GetBudget(budget, 0, allocator-&gt;GetMemoryHeapCount());</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;        <a class="code" href="struct_vma_stats.html">VmaStats</a> stats;</div>
+<div class="line"><a name="l16463"></a><span class="lineno">16463</span>&#160;        allocator-&gt;CalculateStats(&amp;stats);</div>
+<div class="line"><a name="l16464"></a><span class="lineno">16464</span>&#160; </div>
+<div class="line"><a name="l16465"></a><span class="lineno">16465</span>&#160;        json.WriteString(<span class="stringliteral">&quot;Total&quot;</span>);</div>
+<div class="line"><a name="l16466"></a><span class="lineno">16466</span>&#160;        VmaPrintStatInfo(json, stats.<a class="code" href="struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9">total</a>);</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="keywordflow">for</span>(uint32_t heapIndex = 0; heapIndex &lt; allocator-&gt;GetMemoryHeapCount(); ++heapIndex)</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;            json.BeginString(<span class="stringliteral">&quot;Heap &quot;</span>);</div>
+<div class="line"><a name="l16471"></a><span class="lineno">16471</span>&#160;            json.ContinueString(heapIndex);</div>
+<div class="line"><a name="l16472"></a><span class="lineno">16472</span>&#160;            json.EndString();</div>
+<div class="line"><a name="l16473"></a><span class="lineno">16473</span>&#160;            json.BeginObject();</div>
+<div class="line"><a name="l16474"></a><span class="lineno">16474</span>&#160; </div>
+<div class="line"><a name="l16475"></a><span class="lineno">16475</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Size&quot;</span>);</div>
+<div class="line"><a name="l16476"></a><span class="lineno">16476</span>&#160;            json.WriteNumber(allocator-&gt;m_MemProps.memoryHeaps[heapIndex].size);</div>
+<div class="line"><a name="l16477"></a><span class="lineno">16477</span>&#160; </div>
+<div class="line"><a name="l16478"></a><span class="lineno">16478</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Flags&quot;</span>);</div>
+<div class="line"><a name="l16479"></a><span class="lineno">16479</span>&#160;            json.BeginArray(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l16480"></a><span class="lineno">16480</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="l16481"></a><span class="lineno">16481</span>&#160;            {</div>
+<div class="line"><a name="l16482"></a><span class="lineno">16482</span>&#160;                json.WriteString(<span class="stringliteral">&quot;DEVICE_LOCAL&quot;</span>);</div>
+<div class="line"><a name="l16483"></a><span class="lineno">16483</span>&#160;            }</div>
+<div class="line"><a name="l16484"></a><span class="lineno">16484</span>&#160;            json.EndArray();</div>
+<div class="line"><a name="l16485"></a><span class="lineno">16485</span>&#160; </div>
+<div class="line"><a name="l16486"></a><span class="lineno">16486</span>&#160;            json.WriteString(<span class="stringliteral">&quot;Budget&quot;</span>);</div>
+<div class="line"><a name="l16487"></a><span class="lineno">16487</span>&#160;            json.BeginObject();</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;                json.WriteString(<span class="stringliteral">&quot;BlockBytes&quot;</span>);</div>
+<div class="line"><a name="l16490"></a><span class="lineno">16490</span>&#160;                json.WriteNumber(budget[heapIndex].blockBytes);</div>
+<div class="line"><a name="l16491"></a><span class="lineno">16491</span>&#160;                json.WriteString(<span class="stringliteral">&quot;AllocationBytes&quot;</span>);</div>
+<div class="line"><a name="l16492"></a><span class="lineno">16492</span>&#160;                json.WriteNumber(budget[heapIndex].allocationBytes);</div>
+<div class="line"><a name="l16493"></a><span class="lineno">16493</span>&#160;                json.WriteString(<span class="stringliteral">&quot;Usage&quot;</span>);</div>
+<div class="line"><a name="l16494"></a><span class="lineno">16494</span>&#160;                json.WriteNumber(budget[heapIndex].usage);</div>
+<div class="line"><a name="l16495"></a><span class="lineno">16495</span>&#160;                json.WriteString(<span class="stringliteral">&quot;Budget&quot;</span>);</div>
+<div class="line"><a name="l16496"></a><span class="lineno">16496</span>&#160;                json.WriteNumber(budget[heapIndex].budget);</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;            json.EndObject();</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;            <span class="keywordflow">for</span>(uint32_t typeIndex = 0; typeIndex &lt; allocator-&gt;GetMemoryTypeCount(); ++typeIndex)</div>
+<div class="line"><a name="l16500"></a><span class="lineno">16500</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="l16501"></a><span class="lineno">16501</span>&#160;            {</div>
-<div class="line"><a name="l16502"></a><span class="lineno">16502</span>&#160;                <span class="keywordflow">if</span>(allocator-&gt;MemoryTypeIndexToHeapIndex(typeIndex) == heapIndex)</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;                    json.BeginString(<span class="stringliteral">&quot;Type &quot;</span>);</div>
-<div class="line"><a name="l16505"></a><span class="lineno">16505</span>&#160;                    json.ContinueString(typeIndex);</div>
-<div class="line"><a name="l16506"></a><span class="lineno">16506</span>&#160;                    json.EndString();</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;                    json.BeginObject();</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;                    json.WriteString(<span class="stringliteral">&quot;Flags&quot;</span>);</div>
-<div class="line"><a name="l16511"></a><span class="lineno">16511</span>&#160;                    json.BeginArray(<span class="keyword">true</span>);</div>
-<div class="line"><a name="l16512"></a><span class="lineno">16512</span>&#160;                    VkMemoryPropertyFlags flags = allocator-&gt;m_MemProps.memoryTypes[typeIndex].propertyFlags;</div>
-<div class="line"><a name="l16513"></a><span class="lineno">16513</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) != 0)</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;                        json.WriteString(<span class="stringliteral">&quot;DEVICE_LOCAL&quot;</span>);</div>
-<div class="line"><a name="l16516"></a><span class="lineno">16516</span>&#160;                    }</div>
-<div class="line"><a name="l16517"></a><span class="lineno">16517</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0)</div>
-<div class="line"><a name="l16518"></a><span class="lineno">16518</span>&#160;                    {</div>
-<div class="line"><a name="l16519"></a><span class="lineno">16519</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;HOST_VISIBLE&quot;</span>);</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;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) != 0)</div>
-<div class="line"><a name="l16522"></a><span class="lineno">16522</span>&#160;                    {</div>
-<div class="line"><a name="l16523"></a><span class="lineno">16523</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;HOST_COHERENT&quot;</span>);</div>
-<div class="line"><a name="l16524"></a><span class="lineno">16524</span>&#160;                    }</div>
-<div class="line"><a name="l16525"></a><span class="lineno">16525</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_HOST_CACHED_BIT) != 0)</div>
-<div class="line"><a name="l16526"></a><span class="lineno">16526</span>&#160;                    {</div>
-<div class="line"><a name="l16527"></a><span class="lineno">16527</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;HOST_CACHED&quot;</span>);</div>
-<div class="line"><a name="l16528"></a><span class="lineno">16528</span>&#160;                    }</div>
-<div class="line"><a name="l16529"></a><span class="lineno">16529</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT) != 0)</div>
-<div class="line"><a name="l16530"></a><span class="lineno">16530</span>&#160;                    {</div>
-<div class="line"><a name="l16531"></a><span class="lineno">16531</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;LAZILY_ALLOCATED&quot;</span>);</div>
-<div class="line"><a name="l16532"></a><span class="lineno">16532</span>&#160;                    }</div>
-<div class="line"><a name="l16533"></a><span class="lineno">16533</span>&#160;                    json.EndArray();</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;                    <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="l16502"></a><span class="lineno">16502</span>&#160;                json.WriteString(<span class="stringliteral">&quot;Stats&quot;</span>);</div>
+<div class="line"><a name="l16503"></a><span class="lineno">16503</span>&#160;                VmaPrintStatInfo(json, stats.<a class="code" href="struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0">memoryHeap</a>[heapIndex]);</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; </div>
+<div class="line"><a name="l16506"></a><span class="lineno">16506</span>&#160;            <span class="keywordflow">for</span>(uint32_t typeIndex = 0; typeIndex &lt; allocator-&gt;GetMemoryTypeCount(); ++typeIndex)</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;                <span class="keywordflow">if</span>(allocator-&gt;MemoryTypeIndexToHeapIndex(typeIndex) == heapIndex)</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;                    json.BeginString(<span class="stringliteral">&quot;Type &quot;</span>);</div>
+<div class="line"><a name="l16511"></a><span class="lineno">16511</span>&#160;                    json.ContinueString(typeIndex);</div>
+<div class="line"><a name="l16512"></a><span class="lineno">16512</span>&#160;                    json.EndString();</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;                    json.BeginObject();</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;                    json.WriteString(<span class="stringliteral">&quot;Flags&quot;</span>);</div>
+<div class="line"><a name="l16517"></a><span class="lineno">16517</span>&#160;                    json.BeginArray(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l16518"></a><span class="lineno">16518</span>&#160;                    VkMemoryPropertyFlags flags = allocator-&gt;m_MemProps.memoryTypes[typeIndex].propertyFlags;</div>
+<div class="line"><a name="l16519"></a><span class="lineno">16519</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) != 0)</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;                        json.WriteString(<span class="stringliteral">&quot;DEVICE_LOCAL&quot;</span>);</div>
+<div class="line"><a name="l16522"></a><span class="lineno">16522</span>&#160;                    }</div>
+<div class="line"><a name="l16523"></a><span class="lineno">16523</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0)</div>
+<div class="line"><a name="l16524"></a><span class="lineno">16524</span>&#160;                    {</div>
+<div class="line"><a name="l16525"></a><span class="lineno">16525</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;HOST_VISIBLE&quot;</span>);</div>
+<div class="line"><a name="l16526"></a><span class="lineno">16526</span>&#160;                    }</div>
+<div class="line"><a name="l16527"></a><span class="lineno">16527</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) != 0)</div>
+<div class="line"><a name="l16528"></a><span class="lineno">16528</span>&#160;                    {</div>
+<div class="line"><a name="l16529"></a><span class="lineno">16529</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;HOST_COHERENT&quot;</span>);</div>
+<div class="line"><a name="l16530"></a><span class="lineno">16530</span>&#160;                    }</div>
+<div class="line"><a name="l16531"></a><span class="lineno">16531</span>&#160;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_HOST_CACHED_BIT) != 0)</div>
+<div class="line"><a name="l16532"></a><span class="lineno">16532</span>&#160;                    {</div>
+<div class="line"><a name="l16533"></a><span class="lineno">16533</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;HOST_CACHED&quot;</span>);</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;                    <span class="keywordflow">if</span>((flags &amp; VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT) != 0)</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;                        json.WriteString(<span class="stringliteral">&quot;Stats&quot;</span>);</div>
-<div class="line"><a name="l16538"></a><span class="lineno">16538</span>&#160;                        VmaPrintStatInfo(json, stats.<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[typeIndex]);</div>
-<div class="line"><a name="l16539"></a><span class="lineno">16539</span>&#160;                    }</div>
+<div class="line"><a name="l16537"></a><span class="lineno">16537</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;LAZILY_ALLOCATED&quot;</span>);</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;                    json.EndArray();</div>
 <div class="line"><a name="l16540"></a><span class="lineno">16540</span>&#160; </div>
-<div class="line"><a name="l16541"></a><span class="lineno">16541</span>&#160;                    json.EndObject();</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;            }</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;            json.EndObject();</div>
-<div class="line"><a name="l16546"></a><span class="lineno">16546</span>&#160;        }</div>
-<div class="line"><a name="l16547"></a><span class="lineno">16547</span>&#160;        <span class="keywordflow">if</span>(detailedMap == VK_TRUE)</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;            allocator-&gt;PrintDetailedMap(json);</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;        json.EndObject();</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; </div>
-<div class="line"><a name="l16555"></a><span class="lineno">16555</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> len = sb.GetLength();</div>
-<div class="line"><a name="l16556"></a><span class="lineno">16556</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="l16557"></a><span class="lineno">16557</span>&#160;    <span class="keywordflow">if</span>(len &gt; 0)</div>
-<div class="line"><a name="l16558"></a><span class="lineno">16558</span>&#160;    {</div>
-<div class="line"><a name="l16559"></a><span class="lineno">16559</span>&#160;        memcpy(pChars, sb.GetData(), len);</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;    pChars[len] = <span class="charliteral">&#39;\0&#39;</span>;</div>
-<div class="line"><a name="l16562"></a><span class="lineno">16562</span>&#160;    *ppStatsString = pChars;</div>
-<div class="line"><a name="l16563"></a><span class="lineno">16563</span>&#160;}</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;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="l16566"></a><span class="lineno">16566</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16567"></a><span class="lineno">16567</span>&#160;    <span class="keywordtype">char</span>* pStatsString)</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>(pStatsString != VMA_NULL)</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;        VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l16572"></a><span class="lineno">16572</span>&#160;        <span class="keywordtype">size_t</span> len = strlen(pStatsString);</div>
-<div class="line"><a name="l16573"></a><span class="lineno">16573</span>&#160;        vma_delete_array(allocator, pStatsString, len + 1);</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;}</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="preprocessor">#endif // #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l16578"></a><span class="lineno">16578</span>&#160; </div>
-<div class="line"><a name="l16579"></a><span class="lineno">16579</span>&#160;<span class="comment">/*</span></div>
-<div class="line"><a name="l16580"></a><span class="lineno">16580</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="l16581"></a><span class="lineno">16581</span>&#160;<span class="comment">*/</span></div>
-<div class="line"><a name="l16582"></a><span class="lineno">16582</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="l16583"></a><span class="lineno">16583</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16584"></a><span class="lineno">16584</span>&#160;    uint32_t memoryTypeBits,</div>
-<div class="line"><a name="l16585"></a><span class="lineno">16585</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="l16586"></a><span class="lineno">16586</span>&#160;    uint32_t* pMemoryTypeIndex)</div>
-<div class="line"><a name="l16587"></a><span class="lineno">16587</span>&#160;{</div>
-<div class="line"><a name="l16588"></a><span class="lineno">16588</span>&#160;    VMA_ASSERT(allocator != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l16589"></a><span class="lineno">16589</span>&#160;    VMA_ASSERT(pAllocationCreateInfo != VMA_NULL);</div>
-<div class="line"><a name="l16590"></a><span class="lineno">16590</span>&#160;    VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);</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">if</span>(pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a> != 0)</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;        memoryTypeBits &amp;= pAllocationCreateInfo-&gt;<a class="code" href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">memoryTypeBits</a>;</div>
-<div class="line"><a name="l16595"></a><span class="lineno">16595</span>&#160;    }</div>
-<div class="line"><a name="l16596"></a><span class="lineno">16596</span>&#160;    </div>
-<div class="line"><a name="l16597"></a><span class="lineno">16597</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="l16598"></a><span class="lineno">16598</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="l16599"></a><span class="lineno">16599</span>&#160;    uint32_t notPreferredFlags = 0;</div>
-<div class="line"><a name="l16600"></a><span class="lineno">16600</span>&#160; </div>
-<div class="line"><a name="l16601"></a><span class="lineno">16601</span>&#160;    <span class="comment">// Convert usage to requiredFlags and preferredFlags.</span></div>
-<div class="line"><a name="l16602"></a><span class="lineno">16602</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="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">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a>:</div>
-<div class="line"><a name="l16605"></a><span class="lineno">16605</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16606"></a><span class="lineno">16606</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="l16607"></a><span class="lineno">16607</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="l16608"></a><span class="lineno">16608</span>&#160;        {</div>
-<div class="line"><a name="l16609"></a><span class="lineno">16609</span>&#160;            preferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;</div>
-<div class="line"><a name="l16610"></a><span class="lineno">16610</span>&#160;        }</div>
+<div class="line"><a name="l16541"></a><span class="lineno">16541</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="l16542"></a><span class="lineno">16542</span>&#160;                    {</div>
+<div class="line"><a name="l16543"></a><span class="lineno">16543</span>&#160;                        json.WriteString(<span class="stringliteral">&quot;Stats&quot;</span>);</div>
+<div class="line"><a name="l16544"></a><span class="lineno">16544</span>&#160;                        VmaPrintStatInfo(json, stats.<a class="code" href="struct_vma_stats.html#a13e3caf754be79352c42408756309331">memoryType</a>[typeIndex]);</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; </div>
+<div class="line"><a name="l16547"></a><span class="lineno">16547</span>&#160;                    json.EndObject();</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;            }</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;            json.EndObject();</div>
+<div class="line"><a name="l16552"></a><span class="lineno">16552</span>&#160;        }</div>
+<div class="line"><a name="l16553"></a><span class="lineno">16553</span>&#160;        <span class="keywordflow">if</span>(detailedMap == VK_TRUE)</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;            allocator-&gt;PrintDetailedMap(json);</div>
+<div class="line"><a name="l16556"></a><span class="lineno">16556</span>&#160;        }</div>
+<div class="line"><a name="l16557"></a><span class="lineno">16557</span>&#160; </div>
+<div class="line"><a name="l16558"></a><span class="lineno">16558</span>&#160;        json.EndObject();</div>
+<div class="line"><a name="l16559"></a><span class="lineno">16559</span>&#160;    }</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="keyword">const</span> <span class="keywordtype">size_t</span> len = sb.GetLength();</div>
+<div class="line"><a name="l16562"></a><span class="lineno">16562</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="l16563"></a><span class="lineno">16563</span>&#160;    <span class="keywordflow">if</span>(len &gt; 0)</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;        memcpy(pChars, sb.GetData(), len);</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;    pChars[len] = <span class="charliteral">&#39;\0&#39;</span>;</div>
+<div class="line"><a name="l16568"></a><span class="lineno">16568</span>&#160;    *ppStatsString = pChars;</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; </div>
+<div class="line"><a name="l16571"></a><span class="lineno">16571</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="l16572"></a><span class="lineno">16572</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16573"></a><span class="lineno">16573</span>&#160;    <span class="keywordtype">char</span>* pStatsString)</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">if</span>(pStatsString != VMA_NULL)</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;        VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l16578"></a><span class="lineno">16578</span>&#160;        <span class="keywordtype">size_t</span> len = strlen(pStatsString);</div>
+<div class="line"><a name="l16579"></a><span class="lineno">16579</span>&#160;        vma_delete_array(allocator, pStatsString, len + 1);</div>
+<div class="line"><a name="l16580"></a><span class="lineno">16580</span>&#160;    }</div>
+<div class="line"><a name="l16581"></a><span class="lineno">16581</span>&#160;}</div>
+<div class="line"><a name="l16582"></a><span class="lineno">16582</span>&#160; </div>
+<div class="line"><a name="l16583"></a><span class="lineno">16583</span>&#160;<span class="preprocessor">#endif // #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l16584"></a><span class="lineno">16584</span>&#160; </div>
+<div class="line"><a name="l16585"></a><span class="lineno">16585</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l16586"></a><span class="lineno">16586</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="l16587"></a><span class="lineno">16587</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l16588"></a><span class="lineno">16588</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="l16589"></a><span class="lineno">16589</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16590"></a><span class="lineno">16590</span>&#160;    uint32_t memoryTypeBits,</div>
+<div class="line"><a name="l16591"></a><span class="lineno">16591</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="l16592"></a><span class="lineno">16592</span>&#160;    uint32_t* pMemoryTypeIndex)</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;    VMA_ASSERT(allocator != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l16595"></a><span class="lineno">16595</span>&#160;    VMA_ASSERT(pAllocationCreateInfo != VMA_NULL);</div>
+<div class="line"><a name="l16596"></a><span class="lineno">16596</span>&#160;    VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);</div>
+<div class="line"><a name="l16597"></a><span class="lineno">16597</span>&#160; </div>
+<div class="line"><a name="l16598"></a><span class="lineno">16598</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="l16599"></a><span class="lineno">16599</span>&#160;    {</div>
+<div class="line"><a name="l16600"></a><span class="lineno">16600</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="l16601"></a><span class="lineno">16601</span>&#160;    }</div>
+<div class="line"><a name="l16602"></a><span class="lineno">16602</span>&#160;    </div>
+<div class="line"><a name="l16603"></a><span class="lineno">16603</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="l16604"></a><span class="lineno">16604</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="l16605"></a><span class="lineno">16605</span>&#160;    uint32_t notPreferredFlags = 0;</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">// Convert usage to requiredFlags and preferredFlags.</span></div>
+<div class="line"><a name="l16608"></a><span class="lineno">16608</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="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">case</span> <a class="code" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a>:</div>
 <div class="line"><a name="l16611"></a><span class="lineno">16611</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16612"></a><span class="lineno">16612</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="l16613"></a><span class="lineno">16613</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;</div>
-<div class="line"><a name="l16614"></a><span class="lineno">16614</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16615"></a><span class="lineno">16615</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="l16616"></a><span class="lineno">16616</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;</div>
-<div class="line"><a name="l16617"></a><span class="lineno">16617</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="l16618"></a><span class="lineno">16618</span>&#160;        {</div>
-<div class="line"><a name="l16619"></a><span class="lineno">16619</span>&#160;            preferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;</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;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16622"></a><span class="lineno">16622</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="l16623"></a><span class="lineno">16623</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;</div>
-<div class="line"><a name="l16624"></a><span class="lineno">16624</span>&#160;        preferredFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT;</div>
-<div class="line"><a name="l16625"></a><span class="lineno">16625</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16626"></a><span class="lineno">16626</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="l16627"></a><span class="lineno">16627</span>&#160;        notPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;</div>
-<div class="line"><a name="l16628"></a><span class="lineno">16628</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16629"></a><span class="lineno">16629</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="l16630"></a><span class="lineno">16630</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;</div>
+<div class="line"><a name="l16612"></a><span class="lineno">16612</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="l16613"></a><span class="lineno">16613</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="l16614"></a><span class="lineno">16614</span>&#160;        {</div>
+<div class="line"><a name="l16615"></a><span class="lineno">16615</span>&#160;            preferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;</div>
+<div class="line"><a name="l16616"></a><span class="lineno">16616</span>&#160;        }</div>
+<div class="line"><a name="l16617"></a><span class="lineno">16617</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l16618"></a><span class="lineno">16618</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="l16619"></a><span class="lineno">16619</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;</div>
+<div class="line"><a name="l16620"></a><span class="lineno">16620</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l16621"></a><span class="lineno">16621</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="l16622"></a><span class="lineno">16622</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;</div>
+<div class="line"><a name="l16623"></a><span class="lineno">16623</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="l16624"></a><span class="lineno">16624</span>&#160;        {</div>
+<div class="line"><a name="l16625"></a><span class="lineno">16625</span>&#160;            preferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;</div>
+<div class="line"><a name="l16626"></a><span class="lineno">16626</span>&#160;        }</div>
+<div class="line"><a name="l16627"></a><span class="lineno">16627</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l16628"></a><span class="lineno">16628</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="l16629"></a><span class="lineno">16629</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;</div>
+<div class="line"><a name="l16630"></a><span class="lineno">16630</span>&#160;        preferredFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT;</div>
 <div class="line"><a name="l16631"></a><span class="lineno">16631</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16632"></a><span class="lineno">16632</span>&#160;    <span class="keywordflow">default</span>:</div>
-<div class="line"><a name="l16633"></a><span class="lineno">16633</span>&#160;        VMA_ASSERT(0);</div>
+<div class="line"><a name="l16632"></a><span class="lineno">16632</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="l16633"></a><span class="lineno">16633</span>&#160;        notPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;</div>
 <div class="line"><a name="l16634"></a><span class="lineno">16634</span>&#160;        <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l16635"></a><span class="lineno">16635</span>&#160;    }</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;    *pMemoryTypeIndex = UINT32_MAX;</div>
-<div class="line"><a name="l16638"></a><span class="lineno">16638</span>&#160;    uint32_t minCost = UINT32_MAX;</div>
-<div class="line"><a name="l16639"></a><span class="lineno">16639</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0, memTypeBit = 1;</div>
-<div class="line"><a name="l16640"></a><span class="lineno">16640</span>&#160;        memTypeIndex &lt; allocator-&gt;GetMemoryTypeCount();</div>
-<div class="line"><a name="l16641"></a><span class="lineno">16641</span>&#160;        ++memTypeIndex, memTypeBit &lt;&lt;= 1)</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">// This memory type is acceptable according to memoryTypeBits bitmask.</span></div>
-<div class="line"><a name="l16644"></a><span class="lineno">16644</span>&#160;        <span class="keywordflow">if</span>((memTypeBit &amp; memoryTypeBits) != 0)</div>
-<div class="line"><a name="l16645"></a><span class="lineno">16645</span>&#160;        {</div>
-<div class="line"><a name="l16646"></a><span class="lineno">16646</span>&#160;            <span class="keyword">const</span> VkMemoryPropertyFlags currFlags =</div>
-<div class="line"><a name="l16647"></a><span class="lineno">16647</span>&#160;                allocator-&gt;m_MemProps.memoryTypes[memTypeIndex].propertyFlags;</div>
-<div class="line"><a name="l16648"></a><span class="lineno">16648</span>&#160;            <span class="comment">// This memory type contains requiredFlags.</span></div>
-<div class="line"><a name="l16649"></a><span class="lineno">16649</span>&#160;            <span class="keywordflow">if</span>((requiredFlags &amp; ~currFlags) == 0)</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;                <span class="comment">// Calculate cost as number of bits from preferredFlags not present in this memory type.</span></div>
-<div class="line"><a name="l16652"></a><span class="lineno">16652</span>&#160;                uint32_t currCost = VmaCountBitsSet(preferredFlags &amp; ~currFlags) +</div>
-<div class="line"><a name="l16653"></a><span class="lineno">16653</span>&#160;                    VmaCountBitsSet(currFlags &amp; notPreferredFlags);</div>
-<div class="line"><a name="l16654"></a><span class="lineno">16654</span>&#160;                <span class="comment">// Remember memory type with lowest cost.</span></div>
-<div class="line"><a name="l16655"></a><span class="lineno">16655</span>&#160;                <span class="keywordflow">if</span>(currCost &lt; minCost)</div>
-<div class="line"><a name="l16656"></a><span class="lineno">16656</span>&#160;                {</div>
-<div class="line"><a name="l16657"></a><span class="lineno">16657</span>&#160;                    *pMemoryTypeIndex = memTypeIndex;</div>
-<div class="line"><a name="l16658"></a><span class="lineno">16658</span>&#160;                    <span class="keywordflow">if</span>(currCost == 0)</div>
-<div class="line"><a name="l16659"></a><span class="lineno">16659</span>&#160;                    {</div>
-<div class="line"><a name="l16660"></a><span class="lineno">16660</span>&#160;                        <span class="keywordflow">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l16661"></a><span class="lineno">16661</span>&#160;                    }</div>
-<div class="line"><a name="l16662"></a><span class="lineno">16662</span>&#160;                    minCost = currCost;</div>
-<div class="line"><a name="l16663"></a><span class="lineno">16663</span>&#160;                }</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;        }</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">return</span> (*pMemoryTypeIndex != UINT32_MAX) ? VK_SUCCESS : VK_ERROR_FEATURE_NOT_PRESENT;</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; </div>
-<div class="line"><a name="l16670"></a><span class="lineno">16670</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="l16671"></a><span class="lineno">16671</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16672"></a><span class="lineno">16672</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* pBufferCreateInfo,</div>
-<div class="line"><a name="l16673"></a><span class="lineno">16673</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="l16674"></a><span class="lineno">16674</span>&#160;    uint32_t* pMemoryTypeIndex)</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;    VMA_ASSERT(allocator != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l16677"></a><span class="lineno">16677</span>&#160;    VMA_ASSERT(pBufferCreateInfo != VMA_NULL);</div>
-<div class="line"><a name="l16678"></a><span class="lineno">16678</span>&#160;    VMA_ASSERT(pAllocationCreateInfo != VMA_NULL);</div>
-<div class="line"><a name="l16679"></a><span class="lineno">16679</span>&#160;    VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);</div>
-<div class="line"><a name="l16680"></a><span class="lineno">16680</span>&#160; </div>
-<div class="line"><a name="l16681"></a><span class="lineno">16681</span>&#160;    <span class="keyword">const</span> VkDevice hDev = allocator-&gt;m_hDevice;</div>
-<div class="line"><a name="l16682"></a><span class="lineno">16682</span>&#160;    VkBuffer hBuffer = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l16683"></a><span class="lineno">16683</span>&#160;    VkResult res = allocator-&gt;GetVulkanFunctions().vkCreateBuffer(</div>
-<div class="line"><a name="l16684"></a><span class="lineno">16684</span>&#160;        hDev, pBufferCreateInfo, allocator-&gt;GetAllocationCallbacks(), &amp;hBuffer);</div>
-<div class="line"><a name="l16685"></a><span class="lineno">16685</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;        VkMemoryRequirements memReq = {};</div>
-<div class="line"><a name="l16688"></a><span class="lineno">16688</span>&#160;        allocator-&gt;GetVulkanFunctions().vkGetBufferMemoryRequirements(</div>
-<div class="line"><a name="l16689"></a><span class="lineno">16689</span>&#160;            hDev, hBuffer, &amp;memReq);</div>
-<div class="line"><a name="l16690"></a><span class="lineno">16690</span>&#160; </div>
-<div class="line"><a name="l16691"></a><span class="lineno">16691</span>&#160;        res = <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(</div>
-<div class="line"><a name="l16692"></a><span class="lineno">16692</span>&#160;            allocator,</div>
-<div class="line"><a name="l16693"></a><span class="lineno">16693</span>&#160;            memReq.memoryTypeBits,</div>
-<div class="line"><a name="l16694"></a><span class="lineno">16694</span>&#160;            pAllocationCreateInfo,</div>
-<div class="line"><a name="l16695"></a><span class="lineno">16695</span>&#160;            pMemoryTypeIndex);</div>
+<div class="line"><a name="l16635"></a><span class="lineno">16635</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="l16636"></a><span class="lineno">16636</span>&#160;        requiredFlags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;</div>
+<div class="line"><a name="l16637"></a><span class="lineno">16637</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l16638"></a><span class="lineno">16638</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l16639"></a><span class="lineno">16639</span>&#160;        VMA_ASSERT(0);</div>
+<div class="line"><a name="l16640"></a><span class="lineno">16640</span>&#160;        <span class="keywordflow">break</span>;</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; </div>
+<div class="line"><a name="l16643"></a><span class="lineno">16643</span>&#160;    *pMemoryTypeIndex = UINT32_MAX;</div>
+<div class="line"><a name="l16644"></a><span class="lineno">16644</span>&#160;    uint32_t minCost = UINT32_MAX;</div>
+<div class="line"><a name="l16645"></a><span class="lineno">16645</span>&#160;    <span class="keywordflow">for</span>(uint32_t memTypeIndex = 0, memTypeBit = 1;</div>
+<div class="line"><a name="l16646"></a><span class="lineno">16646</span>&#160;        memTypeIndex &lt; allocator-&gt;GetMemoryTypeCount();</div>
+<div class="line"><a name="l16647"></a><span class="lineno">16647</span>&#160;        ++memTypeIndex, memTypeBit &lt;&lt;= 1)</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;        <span class="comment">// This memory type is acceptable according to memoryTypeBits bitmask.</span></div>
+<div class="line"><a name="l16650"></a><span class="lineno">16650</span>&#160;        <span class="keywordflow">if</span>((memTypeBit &amp; memoryTypeBits) != 0)</div>
+<div class="line"><a name="l16651"></a><span class="lineno">16651</span>&#160;        {</div>
+<div class="line"><a name="l16652"></a><span class="lineno">16652</span>&#160;            <span class="keyword">const</span> VkMemoryPropertyFlags currFlags =</div>
+<div class="line"><a name="l16653"></a><span class="lineno">16653</span>&#160;                allocator-&gt;m_MemProps.memoryTypes[memTypeIndex].propertyFlags;</div>
+<div class="line"><a name="l16654"></a><span class="lineno">16654</span>&#160;            <span class="comment">// This memory type contains requiredFlags.</span></div>
+<div class="line"><a name="l16655"></a><span class="lineno">16655</span>&#160;            <span class="keywordflow">if</span>((requiredFlags &amp; ~currFlags) == 0)</div>
+<div class="line"><a name="l16656"></a><span class="lineno">16656</span>&#160;            {</div>
+<div class="line"><a name="l16657"></a><span class="lineno">16657</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="l16658"></a><span class="lineno">16658</span>&#160;                uint32_t currCost = VmaCountBitsSet(preferredFlags &amp; ~currFlags) +</div>
+<div class="line"><a name="l16659"></a><span class="lineno">16659</span>&#160;                    VmaCountBitsSet(currFlags &amp; notPreferredFlags);</div>
+<div class="line"><a name="l16660"></a><span class="lineno">16660</span>&#160;                <span class="comment">// Remember memory type with lowest cost.</span></div>
+<div class="line"><a name="l16661"></a><span class="lineno">16661</span>&#160;                <span class="keywordflow">if</span>(currCost &lt; minCost)</div>
+<div class="line"><a name="l16662"></a><span class="lineno">16662</span>&#160;                {</div>
+<div class="line"><a name="l16663"></a><span class="lineno">16663</span>&#160;                    *pMemoryTypeIndex = memTypeIndex;</div>
+<div class="line"><a name="l16664"></a><span class="lineno">16664</span>&#160;                    <span class="keywordflow">if</span>(currCost == 0)</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;                        <span class="keywordflow">return</span> VK_SUCCESS;</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;                    minCost = currCost;</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;            }</div>
+<div class="line"><a name="l16671"></a><span class="lineno">16671</span>&#160;        }</div>
+<div class="line"><a name="l16672"></a><span class="lineno">16672</span>&#160;    }</div>
+<div class="line"><a name="l16673"></a><span class="lineno">16673</span>&#160;    <span class="keywordflow">return</span> (*pMemoryTypeIndex != UINT32_MAX) ? VK_SUCCESS : VK_ERROR_FEATURE_NOT_PRESENT;</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; </div>
+<div class="line"><a name="l16676"></a><span class="lineno">16676</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="l16677"></a><span class="lineno">16677</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16678"></a><span class="lineno">16678</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* pBufferCreateInfo,</div>
+<div class="line"><a name="l16679"></a><span class="lineno">16679</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="l16680"></a><span class="lineno">16680</span>&#160;    uint32_t* pMemoryTypeIndex)</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;    VMA_ASSERT(allocator != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l16683"></a><span class="lineno">16683</span>&#160;    VMA_ASSERT(pBufferCreateInfo != VMA_NULL);</div>
+<div class="line"><a name="l16684"></a><span class="lineno">16684</span>&#160;    VMA_ASSERT(pAllocationCreateInfo != VMA_NULL);</div>
+<div class="line"><a name="l16685"></a><span class="lineno">16685</span>&#160;    VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);</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="keyword">const</span> VkDevice hDev = allocator-&gt;m_hDevice;</div>
+<div class="line"><a name="l16688"></a><span class="lineno">16688</span>&#160;    VkBuffer hBuffer = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l16689"></a><span class="lineno">16689</span>&#160;    VkResult res = allocator-&gt;GetVulkanFunctions().vkCreateBuffer(</div>
+<div class="line"><a name="l16690"></a><span class="lineno">16690</span>&#160;        hDev, pBufferCreateInfo, allocator-&gt;GetAllocationCallbacks(), &amp;hBuffer);</div>
+<div class="line"><a name="l16691"></a><span class="lineno">16691</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;        VkMemoryRequirements memReq = {};</div>
+<div class="line"><a name="l16694"></a><span class="lineno">16694</span>&#160;        allocator-&gt;GetVulkanFunctions().vkGetBufferMemoryRequirements(</div>
+<div class="line"><a name="l16695"></a><span class="lineno">16695</span>&#160;            hDev, hBuffer, &amp;memReq);</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;        allocator-&gt;GetVulkanFunctions().vkDestroyBuffer(</div>
-<div class="line"><a name="l16698"></a><span class="lineno">16698</span>&#160;            hDev, hBuffer, allocator-&gt;GetAllocationCallbacks());</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="keywordflow">return</span> res;</div>
-<div class="line"><a name="l16701"></a><span class="lineno">16701</span>&#160;}</div>
+<div class="line"><a name="l16697"></a><span class="lineno">16697</span>&#160;        res = <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(</div>
+<div class="line"><a name="l16698"></a><span class="lineno">16698</span>&#160;            allocator,</div>
+<div class="line"><a name="l16699"></a><span class="lineno">16699</span>&#160;            memReq.memoryTypeBits,</div>
+<div class="line"><a name="l16700"></a><span class="lineno">16700</span>&#160;            pAllocationCreateInfo,</div>
+<div class="line"><a name="l16701"></a><span class="lineno">16701</span>&#160;            pMemoryTypeIndex);</div>
 <div class="line"><a name="l16702"></a><span class="lineno">16702</span>&#160; </div>
-<div class="line"><a name="l16703"></a><span class="lineno">16703</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="l16704"></a><span class="lineno">16704</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16705"></a><span class="lineno">16705</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo* pImageCreateInfo,</div>
-<div class="line"><a name="l16706"></a><span class="lineno">16706</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="l16707"></a><span class="lineno">16707</span>&#160;    uint32_t* pMemoryTypeIndex)</div>
-<div class="line"><a name="l16708"></a><span class="lineno">16708</span>&#160;{</div>
-<div class="line"><a name="l16709"></a><span class="lineno">16709</span>&#160;    VMA_ASSERT(allocator != VK_NULL_HANDLE);</div>
-<div class="line"><a name="l16710"></a><span class="lineno">16710</span>&#160;    VMA_ASSERT(pImageCreateInfo != VMA_NULL);</div>
-<div class="line"><a name="l16711"></a><span class="lineno">16711</span>&#160;    VMA_ASSERT(pAllocationCreateInfo != VMA_NULL);</div>
-<div class="line"><a name="l16712"></a><span class="lineno">16712</span>&#160;    VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);</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="keyword">const</span> VkDevice hDev = allocator-&gt;m_hDevice;</div>
-<div class="line"><a name="l16715"></a><span class="lineno">16715</span>&#160;    VkImage hImage = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l16716"></a><span class="lineno">16716</span>&#160;    VkResult res = allocator-&gt;GetVulkanFunctions().vkCreateImage(</div>
-<div class="line"><a name="l16717"></a><span class="lineno">16717</span>&#160;        hDev, pImageCreateInfo, allocator-&gt;GetAllocationCallbacks(), &amp;hImage);</div>
-<div class="line"><a name="l16718"></a><span class="lineno">16718</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;        VkMemoryRequirements memReq = {};</div>
-<div class="line"><a name="l16721"></a><span class="lineno">16721</span>&#160;        allocator-&gt;GetVulkanFunctions().vkGetImageMemoryRequirements(</div>
-<div class="line"><a name="l16722"></a><span class="lineno">16722</span>&#160;            hDev, hImage, &amp;memReq);</div>
-<div class="line"><a name="l16723"></a><span class="lineno">16723</span>&#160; </div>
-<div class="line"><a name="l16724"></a><span class="lineno">16724</span>&#160;        res = <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(</div>
-<div class="line"><a name="l16725"></a><span class="lineno">16725</span>&#160;            allocator,</div>
-<div class="line"><a name="l16726"></a><span class="lineno">16726</span>&#160;            memReq.memoryTypeBits,</div>
-<div class="line"><a name="l16727"></a><span class="lineno">16727</span>&#160;            pAllocationCreateInfo,</div>
-<div class="line"><a name="l16728"></a><span class="lineno">16728</span>&#160;            pMemoryTypeIndex);</div>
+<div class="line"><a name="l16703"></a><span class="lineno">16703</span>&#160;        allocator-&gt;GetVulkanFunctions().vkDestroyBuffer(</div>
+<div class="line"><a name="l16704"></a><span class="lineno">16704</span>&#160;            hDev, hBuffer, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l16705"></a><span class="lineno">16705</span>&#160;    }</div>
+<div class="line"><a name="l16706"></a><span class="lineno">16706</span>&#160;    <span class="keywordflow">return</span> res;</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; </div>
+<div class="line"><a name="l16709"></a><span class="lineno">16709</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="l16710"></a><span class="lineno">16710</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16711"></a><span class="lineno">16711</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo* pImageCreateInfo,</div>
+<div class="line"><a name="l16712"></a><span class="lineno">16712</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="l16713"></a><span class="lineno">16713</span>&#160;    uint32_t* pMemoryTypeIndex)</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;    VMA_ASSERT(allocator != VK_NULL_HANDLE);</div>
+<div class="line"><a name="l16716"></a><span class="lineno">16716</span>&#160;    VMA_ASSERT(pImageCreateInfo != VMA_NULL);</div>
+<div class="line"><a name="l16717"></a><span class="lineno">16717</span>&#160;    VMA_ASSERT(pAllocationCreateInfo != VMA_NULL);</div>
+<div class="line"><a name="l16718"></a><span class="lineno">16718</span>&#160;    VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);</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="keyword">const</span> VkDevice hDev = allocator-&gt;m_hDevice;</div>
+<div class="line"><a name="l16721"></a><span class="lineno">16721</span>&#160;    VkImage hImage = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l16722"></a><span class="lineno">16722</span>&#160;    VkResult res = allocator-&gt;GetVulkanFunctions().vkCreateImage(</div>
+<div class="line"><a name="l16723"></a><span class="lineno">16723</span>&#160;        hDev, pImageCreateInfo, allocator-&gt;GetAllocationCallbacks(), &amp;hImage);</div>
+<div class="line"><a name="l16724"></a><span class="lineno">16724</span>&#160;    <span class="keywordflow">if</span>(res == VK_SUCCESS)</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;        VkMemoryRequirements memReq = {};</div>
+<div class="line"><a name="l16727"></a><span class="lineno">16727</span>&#160;        allocator-&gt;GetVulkanFunctions().vkGetImageMemoryRequirements(</div>
+<div class="line"><a name="l16728"></a><span class="lineno">16728</span>&#160;            hDev, hImage, &amp;memReq);</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;        allocator-&gt;GetVulkanFunctions().vkDestroyImage(</div>
-<div class="line"><a name="l16731"></a><span class="lineno">16731</span>&#160;            hDev, hImage, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l16732"></a><span class="lineno">16732</span>&#160;    }</div>
-<div class="line"><a name="l16733"></a><span class="lineno">16733</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l16734"></a><span class="lineno">16734</span>&#160;}</div>
+<div class="line"><a name="l16730"></a><span class="lineno">16730</span>&#160;        res = <a class="code" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a>(</div>
+<div class="line"><a name="l16731"></a><span class="lineno">16731</span>&#160;            allocator,</div>
+<div class="line"><a name="l16732"></a><span class="lineno">16732</span>&#160;            memReq.memoryTypeBits,</div>
+<div class="line"><a name="l16733"></a><span class="lineno">16733</span>&#160;            pAllocationCreateInfo,</div>
+<div class="line"><a name="l16734"></a><span class="lineno">16734</span>&#160;            pMemoryTypeIndex);</div>
 <div class="line"><a name="l16735"></a><span class="lineno">16735</span>&#160; </div>
-<div class="line"><a name="l16736"></a><span class="lineno">16736</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="l16737"></a><span class="lineno">16737</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16738"></a><span class="lineno">16738</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="l16739"></a><span class="lineno">16739</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a>* pPool)</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;    VMA_ASSERT(allocator &amp;&amp; pCreateInfo &amp;&amp; pPool);</div>
-<div class="line"><a name="l16742"></a><span class="lineno">16742</span>&#160;    </div>
-<div class="line"><a name="l16743"></a><span class="lineno">16743</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreatePool&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l16746"></a><span class="lineno">16746</span>&#160;    </div>
-<div class="line"><a name="l16747"></a><span class="lineno">16747</span>&#160;    VkResult res = allocator-&gt;CreatePool(pCreateInfo, pPool);</div>
+<div class="line"><a name="l16736"></a><span class="lineno">16736</span>&#160;        allocator-&gt;GetVulkanFunctions().vkDestroyImage(</div>
+<div class="line"><a name="l16737"></a><span class="lineno">16737</span>&#160;            hDev, hImage, allocator-&gt;GetAllocationCallbacks());</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="keywordflow">return</span> res;</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; </div>
+<div class="line"><a name="l16742"></a><span class="lineno">16742</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="l16743"></a><span class="lineno">16743</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16744"></a><span class="lineno">16744</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="l16745"></a><span class="lineno">16745</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a>* pPool)</div>
+<div class="line"><a name="l16746"></a><span class="lineno">16746</span>&#160;{</div>
+<div class="line"><a name="l16747"></a><span class="lineno">16747</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pCreateInfo &amp;&amp; pPool);</div>
 <div class="line"><a name="l16748"></a><span class="lineno">16748</span>&#160;    </div>
-<div class="line"><a name="l16749"></a><span class="lineno">16749</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l16750"></a><span class="lineno">16750</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l16751"></a><span class="lineno">16751</span>&#160;    {</div>
-<div class="line"><a name="l16752"></a><span class="lineno">16752</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordCreatePool(allocator-&gt;GetCurrentFrameIndex(), *pCreateInfo, *pPool);</div>
-<div class="line"><a name="l16753"></a><span class="lineno">16753</span>&#160;    }</div>
-<div class="line"><a name="l16754"></a><span class="lineno">16754</span>&#160;<span class="preprocessor">#endif</span></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">return</span> res;</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;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="l16760"></a><span class="lineno">16760</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16761"></a><span class="lineno">16761</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</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;    VMA_ASSERT(allocator);</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;    <span class="keywordflow">if</span>(pool == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l16766"></a><span class="lineno">16766</span>&#160;    {</div>
-<div class="line"><a name="l16767"></a><span class="lineno">16767</span>&#160;        <span class="keywordflow">return</span>;</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;    </div>
-<div class="line"><a name="l16770"></a><span class="lineno">16770</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyPool&quot;</span>);</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_GLOBAL_MUTEX_LOCK</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l16775"></a><span class="lineno">16775</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordDestroyPool(allocator-&gt;GetCurrentFrameIndex(), pool);</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;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16780"></a><span class="lineno">16780</span>&#160; </div>
-<div class="line"><a name="l16781"></a><span class="lineno">16781</span>&#160;    allocator-&gt;DestroyPool(pool);</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; </div>
-<div class="line"><a name="l16784"></a><span class="lineno">16784</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="l16785"></a><span class="lineno">16785</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16786"></a><span class="lineno">16786</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
-<div class="line"><a name="l16787"></a><span class="lineno">16787</span>&#160;    <a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>* pPoolStats)</div>
-<div class="line"><a name="l16788"></a><span class="lineno">16788</span>&#160;{</div>
-<div class="line"><a name="l16789"></a><span class="lineno">16789</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool &amp;&amp; pPoolStats);</div>
-<div class="line"><a name="l16790"></a><span class="lineno">16790</span>&#160; </div>
-<div class="line"><a name="l16791"></a><span class="lineno">16791</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    allocator-&gt;GetPoolStats(pool, pPoolStats);</div>
-<div class="line"><a name="l16794"></a><span class="lineno">16794</span>&#160;}</div>
-<div class="line"><a name="l16795"></a><span class="lineno">16795</span>&#160; </div>
-<div class="line"><a name="l16796"></a><span class="lineno">16796</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="l16797"></a><span class="lineno">16797</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16798"></a><span class="lineno">16798</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
-<div class="line"><a name="l16799"></a><span class="lineno">16799</span>&#160;    <span class="keywordtype">size_t</span>* pLostAllocationCount)</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;    VMA_ASSERT(allocator &amp;&amp; pool);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l16806"></a><span class="lineno">16806</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l16807"></a><span class="lineno">16807</span>&#160;    {</div>
-<div class="line"><a name="l16808"></a><span class="lineno">16808</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordMakePoolAllocationsLost(allocator-&gt;GetCurrentFrameIndex(), pool);</div>
-<div class="line"><a name="l16809"></a><span class="lineno">16809</span>&#160;    }</div>
-<div class="line"><a name="l16810"></a><span class="lineno">16810</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16811"></a><span class="lineno">16811</span>&#160; </div>
-<div class="line"><a name="l16812"></a><span class="lineno">16812</span>&#160;    allocator-&gt;MakePoolAllocationsLost(pool, pLostAllocationCount);</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; </div>
-<div class="line"><a name="l16815"></a><span class="lineno">16815</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="l16816"></a><span class="lineno">16816</span>&#160;{</div>
-<div class="line"><a name="l16817"></a><span class="lineno">16817</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool);</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_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l16749"></a><span class="lineno">16749</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreatePool&quot;</span>);</div>
+<div class="line"><a name="l16750"></a><span class="lineno">16750</span>&#160;    </div>
+<div class="line"><a name="l16751"></a><span class="lineno">16751</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l16752"></a><span class="lineno">16752</span>&#160;    </div>
+<div class="line"><a name="l16753"></a><span class="lineno">16753</span>&#160;    VkResult res = allocator-&gt;CreatePool(pCreateInfo, pPool);</div>
+<div class="line"><a name="l16754"></a><span class="lineno">16754</span>&#160;    </div>
+<div class="line"><a name="l16755"></a><span class="lineno">16755</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l16756"></a><span class="lineno">16756</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordCreatePool(allocator-&gt;GetCurrentFrameIndex(), *pCreateInfo, *pPool);</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="preprocessor">#endif</span></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="keywordflow">return</span> res;</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; </div>
+<div class="line"><a name="l16765"></a><span class="lineno">16765</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="l16766"></a><span class="lineno">16766</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16767"></a><span class="lineno">16767</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool)</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;    VMA_ASSERT(allocator);</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;    <span class="keywordflow">if</span>(pool == VK_NULL_HANDLE)</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;        <span class="keywordflow">return</span>;</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;    </div>
+<div class="line"><a name="l16776"></a><span class="lineno">16776</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyPool&quot;</span>);</div>
+<div class="line"><a name="l16777"></a><span class="lineno">16777</span>&#160;    </div>
+<div class="line"><a name="l16778"></a><span class="lineno">16778</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l16781"></a><span class="lineno">16781</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordDestroyPool(allocator-&gt;GetCurrentFrameIndex(), pool);</div>
+<div class="line"><a name="l16784"></a><span class="lineno">16784</span>&#160;    }</div>
+<div class="line"><a name="l16785"></a><span class="lineno">16785</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l16786"></a><span class="lineno">16786</span>&#160; </div>
+<div class="line"><a name="l16787"></a><span class="lineno">16787</span>&#160;    allocator-&gt;DestroyPool(pool);</div>
+<div class="line"><a name="l16788"></a><span class="lineno">16788</span>&#160;}</div>
+<div class="line"><a name="l16789"></a><span class="lineno">16789</span>&#160; </div>
+<div class="line"><a name="l16790"></a><span class="lineno">16790</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="l16791"></a><span class="lineno">16791</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16792"></a><span class="lineno">16792</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
+<div class="line"><a name="l16793"></a><span class="lineno">16793</span>&#160;    <a class="code" href="struct_vma_pool_stats.html">VmaPoolStats</a>* pPoolStats)</div>
+<div class="line"><a name="l16794"></a><span class="lineno">16794</span>&#160;{</div>
+<div class="line"><a name="l16795"></a><span class="lineno">16795</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool &amp;&amp; pPoolStats);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    allocator-&gt;GetPoolStats(pool, pPoolStats);</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;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="l16803"></a><span class="lineno">16803</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16804"></a><span class="lineno">16804</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
+<div class="line"><a name="l16805"></a><span class="lineno">16805</span>&#160;    <span class="keywordtype">size_t</span>* pLostAllocationCount)</div>
+<div class="line"><a name="l16806"></a><span class="lineno">16806</span>&#160;{</div>
+<div class="line"><a name="l16807"></a><span class="lineno">16807</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool);</div>
+<div class="line"><a name="l16808"></a><span class="lineno">16808</span>&#160; </div>
+<div class="line"><a name="l16809"></a><span class="lineno">16809</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l16810"></a><span class="lineno">16810</span>&#160; </div>
+<div class="line"><a name="l16811"></a><span class="lineno">16811</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l16812"></a><span class="lineno">16812</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordMakePoolAllocationsLost(allocator-&gt;GetCurrentFrameIndex(), pool);</div>
+<div class="line"><a name="l16815"></a><span class="lineno">16815</span>&#160;    }</div>
+<div class="line"><a name="l16816"></a><span class="lineno">16816</span>&#160;<span class="preprocessor">#endif</span></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;    allocator-&gt;MakePoolAllocationsLost(pool, pLostAllocationCount);</div>
+<div class="line"><a name="l16819"></a><span class="lineno">16819</span>&#160;}</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCheckPoolCorruption&quot;</span>);</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="keywordflow">return</span> allocator-&gt;CheckPoolCorruption(pool);</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; </div>
-<div class="line"><a name="l16826"></a><span class="lineno">16826</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="l16827"></a><span class="lineno">16827</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16828"></a><span class="lineno">16828</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
-<div class="line"><a name="l16829"></a><span class="lineno">16829</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>** ppName)</div>
-<div class="line"><a name="l16830"></a><span class="lineno">16830</span>&#160;{</div>
-<div class="line"><a name="l16831"></a><span class="lineno">16831</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool);</div>
-<div class="line"><a name="l16832"></a><span class="lineno">16832</span>&#160;    </div>
-<div class="line"><a name="l16833"></a><span class="lineno">16833</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaGetPoolName&quot;</span>);</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_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l16836"></a><span class="lineno">16836</span>&#160; </div>
-<div class="line"><a name="l16837"></a><span class="lineno">16837</span>&#160;    *ppName = pool-&gt;GetName();</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;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="l16841"></a><span class="lineno">16841</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16842"></a><span class="lineno">16842</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
-<div class="line"><a name="l16843"></a><span class="lineno">16843</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* pName)</div>
-<div class="line"><a name="l16844"></a><span class="lineno">16844</span>&#160;{</div>
-<div class="line"><a name="l16845"></a><span class="lineno">16845</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaSetPoolName&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    pool-&gt;SetName(pName);</div>
+<div class="line"><a name="l16821"></a><span class="lineno">16821</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="l16822"></a><span class="lineno">16822</span>&#160;{</div>
+<div class="line"><a name="l16823"></a><span class="lineno">16823</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l16826"></a><span class="lineno">16826</span>&#160; </div>
+<div class="line"><a name="l16827"></a><span class="lineno">16827</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCheckPoolCorruption&quot;</span>);</div>
+<div class="line"><a name="l16828"></a><span class="lineno">16828</span>&#160; </div>
+<div class="line"><a name="l16829"></a><span class="lineno">16829</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;CheckPoolCorruption(pool);</div>
+<div class="line"><a name="l16830"></a><span class="lineno">16830</span>&#160;}</div>
+<div class="line"><a name="l16831"></a><span class="lineno">16831</span>&#160; </div>
+<div class="line"><a name="l16832"></a><span class="lineno">16832</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="l16833"></a><span class="lineno">16833</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16834"></a><span class="lineno">16834</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
+<div class="line"><a name="l16835"></a><span class="lineno">16835</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>** ppName)</div>
+<div class="line"><a name="l16836"></a><span class="lineno">16836</span>&#160;{</div>
+<div class="line"><a name="l16837"></a><span class="lineno">16837</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pool);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaGetPoolName&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l16842"></a><span class="lineno">16842</span>&#160; </div>
+<div class="line"><a name="l16843"></a><span class="lineno">16843</span>&#160;    *ppName = pool-&gt;GetName();</div>
+<div class="line"><a name="l16844"></a><span class="lineno">16844</span>&#160;}</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;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="l16847"></a><span class="lineno">16847</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16848"></a><span class="lineno">16848</span>&#160;    <a class="code" href="struct_vma_pool.html">VmaPool</a> pool,</div>
+<div class="line"><a name="l16849"></a><span class="lineno">16849</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* pName)</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;    VMA_ASSERT(allocator &amp;&amp; pool);</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l16854"></a><span class="lineno">16854</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l16855"></a><span class="lineno">16855</span>&#160;    {</div>
-<div class="line"><a name="l16856"></a><span class="lineno">16856</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordSetPoolName(allocator-&gt;GetCurrentFrameIndex(), pool, pName);</div>
-<div class="line"><a name="l16857"></a><span class="lineno">16857</span>&#160;    }</div>
-<div class="line"><a name="l16858"></a><span class="lineno">16858</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l16859"></a><span class="lineno">16859</span>&#160;}</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;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="l16862"></a><span class="lineno">16862</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16863"></a><span class="lineno">16863</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements* pVkMemoryRequirements,</div>
-<div class="line"><a name="l16864"></a><span class="lineno">16864</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="l16865"></a><span class="lineno">16865</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
-<div class="line"><a name="l16866"></a><span class="lineno">16866</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
-<div class="line"><a name="l16867"></a><span class="lineno">16867</span>&#160;{</div>
-<div class="line"><a name="l16868"></a><span class="lineno">16868</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pVkMemoryRequirements &amp;&amp; pCreateInfo &amp;&amp; pAllocation);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemory&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l16873"></a><span class="lineno">16873</span>&#160; </div>
-<div class="line"><a name="l16874"></a><span class="lineno">16874</span>&#160;    VkResult result = allocator-&gt;AllocateMemory(</div>
-<div class="line"><a name="l16875"></a><span class="lineno">16875</span>&#160;        *pVkMemoryRequirements,</div>
-<div class="line"><a name="l16876"></a><span class="lineno">16876</span>&#160;        <span class="keyword">false</span>, <span class="comment">// requiresDedicatedAllocation</span></div>
-<div class="line"><a name="l16877"></a><span class="lineno">16877</span>&#160;        <span class="keyword">false</span>, <span class="comment">// prefersDedicatedAllocation</span></div>
-<div class="line"><a name="l16878"></a><span class="lineno">16878</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
-<div class="line"><a name="l16879"></a><span class="lineno">16879</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
-<div class="line"><a name="l16880"></a><span class="lineno">16880</span>&#160;        *pCreateInfo,</div>
-<div class="line"><a name="l16881"></a><span class="lineno">16881</span>&#160;        VMA_SUBALLOCATION_TYPE_UNKNOWN,</div>
-<div class="line"><a name="l16882"></a><span class="lineno">16882</span>&#160;        1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l16883"></a><span class="lineno">16883</span>&#160;        pAllocation);</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l16886"></a><span class="lineno">16886</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l16887"></a><span class="lineno">16887</span>&#160;    {</div>
-<div class="line"><a name="l16888"></a><span class="lineno">16888</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemory(</div>
-<div class="line"><a name="l16889"></a><span class="lineno">16889</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l16890"></a><span class="lineno">16890</span>&#160;            *pVkMemoryRequirements,</div>
-<div class="line"><a name="l16891"></a><span class="lineno">16891</span>&#160;            *pCreateInfo,</div>
-<div class="line"><a name="l16892"></a><span class="lineno">16892</span>&#160;            *pAllocation);</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;<span class="preprocessor">#endif</span></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;    <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL &amp;&amp; result == VK_SUCCESS)</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;        allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
+<div class="line"><a name="l16853"></a><span class="lineno">16853</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaSetPoolName&quot;</span>);</div>
+<div class="line"><a name="l16854"></a><span class="lineno">16854</span>&#160; </div>
+<div class="line"><a name="l16855"></a><span class="lineno">16855</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l16856"></a><span class="lineno">16856</span>&#160; </div>
+<div class="line"><a name="l16857"></a><span class="lineno">16857</span>&#160;    pool-&gt;SetName(pName);</div>
+<div class="line"><a name="l16858"></a><span class="lineno">16858</span>&#160; </div>
+<div class="line"><a name="l16859"></a><span class="lineno">16859</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l16860"></a><span class="lineno">16860</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordSetPoolName(allocator-&gt;GetCurrentFrameIndex(), pool, pName);</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;<span class="preprocessor">#endif</span></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; </div>
+<div class="line"><a name="l16867"></a><span class="lineno">16867</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="l16868"></a><span class="lineno">16868</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16869"></a><span class="lineno">16869</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements* pVkMemoryRequirements,</div>
+<div class="line"><a name="l16870"></a><span class="lineno">16870</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="l16871"></a><span class="lineno">16871</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
+<div class="line"><a name="l16872"></a><span class="lineno">16872</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
+<div class="line"><a name="l16873"></a><span class="lineno">16873</span>&#160;{</div>
+<div class="line"><a name="l16874"></a><span class="lineno">16874</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pVkMemoryRequirements &amp;&amp; pCreateInfo &amp;&amp; pAllocation);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemory&quot;</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l16879"></a><span class="lineno">16879</span>&#160; </div>
+<div class="line"><a name="l16880"></a><span class="lineno">16880</span>&#160;    VkResult result = allocator-&gt;AllocateMemory(</div>
+<div class="line"><a name="l16881"></a><span class="lineno">16881</span>&#160;        *pVkMemoryRequirements,</div>
+<div class="line"><a name="l16882"></a><span class="lineno">16882</span>&#160;        <span class="keyword">false</span>, <span class="comment">// requiresDedicatedAllocation</span></div>
+<div class="line"><a name="l16883"></a><span class="lineno">16883</span>&#160;        <span class="keyword">false</span>, <span class="comment">// prefersDedicatedAllocation</span></div>
+<div class="line"><a name="l16884"></a><span class="lineno">16884</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
+<div class="line"><a name="l16885"></a><span class="lineno">16885</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
+<div class="line"><a name="l16886"></a><span class="lineno">16886</span>&#160;        *pCreateInfo,</div>
+<div class="line"><a name="l16887"></a><span class="lineno">16887</span>&#160;        VMA_SUBALLOCATION_TYPE_UNKNOWN,</div>
+<div class="line"><a name="l16888"></a><span class="lineno">16888</span>&#160;        1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l16889"></a><span class="lineno">16889</span>&#160;        pAllocation);</div>
+<div class="line"><a name="l16890"></a><span class="lineno">16890</span>&#160; </div>
+<div class="line"><a name="l16891"></a><span class="lineno">16891</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l16892"></a><span class="lineno">16892</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemory(</div>
+<div class="line"><a name="l16895"></a><span class="lineno">16895</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l16896"></a><span class="lineno">16896</span>&#160;            *pVkMemoryRequirements,</div>
+<div class="line"><a name="l16897"></a><span class="lineno">16897</span>&#160;            *pCreateInfo,</div>
+<div class="line"><a name="l16898"></a><span class="lineno">16898</span>&#160;            *pAllocation);</div>
 <div class="line"><a name="l16899"></a><span class="lineno">16899</span>&#160;    }</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;    <span class="keywordflow">return</span> result;</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; </div>
-<div class="line"><a name="l16904"></a><span class="lineno">16904</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="l16905"></a><span class="lineno">16905</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16906"></a><span class="lineno">16906</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements* pVkMemoryRequirements,</div>
-<div class="line"><a name="l16907"></a><span class="lineno">16907</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="l16908"></a><span class="lineno">16908</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l16909"></a><span class="lineno">16909</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations,</div>
-<div class="line"><a name="l16910"></a><span class="lineno">16910</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
-<div class="line"><a name="l16911"></a><span class="lineno">16911</span>&#160;{</div>
-<div class="line"><a name="l16912"></a><span class="lineno">16912</span>&#160;    <span class="keywordflow">if</span>(allocationCount == 0)</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;        <span class="keywordflow">return</span> VK_SUCCESS;</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;    VMA_ASSERT(allocator &amp;&amp; pVkMemoryRequirements &amp;&amp; pCreateInfo &amp;&amp; pAllocations);</div>
-<div class="line"><a name="l16918"></a><span class="lineno">16918</span>&#160; </div>
-<div class="line"><a name="l16919"></a><span class="lineno">16919</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemoryPages&quot;</span>);</div>
-<div class="line"><a name="l16920"></a><span class="lineno">16920</span>&#160; </div>
-<div class="line"><a name="l16921"></a><span class="lineno">16921</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l16900"></a><span class="lineno">16900</span>&#160;<span class="preprocessor">#endif</span></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;    <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL &amp;&amp; result == VK_SUCCESS)</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;        allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
+<div class="line"><a name="l16905"></a><span class="lineno">16905</span>&#160;    }</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">return</span> result;</div>
+<div class="line"><a name="l16908"></a><span class="lineno">16908</span>&#160;}</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;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="l16911"></a><span class="lineno">16911</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16912"></a><span class="lineno">16912</span>&#160;    <span class="keyword">const</span> VkMemoryRequirements* pVkMemoryRequirements,</div>
+<div class="line"><a name="l16913"></a><span class="lineno">16913</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="l16914"></a><span class="lineno">16914</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l16915"></a><span class="lineno">16915</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations,</div>
+<div class="line"><a name="l16916"></a><span class="lineno">16916</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
+<div class="line"><a name="l16917"></a><span class="lineno">16917</span>&#160;{</div>
+<div class="line"><a name="l16918"></a><span class="lineno">16918</span>&#160;    <span class="keywordflow">if</span>(allocationCount == 0)</div>
+<div class="line"><a name="l16919"></a><span class="lineno">16919</span>&#160;    {</div>
+<div class="line"><a name="l16920"></a><span class="lineno">16920</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l16921"></a><span class="lineno">16921</span>&#160;    }</div>
 <div class="line"><a name="l16922"></a><span class="lineno">16922</span>&#160; </div>
-<div class="line"><a name="l16923"></a><span class="lineno">16923</span>&#160;    VkResult result = allocator-&gt;AllocateMemory(</div>
-<div class="line"><a name="l16924"></a><span class="lineno">16924</span>&#160;        *pVkMemoryRequirements,</div>
-<div class="line"><a name="l16925"></a><span class="lineno">16925</span>&#160;        <span class="keyword">false</span>, <span class="comment">// requiresDedicatedAllocation</span></div>
-<div class="line"><a name="l16926"></a><span class="lineno">16926</span>&#160;        <span class="keyword">false</span>, <span class="comment">// prefersDedicatedAllocation</span></div>
-<div class="line"><a name="l16927"></a><span class="lineno">16927</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
-<div class="line"><a name="l16928"></a><span class="lineno">16928</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
-<div class="line"><a name="l16929"></a><span class="lineno">16929</span>&#160;        *pCreateInfo,</div>
-<div class="line"><a name="l16930"></a><span class="lineno">16930</span>&#160;        VMA_SUBALLOCATION_TYPE_UNKNOWN,</div>
-<div class="line"><a name="l16931"></a><span class="lineno">16931</span>&#160;        allocationCount,</div>
-<div class="line"><a name="l16932"></a><span class="lineno">16932</span>&#160;        pAllocations);</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l16935"></a><span class="lineno">16935</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemoryPages(</div>
-<div class="line"><a name="l16938"></a><span class="lineno">16938</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l16939"></a><span class="lineno">16939</span>&#160;            *pVkMemoryRequirements,</div>
-<div class="line"><a name="l16940"></a><span class="lineno">16940</span>&#160;            *pCreateInfo,</div>
-<div class="line"><a name="l16941"></a><span class="lineno">16941</span>&#160;            (uint64_t)allocationCount,</div>
-<div class="line"><a name="l16942"></a><span class="lineno">16942</span>&#160;            pAllocations);</div>
-<div class="line"><a name="l16943"></a><span class="lineno">16943</span>&#160;    }</div>
-<div class="line"><a name="l16944"></a><span class="lineno">16944</span>&#160;<span class="preprocessor">#endif</span></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;    <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL &amp;&amp; result == VK_SUCCESS)</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">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; allocationCount; ++i)</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;            allocator-&gt;GetAllocationInfo(pAllocations[i], pAllocationInfo + i);</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;    }</div>
-<div class="line"><a name="l16953"></a><span class="lineno">16953</span>&#160; </div>
-<div class="line"><a name="l16954"></a><span class="lineno">16954</span>&#160;    <span class="keywordflow">return</span> result;</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; </div>
-<div class="line"><a name="l16957"></a><span class="lineno">16957</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="l16958"></a><span class="lineno">16958</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l16959"></a><span class="lineno">16959</span>&#160;    VkBuffer buffer,</div>
-<div class="line"><a name="l16960"></a><span class="lineno">16960</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="l16961"></a><span class="lineno">16961</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
-<div class="line"><a name="l16962"></a><span class="lineno">16962</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</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(allocator &amp;&amp; buffer != VK_NULL_HANDLE &amp;&amp; pCreateInfo &amp;&amp; pAllocation);</div>
-<div class="line"><a name="l16965"></a><span class="lineno">16965</span>&#160; </div>
-<div class="line"><a name="l16966"></a><span class="lineno">16966</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemoryForBuffer&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    VkMemoryRequirements vkMemReq = {};</div>
-<div class="line"><a name="l16971"></a><span class="lineno">16971</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l16972"></a><span class="lineno">16972</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l16973"></a><span class="lineno">16973</span>&#160;    allocator-&gt;GetBufferMemoryRequirements(buffer, vkMemReq,</div>
-<div class="line"><a name="l16974"></a><span class="lineno">16974</span>&#160;        requiresDedicatedAllocation,</div>
-<div class="line"><a name="l16975"></a><span class="lineno">16975</span>&#160;        prefersDedicatedAllocation);</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;    VkResult result = allocator-&gt;AllocateMemory(</div>
-<div class="line"><a name="l16978"></a><span class="lineno">16978</span>&#160;        vkMemReq,</div>
-<div class="line"><a name="l16979"></a><span class="lineno">16979</span>&#160;        requiresDedicatedAllocation,</div>
-<div class="line"><a name="l16980"></a><span class="lineno">16980</span>&#160;        prefersDedicatedAllocation,</div>
-<div class="line"><a name="l16981"></a><span class="lineno">16981</span>&#160;        buffer, <span class="comment">// dedicatedBuffer</span></div>
-<div class="line"><a name="l16982"></a><span class="lineno">16982</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
-<div class="line"><a name="l16983"></a><span class="lineno">16983</span>&#160;        *pCreateInfo,</div>
-<div class="line"><a name="l16984"></a><span class="lineno">16984</span>&#160;        VMA_SUBALLOCATION_TYPE_BUFFER,</div>
-<div class="line"><a name="l16985"></a><span class="lineno">16985</span>&#160;        1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l16986"></a><span class="lineno">16986</span>&#160;        pAllocation);</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l16989"></a><span class="lineno">16989</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l16990"></a><span class="lineno">16990</span>&#160;    {</div>
-<div class="line"><a name="l16991"></a><span class="lineno">16991</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemoryForBuffer(</div>
-<div class="line"><a name="l16992"></a><span class="lineno">16992</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l16993"></a><span class="lineno">16993</span>&#160;            vkMemReq,</div>
-<div class="line"><a name="l16994"></a><span class="lineno">16994</span>&#160;            requiresDedicatedAllocation,</div>
-<div class="line"><a name="l16995"></a><span class="lineno">16995</span>&#160;            prefersDedicatedAllocation,</div>
-<div class="line"><a name="l16996"></a><span class="lineno">16996</span>&#160;            *pCreateInfo,</div>
-<div class="line"><a name="l16997"></a><span class="lineno">16997</span>&#160;            *pAllocation);</div>
-<div class="line"><a name="l16998"></a><span class="lineno">16998</span>&#160;    }</div>
-<div class="line"><a name="l16999"></a><span class="lineno">16999</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l17000"></a><span class="lineno">17000</span>&#160; </div>
-<div class="line"><a name="l17001"></a><span class="lineno">17001</span>&#160;    <span class="keywordflow">if</span>(pAllocationInfo &amp;&amp; result == VK_SUCCESS)</div>
-<div class="line"><a name="l17002"></a><span class="lineno">17002</span>&#160;    {</div>
-<div class="line"><a name="l17003"></a><span class="lineno">17003</span>&#160;        allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
+<div class="line"><a name="l16923"></a><span class="lineno">16923</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pVkMemoryRequirements &amp;&amp; pCreateInfo &amp;&amp; pAllocations);</div>
+<div class="line"><a name="l16924"></a><span class="lineno">16924</span>&#160; </div>
+<div class="line"><a name="l16925"></a><span class="lineno">16925</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemoryPages&quot;</span>);</div>
+<div class="line"><a name="l16926"></a><span class="lineno">16926</span>&#160; </div>
+<div class="line"><a name="l16927"></a><span class="lineno">16927</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    VkResult result = allocator-&gt;AllocateMemory(</div>
+<div class="line"><a name="l16930"></a><span class="lineno">16930</span>&#160;        *pVkMemoryRequirements,</div>
+<div class="line"><a name="l16931"></a><span class="lineno">16931</span>&#160;        <span class="keyword">false</span>, <span class="comment">// requiresDedicatedAllocation</span></div>
+<div class="line"><a name="l16932"></a><span class="lineno">16932</span>&#160;        <span class="keyword">false</span>, <span class="comment">// prefersDedicatedAllocation</span></div>
+<div class="line"><a name="l16933"></a><span class="lineno">16933</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
+<div class="line"><a name="l16934"></a><span class="lineno">16934</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
+<div class="line"><a name="l16935"></a><span class="lineno">16935</span>&#160;        *pCreateInfo,</div>
+<div class="line"><a name="l16936"></a><span class="lineno">16936</span>&#160;        VMA_SUBALLOCATION_TYPE_UNKNOWN,</div>
+<div class="line"><a name="l16937"></a><span class="lineno">16937</span>&#160;        allocationCount,</div>
+<div class="line"><a name="l16938"></a><span class="lineno">16938</span>&#160;        pAllocations);</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l16941"></a><span class="lineno">16941</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemoryPages(</div>
+<div class="line"><a name="l16944"></a><span class="lineno">16944</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l16945"></a><span class="lineno">16945</span>&#160;            *pVkMemoryRequirements,</div>
+<div class="line"><a name="l16946"></a><span class="lineno">16946</span>&#160;            *pCreateInfo,</div>
+<div class="line"><a name="l16947"></a><span class="lineno">16947</span>&#160;            (uint64_t)allocationCount,</div>
+<div class="line"><a name="l16948"></a><span class="lineno">16948</span>&#160;            pAllocations);</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="preprocessor">#endif</span></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;    <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL &amp;&amp; result == VK_SUCCESS)</div>
+<div class="line"><a name="l16953"></a><span class="lineno">16953</span>&#160;    {</div>
+<div class="line"><a name="l16954"></a><span class="lineno">16954</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="l16955"></a><span class="lineno">16955</span>&#160;        {</div>
+<div class="line"><a name="l16956"></a><span class="lineno">16956</span>&#160;            allocator-&gt;GetAllocationInfo(pAllocations[i], pAllocationInfo + i);</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;    }</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;    <span class="keywordflow">return</span> result;</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; </div>
+<div class="line"><a name="l16963"></a><span class="lineno">16963</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="l16964"></a><span class="lineno">16964</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l16965"></a><span class="lineno">16965</span>&#160;    VkBuffer buffer,</div>
+<div class="line"><a name="l16966"></a><span class="lineno">16966</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="l16967"></a><span class="lineno">16967</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
+<div class="line"><a name="l16968"></a><span class="lineno">16968</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</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;    VMA_ASSERT(allocator &amp;&amp; buffer != VK_NULL_HANDLE &amp;&amp; pCreateInfo &amp;&amp; pAllocation);</div>
+<div class="line"><a name="l16971"></a><span class="lineno">16971</span>&#160; </div>
+<div class="line"><a name="l16972"></a><span class="lineno">16972</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemoryForBuffer&quot;</span>);</div>
+<div class="line"><a name="l16973"></a><span class="lineno">16973</span>&#160; </div>
+<div class="line"><a name="l16974"></a><span class="lineno">16974</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    VkMemoryRequirements vkMemReq = {};</div>
+<div class="line"><a name="l16977"></a><span class="lineno">16977</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l16978"></a><span class="lineno">16978</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l16979"></a><span class="lineno">16979</span>&#160;    allocator-&gt;GetBufferMemoryRequirements(buffer, vkMemReq,</div>
+<div class="line"><a name="l16980"></a><span class="lineno">16980</span>&#160;        requiresDedicatedAllocation,</div>
+<div class="line"><a name="l16981"></a><span class="lineno">16981</span>&#160;        prefersDedicatedAllocation);</div>
+<div class="line"><a name="l16982"></a><span class="lineno">16982</span>&#160; </div>
+<div class="line"><a name="l16983"></a><span class="lineno">16983</span>&#160;    VkResult result = allocator-&gt;AllocateMemory(</div>
+<div class="line"><a name="l16984"></a><span class="lineno">16984</span>&#160;        vkMemReq,</div>
+<div class="line"><a name="l16985"></a><span class="lineno">16985</span>&#160;        requiresDedicatedAllocation,</div>
+<div class="line"><a name="l16986"></a><span class="lineno">16986</span>&#160;        prefersDedicatedAllocation,</div>
+<div class="line"><a name="l16987"></a><span class="lineno">16987</span>&#160;        buffer, <span class="comment">// dedicatedBuffer</span></div>
+<div class="line"><a name="l16988"></a><span class="lineno">16988</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
+<div class="line"><a name="l16989"></a><span class="lineno">16989</span>&#160;        *pCreateInfo,</div>
+<div class="line"><a name="l16990"></a><span class="lineno">16990</span>&#160;        VMA_SUBALLOCATION_TYPE_BUFFER,</div>
+<div class="line"><a name="l16991"></a><span class="lineno">16991</span>&#160;        1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l16992"></a><span class="lineno">16992</span>&#160;        pAllocation);</div>
+<div class="line"><a name="l16993"></a><span class="lineno">16993</span>&#160; </div>
+<div class="line"><a name="l16994"></a><span class="lineno">16994</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l16995"></a><span class="lineno">16995</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l16996"></a><span class="lineno">16996</span>&#160;    {</div>
+<div class="line"><a name="l16997"></a><span class="lineno">16997</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemoryForBuffer(</div>
+<div class="line"><a name="l16998"></a><span class="lineno">16998</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l16999"></a><span class="lineno">16999</span>&#160;            vkMemReq,</div>
+<div class="line"><a name="l17000"></a><span class="lineno">17000</span>&#160;            requiresDedicatedAllocation,</div>
+<div class="line"><a name="l17001"></a><span class="lineno">17001</span>&#160;            prefersDedicatedAllocation,</div>
+<div class="line"><a name="l17002"></a><span class="lineno">17002</span>&#160;            *pCreateInfo,</div>
+<div class="line"><a name="l17003"></a><span class="lineno">17003</span>&#160;            *pAllocation);</div>
 <div class="line"><a name="l17004"></a><span class="lineno">17004</span>&#160;    }</div>
-<div class="line"><a name="l17005"></a><span class="lineno">17005</span>&#160; </div>
-<div class="line"><a name="l17006"></a><span class="lineno">17006</span>&#160;    <span class="keywordflow">return</span> result;</div>
-<div class="line"><a name="l17007"></a><span class="lineno">17007</span>&#160;}</div>
-<div class="line"><a name="l17008"></a><span class="lineno">17008</span>&#160; </div>
-<div class="line"><a name="l17009"></a><span class="lineno">17009</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="l17010"></a><span class="lineno">17010</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17011"></a><span class="lineno">17011</span>&#160;    VkImage image,</div>
-<div class="line"><a name="l17012"></a><span class="lineno">17012</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="l17013"></a><span class="lineno">17013</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
-<div class="line"><a name="l17014"></a><span class="lineno">17014</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</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;    VMA_ASSERT(allocator &amp;&amp; image != VK_NULL_HANDLE &amp;&amp; pCreateInfo &amp;&amp; pAllocation);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemoryForImage&quot;</span>);</div>
-<div class="line"><a name="l17019"></a><span class="lineno">17019</span>&#160; </div>
-<div class="line"><a name="l17020"></a><span class="lineno">17020</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l17021"></a><span class="lineno">17021</span>&#160; </div>
-<div class="line"><a name="l17022"></a><span class="lineno">17022</span>&#160;    VkMemoryRequirements vkMemReq = {};</div>
-<div class="line"><a name="l17023"></a><span class="lineno">17023</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l17024"></a><span class="lineno">17024</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l17025"></a><span class="lineno">17025</span>&#160;    allocator-&gt;GetImageMemoryRequirements(image, vkMemReq,</div>
-<div class="line"><a name="l17026"></a><span class="lineno">17026</span>&#160;        requiresDedicatedAllocation, prefersDedicatedAllocation);</div>
+<div class="line"><a name="l17005"></a><span class="lineno">17005</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l17006"></a><span class="lineno">17006</span>&#160; </div>
+<div class="line"><a name="l17007"></a><span class="lineno">17007</span>&#160;    <span class="keywordflow">if</span>(pAllocationInfo &amp;&amp; result == VK_SUCCESS)</div>
+<div class="line"><a name="l17008"></a><span class="lineno">17008</span>&#160;    {</div>
+<div class="line"><a name="l17009"></a><span class="lineno">17009</span>&#160;        allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</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; </div>
+<div class="line"><a name="l17012"></a><span class="lineno">17012</span>&#160;    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l17013"></a><span class="lineno">17013</span>&#160;}</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;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="l17016"></a><span class="lineno">17016</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17017"></a><span class="lineno">17017</span>&#160;    VkImage image,</div>
+<div class="line"><a name="l17018"></a><span class="lineno">17018</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="l17019"></a><span class="lineno">17019</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
+<div class="line"><a name="l17020"></a><span class="lineno">17020</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
+<div class="line"><a name="l17021"></a><span class="lineno">17021</span>&#160;{</div>
+<div class="line"><a name="l17022"></a><span class="lineno">17022</span>&#160;    VMA_ASSERT(allocator &amp;&amp; image != VK_NULL_HANDLE &amp;&amp; pCreateInfo &amp;&amp; pAllocation);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaAllocateMemoryForImage&quot;</span>);</div>
+<div class="line"><a name="l17025"></a><span class="lineno">17025</span>&#160; </div>
+<div class="line"><a name="l17026"></a><span class="lineno">17026</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
 <div class="line"><a name="l17027"></a><span class="lineno">17027</span>&#160; </div>
-<div class="line"><a name="l17028"></a><span class="lineno">17028</span>&#160;    VkResult result = allocator-&gt;AllocateMemory(</div>
-<div class="line"><a name="l17029"></a><span class="lineno">17029</span>&#160;        vkMemReq,</div>
-<div class="line"><a name="l17030"></a><span class="lineno">17030</span>&#160;        requiresDedicatedAllocation,</div>
-<div class="line"><a name="l17031"></a><span class="lineno">17031</span>&#160;        prefersDedicatedAllocation,</div>
-<div class="line"><a name="l17032"></a><span class="lineno">17032</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
-<div class="line"><a name="l17033"></a><span class="lineno">17033</span>&#160;        image, <span class="comment">// dedicatedImage</span></div>
-<div class="line"><a name="l17034"></a><span class="lineno">17034</span>&#160;        *pCreateInfo,</div>
-<div class="line"><a name="l17035"></a><span class="lineno">17035</span>&#160;        VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN,</div>
-<div class="line"><a name="l17036"></a><span class="lineno">17036</span>&#160;        1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l17037"></a><span class="lineno">17037</span>&#160;        pAllocation);</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17040"></a><span class="lineno">17040</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemoryForImage(</div>
-<div class="line"><a name="l17043"></a><span class="lineno">17043</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17044"></a><span class="lineno">17044</span>&#160;            vkMemReq,</div>
-<div class="line"><a name="l17045"></a><span class="lineno">17045</span>&#160;            requiresDedicatedAllocation,</div>
-<div class="line"><a name="l17046"></a><span class="lineno">17046</span>&#160;            prefersDedicatedAllocation,</div>
-<div class="line"><a name="l17047"></a><span class="lineno">17047</span>&#160;            *pCreateInfo,</div>
-<div class="line"><a name="l17048"></a><span class="lineno">17048</span>&#160;            *pAllocation);</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;<span class="preprocessor">#endif</span></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="keywordflow">if</span>(pAllocationInfo &amp;&amp; result == VK_SUCCESS)</div>
-<div class="line"><a name="l17053"></a><span class="lineno">17053</span>&#160;    {</div>
-<div class="line"><a name="l17054"></a><span class="lineno">17054</span>&#160;        allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</div>
+<div class="line"><a name="l17028"></a><span class="lineno">17028</span>&#160;    VkMemoryRequirements vkMemReq = {};</div>
+<div class="line"><a name="l17029"></a><span class="lineno">17029</span>&#160;    <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l17030"></a><span class="lineno">17030</span>&#160;    <span class="keywordtype">bool</span> prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l17031"></a><span class="lineno">17031</span>&#160;    allocator-&gt;GetImageMemoryRequirements(image, vkMemReq,</div>
+<div class="line"><a name="l17032"></a><span class="lineno">17032</span>&#160;        requiresDedicatedAllocation, prefersDedicatedAllocation);</div>
+<div class="line"><a name="l17033"></a><span class="lineno">17033</span>&#160; </div>
+<div class="line"><a name="l17034"></a><span class="lineno">17034</span>&#160;    VkResult result = allocator-&gt;AllocateMemory(</div>
+<div class="line"><a name="l17035"></a><span class="lineno">17035</span>&#160;        vkMemReq,</div>
+<div class="line"><a name="l17036"></a><span class="lineno">17036</span>&#160;        requiresDedicatedAllocation,</div>
+<div class="line"><a name="l17037"></a><span class="lineno">17037</span>&#160;        prefersDedicatedAllocation,</div>
+<div class="line"><a name="l17038"></a><span class="lineno">17038</span>&#160;        VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
+<div class="line"><a name="l17039"></a><span class="lineno">17039</span>&#160;        image, <span class="comment">// dedicatedImage</span></div>
+<div class="line"><a name="l17040"></a><span class="lineno">17040</span>&#160;        *pCreateInfo,</div>
+<div class="line"><a name="l17041"></a><span class="lineno">17041</span>&#160;        VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN,</div>
+<div class="line"><a name="l17042"></a><span class="lineno">17042</span>&#160;        1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l17043"></a><span class="lineno">17043</span>&#160;        pAllocation);</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17046"></a><span class="lineno">17046</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordAllocateMemoryForImage(</div>
+<div class="line"><a name="l17049"></a><span class="lineno">17049</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17050"></a><span class="lineno">17050</span>&#160;            vkMemReq,</div>
+<div class="line"><a name="l17051"></a><span class="lineno">17051</span>&#160;            requiresDedicatedAllocation,</div>
+<div class="line"><a name="l17052"></a><span class="lineno">17052</span>&#160;            prefersDedicatedAllocation,</div>
+<div class="line"><a name="l17053"></a><span class="lineno">17053</span>&#160;            *pCreateInfo,</div>
+<div class="line"><a name="l17054"></a><span class="lineno">17054</span>&#160;            *pAllocation);</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="keywordflow">return</span> result;</div>
-<div class="line"><a name="l17058"></a><span class="lineno">17058</span>&#160;}</div>
-<div class="line"><a name="l17059"></a><span class="lineno">17059</span>&#160; </div>
-<div class="line"><a name="l17060"></a><span class="lineno">17060</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a11f0fbc034fa81a4efedd73d61ce7568">vmaFreeMemory</a>(</div>
-<div class="line"><a name="l17061"></a><span class="lineno">17061</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17062"></a><span class="lineno">17062</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    VMA_ASSERT(allocator);</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;    <span class="keywordflow">if</span>(allocation == VK_NULL_HANDLE)</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">return</span>;</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;    </div>
-<div class="line"><a name="l17071"></a><span class="lineno">17071</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaFreeMemory&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17076"></a><span class="lineno">17076</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordFreeMemory(</div>
-<div class="line"><a name="l17079"></a><span class="lineno">17079</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17080"></a><span class="lineno">17080</span>&#160;            allocation);</div>
-<div class="line"><a name="l17081"></a><span class="lineno">17081</span>&#160;    }</div>
-<div class="line"><a name="l17082"></a><span class="lineno">17082</span>&#160;<span class="preprocessor">#endif</span></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;    allocator-&gt;FreeMemory(</div>
-<div class="line"><a name="l17085"></a><span class="lineno">17085</span>&#160;        1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l17086"></a><span class="lineno">17086</span>&#160;        &amp;allocation);</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; </div>
-<div class="line"><a name="l17089"></a><span class="lineno">17089</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ab9e709de044c5d8476bea77a4e755840">vmaFreeMemoryPages</a>(</div>
-<div class="line"><a name="l17090"></a><span class="lineno">17090</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17091"></a><span class="lineno">17091</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l17092"></a><span class="lineno">17092</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</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">if</span>(allocationCount == 0)</div>
-<div class="line"><a name="l17095"></a><span class="lineno">17095</span>&#160;    {</div>
-<div class="line"><a name="l17096"></a><span class="lineno">17096</span>&#160;        <span class="keywordflow">return</span>;</div>
-<div class="line"><a name="l17097"></a><span class="lineno">17097</span>&#160;    }</div>
-<div class="line"><a name="l17098"></a><span class="lineno">17098</span>&#160; </div>
-<div class="line"><a name="l17099"></a><span class="lineno">17099</span>&#160;    VMA_ASSERT(allocator);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaFreeMemoryPages&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l17056"></a><span class="lineno">17056</span>&#160;<span class="preprocessor">#endif</span></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="keywordflow">if</span>(pAllocationInfo &amp;&amp; result == VK_SUCCESS)</div>
+<div class="line"><a name="l17059"></a><span class="lineno">17059</span>&#160;    {</div>
+<div class="line"><a name="l17060"></a><span class="lineno">17060</span>&#160;        allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</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; </div>
+<div class="line"><a name="l17063"></a><span class="lineno">17063</span>&#160;    <span class="keywordflow">return</span> result;</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; </div>
+<div class="line"><a name="l17066"></a><span class="lineno">17066</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a11f0fbc034fa81a4efedd73d61ce7568">vmaFreeMemory</a>(</div>
+<div class="line"><a name="l17067"></a><span class="lineno">17067</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17068"></a><span class="lineno">17068</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    VMA_ASSERT(allocator);</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>(allocation == VK_NULL_HANDLE)</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;        <span class="keywordflow">return</span>;</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaFreeMemory&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17082"></a><span class="lineno">17082</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordFreeMemory(</div>
+<div class="line"><a name="l17085"></a><span class="lineno">17085</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17086"></a><span class="lineno">17086</span>&#160;            allocation);</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="preprocessor">#endif</span></div>
+<div class="line"><a name="l17089"></a><span class="lineno">17089</span>&#160;    </div>
+<div class="line"><a name="l17090"></a><span class="lineno">17090</span>&#160;    allocator-&gt;FreeMemory(</div>
+<div class="line"><a name="l17091"></a><span class="lineno">17091</span>&#160;        1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l17092"></a><span class="lineno">17092</span>&#160;        &amp;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; </div>
+<div class="line"><a name="l17095"></a><span class="lineno">17095</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#ab9e709de044c5d8476bea77a4e755840">vmaFreeMemoryPages</a>(</div>
+<div class="line"><a name="l17096"></a><span class="lineno">17096</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17097"></a><span class="lineno">17097</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l17098"></a><span class="lineno">17098</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations)</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;    <span class="keywordflow">if</span>(allocationCount == 0)</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="keywordflow">return</span>;</div>
+<div class="line"><a name="l17103"></a><span class="lineno">17103</span>&#160;    }</div>
 <div class="line"><a name="l17104"></a><span class="lineno">17104</span>&#160; </div>
-<div class="line"><a name="l17105"></a><span class="lineno">17105</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17106"></a><span class="lineno">17106</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordFreeMemoryPages(</div>
-<div class="line"><a name="l17109"></a><span class="lineno">17109</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17110"></a><span class="lineno">17110</span>&#160;            (uint64_t)allocationCount,</div>
-<div class="line"><a name="l17111"></a><span class="lineno">17111</span>&#160;            pAllocations);</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="preprocessor">#endif</span></div>
-<div class="line"><a name="l17114"></a><span class="lineno">17114</span>&#160;    </div>
-<div class="line"><a name="l17115"></a><span class="lineno">17115</span>&#160;    allocator-&gt;FreeMemory(allocationCount, pAllocations);</div>
-<div class="line"><a name="l17116"></a><span class="lineno">17116</span>&#160;}</div>
-<div class="line"><a name="l17117"></a><span class="lineno">17117</span>&#160; </div>
-<div class="line"><a name="l17118"></a><span class="lineno">17118</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a0ff488958ca72b28e545880463cb8696">vmaResizeAllocation</a>(</div>
-<div class="line"><a name="l17119"></a><span class="lineno">17119</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17120"></a><span class="lineno">17120</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l17121"></a><span class="lineno">17121</span>&#160;    VkDeviceSize newSize)</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;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
-<div class="line"><a name="l17124"></a><span class="lineno">17124</span>&#160;    </div>
-<div class="line"><a name="l17125"></a><span class="lineno">17125</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaResizeAllocation&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    <span class="keywordflow">return</span> allocator-&gt;ResizeAllocation(allocation, newSize);</div>
-<div class="line"><a name="l17130"></a><span class="lineno">17130</span>&#160;}</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;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="l17133"></a><span class="lineno">17133</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17134"></a><span class="lineno">17134</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l17135"></a><span class="lineno">17135</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</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;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; pAllocationInfo);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l17140"></a><span class="lineno">17140</span>&#160; </div>
-<div class="line"><a name="l17141"></a><span class="lineno">17141</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17142"></a><span class="lineno">17142</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l17143"></a><span class="lineno">17143</span>&#160;    {</div>
-<div class="line"><a name="l17144"></a><span class="lineno">17144</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordGetAllocationInfo(</div>
-<div class="line"><a name="l17145"></a><span class="lineno">17145</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17146"></a><span class="lineno">17146</span>&#160;            allocation);</div>
-<div class="line"><a name="l17147"></a><span class="lineno">17147</span>&#160;    }</div>
-<div class="line"><a name="l17148"></a><span class="lineno">17148</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l17149"></a><span class="lineno">17149</span>&#160; </div>
-<div class="line"><a name="l17150"></a><span class="lineno">17150</span>&#160;    allocator-&gt;GetAllocationInfo(allocation, pAllocationInfo);</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;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="l17154"></a><span class="lineno">17154</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17155"></a><span class="lineno">17155</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
-<div class="line"><a name="l17156"></a><span class="lineno">17156</span>&#160;{</div>
-<div class="line"><a name="l17157"></a><span class="lineno">17157</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
+<div class="line"><a name="l17105"></a><span class="lineno">17105</span>&#160;    VMA_ASSERT(allocator);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaFreeMemoryPages&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17112"></a><span class="lineno">17112</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l17113"></a><span class="lineno">17113</span>&#160;    {</div>
+<div class="line"><a name="l17114"></a><span class="lineno">17114</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordFreeMemoryPages(</div>
+<div class="line"><a name="l17115"></a><span class="lineno">17115</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17116"></a><span class="lineno">17116</span>&#160;            (uint64_t)allocationCount,</div>
+<div class="line"><a name="l17117"></a><span class="lineno">17117</span>&#160;            pAllocations);</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="preprocessor">#endif</span></div>
+<div class="line"><a name="l17120"></a><span class="lineno">17120</span>&#160;    </div>
+<div class="line"><a name="l17121"></a><span class="lineno">17121</span>&#160;    allocator-&gt;FreeMemory(allocationCount, pAllocations);</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; </div>
+<div class="line"><a name="l17124"></a><span class="lineno">17124</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a0ff488958ca72b28e545880463cb8696">vmaResizeAllocation</a>(</div>
+<div class="line"><a name="l17125"></a><span class="lineno">17125</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17126"></a><span class="lineno">17126</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l17127"></a><span class="lineno">17127</span>&#160;    VkDeviceSize newSize)</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;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
+<div class="line"><a name="l17130"></a><span class="lineno">17130</span>&#160;    </div>
+<div class="line"><a name="l17131"></a><span class="lineno">17131</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaResizeAllocation&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    <span class="keywordflow">return</span> allocator-&gt;ResizeAllocation(allocation, newSize);</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; </div>
+<div class="line"><a name="l17138"></a><span class="lineno">17138</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="l17139"></a><span class="lineno">17139</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17140"></a><span class="lineno">17140</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l17141"></a><span class="lineno">17141</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</div>
+<div class="line"><a name="l17142"></a><span class="lineno">17142</span>&#160;{</div>
+<div class="line"><a name="l17143"></a><span class="lineno">17143</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; pAllocationInfo);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l17146"></a><span class="lineno">17146</span>&#160; </div>
+<div class="line"><a name="l17147"></a><span class="lineno">17147</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17148"></a><span class="lineno">17148</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l17149"></a><span class="lineno">17149</span>&#160;    {</div>
+<div class="line"><a name="l17150"></a><span class="lineno">17150</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordGetAllocationInfo(</div>
+<div class="line"><a name="l17151"></a><span class="lineno">17151</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17152"></a><span class="lineno">17152</span>&#160;            allocation);</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="preprocessor">#endif</span></div>
+<div class="line"><a name="l17155"></a><span class="lineno">17155</span>&#160; </div>
+<div class="line"><a name="l17156"></a><span class="lineno">17156</span>&#160;    allocator-&gt;GetAllocationInfo(allocation, pAllocationInfo);</div>
+<div class="line"><a name="l17157"></a><span class="lineno">17157</span>&#160;}</div>
 <div class="line"><a name="l17158"></a><span class="lineno">17158</span>&#160; </div>
-<div class="line"><a name="l17159"></a><span class="lineno">17159</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17162"></a><span class="lineno">17162</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordTouchAllocation(</div>
-<div class="line"><a name="l17165"></a><span class="lineno">17165</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17166"></a><span class="lineno">17166</span>&#160;            allocation);</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;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l17169"></a><span class="lineno">17169</span>&#160; </div>
-<div class="line"><a name="l17170"></a><span class="lineno">17170</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;TouchAllocation(allocation);</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; </div>
-<div class="line"><a name="l17173"></a><span class="lineno">17173</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="l17174"></a><span class="lineno">17174</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17175"></a><span class="lineno">17175</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l17176"></a><span class="lineno">17176</span>&#160;    <span class="keywordtype">void</span>* pUserData)</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;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
-<div class="line"><a name="l17179"></a><span class="lineno">17179</span>&#160; </div>
-<div class="line"><a name="l17180"></a><span class="lineno">17180</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    allocation-&gt;SetUserData(allocator, pUserData);</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17185"></a><span class="lineno">17185</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordSetAllocationUserData(</div>
-<div class="line"><a name="l17188"></a><span class="lineno">17188</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17189"></a><span class="lineno">17189</span>&#160;            allocation,</div>
-<div class="line"><a name="l17190"></a><span class="lineno">17190</span>&#160;            pUserData);</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="preprocessor">#endif</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; </div>
-<div class="line"><a name="l17195"></a><span class="lineno">17195</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="l17196"></a><span class="lineno">17196</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17197"></a><span class="lineno">17197</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</div>
-<div class="line"><a name="l17198"></a><span class="lineno">17198</span>&#160;{</div>
-<div class="line"><a name="l17199"></a><span class="lineno">17199</span>&#160;    VMA_ASSERT(allocator &amp;&amp; pAllocation);</div>
+<div class="line"><a name="l17159"></a><span class="lineno">17159</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="l17160"></a><span class="lineno">17160</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17161"></a><span class="lineno">17161</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
+<div class="line"><a name="l17164"></a><span class="lineno">17164</span>&#160; </div>
+<div class="line"><a name="l17165"></a><span class="lineno">17165</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17168"></a><span class="lineno">17168</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l17169"></a><span class="lineno">17169</span>&#160;    {</div>
+<div class="line"><a name="l17170"></a><span class="lineno">17170</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordTouchAllocation(</div>
+<div class="line"><a name="l17171"></a><span class="lineno">17171</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17172"></a><span class="lineno">17172</span>&#160;            allocation);</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;<span class="preprocessor">#endif</span></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">return</span> allocator-&gt;TouchAllocation(allocation);</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; </div>
+<div class="line"><a name="l17179"></a><span class="lineno">17179</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="l17180"></a><span class="lineno">17180</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17181"></a><span class="lineno">17181</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l17182"></a><span class="lineno">17182</span>&#160;    <span class="keywordtype">void</span>* pUserData)</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;    VMA_ASSERT(allocator &amp;&amp; allocation);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l17187"></a><span class="lineno">17187</span>&#160; </div>
+<div class="line"><a name="l17188"></a><span class="lineno">17188</span>&#160;    allocation-&gt;SetUserData(allocator, pUserData);</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17191"></a><span class="lineno">17191</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordSetAllocationUserData(</div>
+<div class="line"><a name="l17194"></a><span class="lineno">17194</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17195"></a><span class="lineno">17195</span>&#160;            allocation,</div>
+<div class="line"><a name="l17196"></a><span class="lineno">17196</span>&#160;            pUserData);</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="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; </div>
-<div class="line"><a name="l17201"></a><span class="lineno">17201</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK;</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;    allocator-&gt;CreateLostAllocation(pAllocation);</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17206"></a><span class="lineno">17206</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordCreateLostAllocation(</div>
-<div class="line"><a name="l17209"></a><span class="lineno">17209</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17210"></a><span class="lineno">17210</span>&#160;            *pAllocation);</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;<span class="preprocessor">#endif</span></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; </div>
-<div class="line"><a name="l17215"></a><span class="lineno">17215</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="l17216"></a><span class="lineno">17216</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17217"></a><span class="lineno">17217</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l17218"></a><span class="lineno">17218</span>&#160;    <span class="keywordtype">void</span>** ppData)</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;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; ppData);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    VkResult res = allocator-&gt;Map(allocation, ppData);</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17227"></a><span class="lineno">17227</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordMapMemory(</div>
-<div class="line"><a name="l17230"></a><span class="lineno">17230</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17231"></a><span class="lineno">17231</span>&#160;            allocation);</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;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l17234"></a><span class="lineno">17234</span>&#160; </div>
-<div class="line"><a name="l17235"></a><span class="lineno">17235</span>&#160;    <span class="keywordflow">return</span> res;</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; </div>
-<div class="line"><a name="l17238"></a><span class="lineno">17238</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="l17239"></a><span class="lineno">17239</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17240"></a><span class="lineno">17240</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
+<div class="line"><a name="l17201"></a><span class="lineno">17201</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="l17202"></a><span class="lineno">17202</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17203"></a><span class="lineno">17203</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation)</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;    VMA_ASSERT(allocator &amp;&amp; pAllocation);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK;</div>
+<div class="line"><a name="l17208"></a><span class="lineno">17208</span>&#160; </div>
+<div class="line"><a name="l17209"></a><span class="lineno">17209</span>&#160;    allocator-&gt;CreateLostAllocation(pAllocation);</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17212"></a><span class="lineno">17212</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordCreateLostAllocation(</div>
+<div class="line"><a name="l17215"></a><span class="lineno">17215</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17216"></a><span class="lineno">17216</span>&#160;            *pAllocation);</div>
+<div class="line"><a name="l17217"></a><span class="lineno">17217</span>&#160;    }</div>
+<div class="line"><a name="l17218"></a><span class="lineno">17218</span>&#160;<span class="preprocessor">#endif</span></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; </div>
+<div class="line"><a name="l17221"></a><span class="lineno">17221</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="l17222"></a><span class="lineno">17222</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17223"></a><span class="lineno">17223</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l17224"></a><span class="lineno">17224</span>&#160;    <span class="keywordtype">void</span>** ppData)</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;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; ppData);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l17229"></a><span class="lineno">17229</span>&#160; </div>
+<div class="line"><a name="l17230"></a><span class="lineno">17230</span>&#160;    VkResult res = allocator-&gt;Map(allocation, ppData);</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17233"></a><span class="lineno">17233</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l17234"></a><span class="lineno">17234</span>&#160;    {</div>
+<div class="line"><a name="l17235"></a><span class="lineno">17235</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordMapMemory(</div>
+<div class="line"><a name="l17236"></a><span class="lineno">17236</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17237"></a><span class="lineno">17237</span>&#160;            allocation);</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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l17240"></a><span class="lineno">17240</span>&#160; </div>
+<div class="line"><a name="l17241"></a><span class="lineno">17241</span>&#160;    <span class="keywordflow">return</span> res;</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17247"></a><span class="lineno">17247</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordUnmapMemory(</div>
-<div class="line"><a name="l17250"></a><span class="lineno">17250</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17251"></a><span class="lineno">17251</span>&#160;            allocation);</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;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l17254"></a><span class="lineno">17254</span>&#160; </div>
-<div class="line"><a name="l17255"></a><span class="lineno">17255</span>&#160;    allocator-&gt;Unmap(allocation);</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; </div>
-<div class="line"><a name="l17258"></a><span class="lineno">17258</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#abc34ee6f021f459aff885f3758c435de">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="l17259"></a><span class="lineno">17259</span>&#160;{</div>
-<div class="line"><a name="l17260"></a><span class="lineno">17260</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaFlushAllocation&quot;</span>);</div>
+<div class="line"><a name="l17244"></a><span class="lineno">17244</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="l17245"></a><span class="lineno">17245</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17246"></a><span class="lineno">17246</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</div>
+<div class="line"><a name="l17247"></a><span class="lineno">17247</span>&#160;{</div>
+<div class="line"><a name="l17248"></a><span class="lineno">17248</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</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_DEBUG_GLOBAL_MUTEX_LOCK</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17253"></a><span class="lineno">17253</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l17254"></a><span class="lineno">17254</span>&#160;    {</div>
+<div class="line"><a name="l17255"></a><span class="lineno">17255</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordUnmapMemory(</div>
+<div class="line"><a name="l17256"></a><span class="lineno">17256</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17257"></a><span class="lineno">17257</span>&#160;            allocation);</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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l17260"></a><span class="lineno">17260</span>&#160; </div>
+<div class="line"><a name="l17261"></a><span class="lineno">17261</span>&#160;    allocator-&gt;Unmap(allocation);</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; </div>
-<div class="line"><a name="l17264"></a><span class="lineno">17264</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    allocator-&gt;FlushOrInvalidateAllocation(allocation, offset, size, VMA_CACHE_FLUSH);</div>
+<div class="line"><a name="l17264"></a><span class="lineno">17264</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#abc34ee6f021f459aff885f3758c435de">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="l17265"></a><span class="lineno">17265</span>&#160;{</div>
+<div class="line"><a name="l17266"></a><span class="lineno">17266</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17269"></a><span class="lineno">17269</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordFlushAllocation(</div>
-<div class="line"><a name="l17272"></a><span class="lineno">17272</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17273"></a><span class="lineno">17273</span>&#160;            allocation, offset, size);</div>
-<div class="line"><a name="l17274"></a><span class="lineno">17274</span>&#160;    }</div>
-<div class="line"><a name="l17275"></a><span class="lineno">17275</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l17276"></a><span class="lineno">17276</span>&#160;}</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;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a0d0eb0c1102268fa9a476d12ecbe4006">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="l17279"></a><span class="lineno">17279</span>&#160;{</div>
-<div class="line"><a name="l17280"></a><span class="lineno">17280</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</div>
-<div class="line"><a name="l17281"></a><span class="lineno">17281</span>&#160; </div>
-<div class="line"><a name="l17282"></a><span class="lineno">17282</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaInvalidateAllocation&quot;</span>);</div>
+<div class="line"><a name="l17268"></a><span class="lineno">17268</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaFlushAllocation&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l17271"></a><span class="lineno">17271</span>&#160; </div>
+<div class="line"><a name="l17272"></a><span class="lineno">17272</span>&#160;    allocator-&gt;FlushOrInvalidateAllocation(allocation, offset, size, VMA_CACHE_FLUSH);</div>
+<div class="line"><a name="l17273"></a><span class="lineno">17273</span>&#160; </div>
+<div class="line"><a name="l17274"></a><span class="lineno">17274</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17275"></a><span class="lineno">17275</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l17276"></a><span class="lineno">17276</span>&#160;    {</div>
+<div class="line"><a name="l17277"></a><span class="lineno">17277</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordFlushAllocation(</div>
+<div class="line"><a name="l17278"></a><span class="lineno">17278</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17279"></a><span class="lineno">17279</span>&#160;            allocation, offset, size);</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;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l17282"></a><span class="lineno">17282</span>&#160;}</div>
 <div class="line"><a name="l17283"></a><span class="lineno">17283</span>&#160; </div>
-<div class="line"><a name="l17284"></a><span class="lineno">17284</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l17285"></a><span class="lineno">17285</span>&#160; </div>
-<div class="line"><a name="l17286"></a><span class="lineno">17286</span>&#160;    allocator-&gt;FlushOrInvalidateAllocation(allocation, offset, size, VMA_CACHE_INVALIDATE);</div>
+<div class="line"><a name="l17284"></a><span class="lineno">17284</span>&#160;VMA_CALL_PRE <span class="keywordtype">void</span> VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a0d0eb0c1102268fa9a476d12ecbe4006">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="l17285"></a><span class="lineno">17285</span>&#160;{</div>
+<div class="line"><a name="l17286"></a><span class="lineno">17286</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation);</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17289"></a><span class="lineno">17289</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordInvalidateAllocation(</div>
-<div class="line"><a name="l17292"></a><span class="lineno">17292</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17293"></a><span class="lineno">17293</span>&#160;            allocation, offset, size);</div>
-<div class="line"><a name="l17294"></a><span class="lineno">17294</span>&#160;    }</div>
-<div class="line"><a name="l17295"></a><span class="lineno">17295</span>&#160;<span class="preprocessor">#endif</span></div>
-<div class="line"><a name="l17296"></a><span class="lineno">17296</span>&#160;}</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;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="l17299"></a><span class="lineno">17299</span>&#160;{</div>
-<div class="line"><a name="l17300"></a><span class="lineno">17300</span>&#160;    VMA_ASSERT(allocator);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCheckCorruption&quot;</span>);</div>
+<div class="line"><a name="l17288"></a><span class="lineno">17288</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaInvalidateAllocation&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l17291"></a><span class="lineno">17291</span>&#160; </div>
+<div class="line"><a name="l17292"></a><span class="lineno">17292</span>&#160;    allocator-&gt;FlushOrInvalidateAllocation(allocation, offset, size, VMA_CACHE_INVALIDATE);</div>
+<div class="line"><a name="l17293"></a><span class="lineno">17293</span>&#160; </div>
+<div class="line"><a name="l17294"></a><span class="lineno">17294</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17295"></a><span class="lineno">17295</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l17296"></a><span class="lineno">17296</span>&#160;    {</div>
+<div class="line"><a name="l17297"></a><span class="lineno">17297</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordInvalidateAllocation(</div>
+<div class="line"><a name="l17298"></a><span class="lineno">17298</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17299"></a><span class="lineno">17299</span>&#160;            allocation, offset, size);</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="preprocessor">#endif</span></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; </div>
-<div class="line"><a name="l17304"></a><span class="lineno">17304</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    <span class="keywordflow">return</span> allocator-&gt;CheckCorruption(memoryTypeBits);</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; </div>
-<div class="line"><a name="l17309"></a><span class="lineno">17309</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a6aced90fcc7b39882b6654a740a0b9bb">vmaDefragment</a>(</div>
-<div class="line"><a name="l17310"></a><span class="lineno">17310</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17311"></a><span class="lineno">17311</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations,</div>
-<div class="line"><a name="l17312"></a><span class="lineno">17312</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
-<div class="line"><a name="l17313"></a><span class="lineno">17313</span>&#160;    VkBool32* pAllocationsChanged,</div>
-<div class="line"><a name="l17314"></a><span class="lineno">17314</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="l17315"></a><span class="lineno">17315</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pDefragmentationStats)</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="comment">// Deprecated interface, reimplemented using new one.</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;    <a class="code" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> info2 = {};</div>
-<div class="line"><a name="l17320"></a><span class="lineno">17320</span>&#160;    info2.<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a> = (uint32_t)allocationCount;</div>
-<div class="line"><a name="l17321"></a><span class="lineno">17321</span>&#160;    info2.<a class="code" href="struct_vma_defragmentation_info2.html#a8943f8d65969ce8e2189a1cdf3205e96">pAllocations</a> = pAllocations;</div>
-<div class="line"><a name="l17322"></a><span class="lineno">17322</span>&#160;    info2.<a class="code" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">pAllocationsChanged</a> = pAllocationsChanged;</div>
-<div class="line"><a name="l17323"></a><span class="lineno">17323</span>&#160;    <span class="keywordflow">if</span>(pDefragmentationInfo != VMA_NULL)</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;        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="l17326"></a><span class="lineno">17326</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="l17327"></a><span class="lineno">17327</span>&#160;    }</div>
-<div class="line"><a name="l17328"></a><span class="lineno">17328</span>&#160;    <span class="keywordflow">else</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;        info2.<a class="code" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a> = UINT32_MAX;</div>
-<div class="line"><a name="l17331"></a><span class="lineno">17331</span>&#160;        info2.<a class="code" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">maxCpuBytesToMove</a> = VK_WHOLE_SIZE;</div>
-<div class="line"><a name="l17332"></a><span class="lineno">17332</span>&#160;    }</div>
-<div class="line"><a name="l17333"></a><span class="lineno">17333</span>&#160;    <span class="comment">// info2.flags, maxGpuAllocationsToMove, maxGpuBytesToMove, commandBuffer deliberately left zero.</span></div>
-<div class="line"><a name="l17334"></a><span class="lineno">17334</span>&#160; </div>
-<div class="line"><a name="l17335"></a><span class="lineno">17335</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> ctx;</div>
-<div class="line"><a name="l17336"></a><span class="lineno">17336</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="l17337"></a><span class="lineno">17337</span>&#160;    <span class="keywordflow">if</span>(res == VK_NOT_READY)</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;        res = <a class="code" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a>( allocator, ctx);</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="keywordflow">return</span> res;</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; </div>
-<div class="line"><a name="l17344"></a><span class="lineno">17344</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="l17345"></a><span class="lineno">17345</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17346"></a><span class="lineno">17346</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="l17347"></a><span class="lineno">17347</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats,</div>
-<div class="line"><a name="l17348"></a><span class="lineno">17348</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> *pContext)</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;    VMA_ASSERT(allocator &amp;&amp; pInfo &amp;&amp; pContext);</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="comment">// Degenerate case: Nothing to defragment.</span></div>
-<div class="line"><a name="l17353"></a><span class="lineno">17353</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="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">return</span> VK_SUCCESS;</div>
-<div class="line"><a name="l17356"></a><span class="lineno">17356</span>&#160;    }</div>
+<div class="line"><a name="l17304"></a><span class="lineno">17304</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="l17305"></a><span class="lineno">17305</span>&#160;{</div>
+<div class="line"><a name="l17306"></a><span class="lineno">17306</span>&#160;    VMA_ASSERT(allocator);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCheckCorruption&quot;</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l17311"></a><span class="lineno">17311</span>&#160; </div>
+<div class="line"><a name="l17312"></a><span class="lineno">17312</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;CheckCorruption(memoryTypeBits);</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; </div>
+<div class="line"><a name="l17315"></a><span class="lineno">17315</span>&#160;VMA_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a6aced90fcc7b39882b6654a740a0b9bb">vmaDefragment</a>(</div>
+<div class="line"><a name="l17316"></a><span class="lineno">17316</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17317"></a><span class="lineno">17317</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocations,</div>
+<div class="line"><a name="l17318"></a><span class="lineno">17318</span>&#160;    <span class="keywordtype">size_t</span> allocationCount,</div>
+<div class="line"><a name="l17319"></a><span class="lineno">17319</span>&#160;    VkBool32* pAllocationsChanged,</div>
+<div class="line"><a name="l17320"></a><span class="lineno">17320</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="l17321"></a><span class="lineno">17321</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pDefragmentationStats)</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;    <span class="comment">// Deprecated interface, reimplemented using new one.</span></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;    <a class="code" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> info2 = {};</div>
+<div class="line"><a name="l17326"></a><span class="lineno">17326</span>&#160;    info2.<a class="code" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a> = (uint32_t)allocationCount;</div>
+<div class="line"><a name="l17327"></a><span class="lineno">17327</span>&#160;    info2.<a class="code" href="struct_vma_defragmentation_info2.html#a8943f8d65969ce8e2189a1cdf3205e96">pAllocations</a> = pAllocations;</div>
+<div class="line"><a name="l17328"></a><span class="lineno">17328</span>&#160;    info2.<a class="code" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">pAllocationsChanged</a> = pAllocationsChanged;</div>
+<div class="line"><a name="l17329"></a><span class="lineno">17329</span>&#160;    <span class="keywordflow">if</span>(pDefragmentationInfo != VMA_NULL)</div>
+<div class="line"><a name="l17330"></a><span class="lineno">17330</span>&#160;    {</div>
+<div class="line"><a name="l17331"></a><span class="lineno">17331</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="l17332"></a><span class="lineno">17332</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="l17333"></a><span class="lineno">17333</span>&#160;    }</div>
+<div class="line"><a name="l17334"></a><span class="lineno">17334</span>&#160;    <span class="keywordflow">else</span></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;        info2.<a class="code" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a> = UINT32_MAX;</div>
+<div class="line"><a name="l17337"></a><span class="lineno">17337</span>&#160;        info2.<a class="code" href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">maxCpuBytesToMove</a> = VK_WHOLE_SIZE;</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="comment">// info2.flags, maxGpuAllocationsToMove, maxGpuBytesToMove, commandBuffer deliberately left zero.</span></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;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> ctx;</div>
+<div class="line"><a name="l17342"></a><span class="lineno">17342</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="l17343"></a><span class="lineno">17343</span>&#160;    <span class="keywordflow">if</span>(res == VK_NOT_READY)</div>
+<div class="line"><a name="l17344"></a><span class="lineno">17344</span>&#160;    {</div>
+<div class="line"><a name="l17345"></a><span class="lineno">17345</span>&#160;        res = <a class="code" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a>( allocator, ctx);</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">return</span> res;</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; </div>
+<div class="line"><a name="l17350"></a><span class="lineno">17350</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="l17351"></a><span class="lineno">17351</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17352"></a><span class="lineno">17352</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="l17353"></a><span class="lineno">17353</span>&#160;    <a class="code" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a>* pStats,</div>
+<div class="line"><a name="l17354"></a><span class="lineno">17354</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> *pContext)</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;    VMA_ASSERT(allocator &amp;&amp; pInfo &amp;&amp; pContext);</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;    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#a8943f8d65969ce8e2189a1cdf3205e96">pAllocations</a> != VMA_NULL);</div>
-<div class="line"><a name="l17359"></a><span class="lineno">17359</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#a0b3effd57f3fcdeb2ed62210b4ef20e1">pPools</a> != VMA_NULL);</div>
-<div class="line"><a name="l17360"></a><span class="lineno">17360</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#a8943f8d65969ce8e2189a1cdf3205e96">pAllocations</a>));</div>
-<div class="line"><a name="l17361"></a><span class="lineno">17361</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#a0b3effd57f3fcdeb2ed62210b4ef20e1">pPools</a>));</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDefragmentationBegin&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    VkResult res = allocator-&gt;DefragmentationBegin(*pInfo, pStats, pContext);</div>
+<div class="line"><a name="l17358"></a><span class="lineno">17358</span>&#160;    <span class="comment">// Degenerate case: Nothing to defragment.</span></div>
+<div class="line"><a name="l17359"></a><span class="lineno">17359</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="l17360"></a><span class="lineno">17360</span>&#160;    {</div>
+<div class="line"><a name="l17361"></a><span class="lineno">17361</span>&#160;        <span class="keywordflow">return</span> VK_SUCCESS;</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;    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#a8943f8d65969ce8e2189a1cdf3205e96">pAllocations</a> != VMA_NULL);</div>
+<div class="line"><a name="l17365"></a><span class="lineno">17365</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#a0b3effd57f3fcdeb2ed62210b4ef20e1">pPools</a> != VMA_NULL);</div>
+<div class="line"><a name="l17366"></a><span class="lineno">17366</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#a8943f8d65969ce8e2189a1cdf3205e96">pAllocations</a>));</div>
+<div class="line"><a name="l17367"></a><span class="lineno">17367</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#a0b3effd57f3fcdeb2ed62210b4ef20e1">pPools</a>));</div>
 <div class="line"><a name="l17368"></a><span class="lineno">17368</span>&#160; </div>
-<div class="line"><a name="l17369"></a><span class="lineno">17369</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17370"></a><span class="lineno">17370</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordDefragmentationBegin(</div>
-<div class="line"><a name="l17373"></a><span class="lineno">17373</span>&#160;            allocator-&gt;GetCurrentFrameIndex(), *pInfo, *pContext);</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="preprocessor">#endif</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">return</span> res;</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; </div>
-<div class="line"><a name="l17380"></a><span class="lineno">17380</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="l17381"></a><span class="lineno">17381</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17382"></a><span class="lineno">17382</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</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;    VMA_ASSERT(allocator);</div>
+<div class="line"><a name="l17369"></a><span class="lineno">17369</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDefragmentationBegin&quot;</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_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l17372"></a><span class="lineno">17372</span>&#160; </div>
+<div class="line"><a name="l17373"></a><span class="lineno">17373</span>&#160;    VkResult res = allocator-&gt;DefragmentationBegin(*pInfo, pStats, pContext);</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17376"></a><span class="lineno">17376</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordDefragmentationBegin(</div>
+<div class="line"><a name="l17379"></a><span class="lineno">17379</span>&#160;            allocator-&gt;GetCurrentFrameIndex(), *pInfo, *pContext);</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;<span class="preprocessor">#endif</span></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;    <span class="keywordflow">return</span> res;</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; </div>
-<div class="line"><a name="l17386"></a><span class="lineno">17386</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDefragmentationEnd&quot;</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;    <span class="keywordflow">if</span>(context != VK_NULL_HANDLE)</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;        VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l17386"></a><span class="lineno">17386</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="l17387"></a><span class="lineno">17387</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17388"></a><span class="lineno">17388</span>&#160;    <a class="code" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</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;    VMA_ASSERT(allocator);</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17393"></a><span class="lineno">17393</span>&#160;        <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;            allocator-&gt;GetRecorder()-&gt;RecordDefragmentationEnd(</div>
-<div class="line"><a name="l17396"></a><span class="lineno">17396</span>&#160;                allocator-&gt;GetCurrentFrameIndex(), context);</div>
-<div class="line"><a name="l17397"></a><span class="lineno">17397</span>&#160;        }</div>
-<div class="line"><a name="l17398"></a><span class="lineno">17398</span>&#160;<span class="preprocessor">#endif</span></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;        <span class="keywordflow">return</span> allocator-&gt;DefragmentationEnd(context);</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">else</span></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;        <span class="keywordflow">return</span> VK_SUCCESS;</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;}</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;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="l17409"></a><span class="lineno">17409</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17410"></a><span class="lineno">17410</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l17411"></a><span class="lineno">17411</span>&#160;    VkBuffer buffer)</div>
-<div class="line"><a name="l17412"></a><span class="lineno">17412</span>&#160;{</div>
-<div class="line"><a name="l17413"></a><span class="lineno">17413</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; buffer);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindBufferMemory&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    <span class="keywordflow">return</span> allocator-&gt;BindBufferMemory(allocation, 0, buffer, VMA_NULL);</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;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="l17423"></a><span class="lineno">17423</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17424"></a><span class="lineno">17424</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l17425"></a><span class="lineno">17425</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
-<div class="line"><a name="l17426"></a><span class="lineno">17426</span>&#160;    VkBuffer buffer,</div>
-<div class="line"><a name="l17427"></a><span class="lineno">17427</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</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_ASSERT(allocator &amp;&amp; allocation &amp;&amp; buffer);</div>
-<div class="line"><a name="l17430"></a><span class="lineno">17430</span>&#160; </div>
-<div class="line"><a name="l17431"></a><span class="lineno">17431</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindBufferMemory2&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    <span class="keywordflow">return</span> allocator-&gt;BindBufferMemory(allocation, allocationLocalOffset, buffer, pNext);</div>
-<div class="line"><a name="l17436"></a><span class="lineno">17436</span>&#160;}</div>
-<div class="line"><a name="l17437"></a><span class="lineno">17437</span>&#160; </div>
-<div class="line"><a name="l17438"></a><span class="lineno">17438</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="l17439"></a><span class="lineno">17439</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17440"></a><span class="lineno">17440</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l17441"></a><span class="lineno">17441</span>&#160;    VkImage image)</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;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; image);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindImageMemory&quot;</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l17448"></a><span class="lineno">17448</span>&#160; </div>
-<div class="line"><a name="l17449"></a><span class="lineno">17449</span>&#160;    <span class="keywordflow">return</span> allocator-&gt;BindImageMemory(allocation, 0, image, VMA_NULL);</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_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc">vmaBindImageMemory2</a>(</div>
-<div class="line"><a name="l17453"></a><span class="lineno">17453</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17454"></a><span class="lineno">17454</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
-<div class="line"><a name="l17455"></a><span class="lineno">17455</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
-<div class="line"><a name="l17456"></a><span class="lineno">17456</span>&#160;    VkImage image,</div>
-<div class="line"><a name="l17457"></a><span class="lineno">17457</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</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;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; image);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindImageMemory2&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
-<div class="line"><a name="l17464"></a><span class="lineno">17464</span>&#160; </div>
-<div class="line"><a name="l17465"></a><span class="lineno">17465</span>&#160;        <span class="keywordflow">return</span> allocator-&gt;BindImageMemory(allocation, allocationLocalOffset, image, pNext);</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; </div>
-<div class="line"><a name="l17468"></a><span class="lineno">17468</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="l17469"></a><span class="lineno">17469</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17470"></a><span class="lineno">17470</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* pBufferCreateInfo,</div>
-<div class="line"><a name="l17471"></a><span class="lineno">17471</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="l17472"></a><span class="lineno">17472</span>&#160;    VkBuffer* pBuffer,</div>
-<div class="line"><a name="l17473"></a><span class="lineno">17473</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
-<div class="line"><a name="l17474"></a><span class="lineno">17474</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</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;    VMA_ASSERT(allocator &amp;&amp; pBufferCreateInfo &amp;&amp; pAllocationCreateInfo &amp;&amp; pBuffer &amp;&amp; pAllocation);</div>
-<div class="line"><a name="l17477"></a><span class="lineno">17477</span>&#160; </div>
-<div class="line"><a name="l17478"></a><span class="lineno">17478</span>&#160;    <span class="keywordflow">if</span>(pBufferCreateInfo-&gt;size == 0)</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;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</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;    </div>
-<div class="line"><a name="l17483"></a><span class="lineno">17483</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreateBuffer&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    *pBuffer = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l17488"></a><span class="lineno">17488</span>&#160;    *pAllocation = VK_NULL_HANDLE;</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">// 1. Create VkBuffer.</span></div>
-<div class="line"><a name="l17491"></a><span class="lineno">17491</span>&#160;    VkResult res = (*allocator-&gt;GetVulkanFunctions().vkCreateBuffer)(</div>
-<div class="line"><a name="l17492"></a><span class="lineno">17492</span>&#160;        allocator-&gt;m_hDevice,</div>
-<div class="line"><a name="l17493"></a><span class="lineno">17493</span>&#160;        pBufferCreateInfo,</div>
-<div class="line"><a name="l17494"></a><span class="lineno">17494</span>&#160;        allocator-&gt;GetAllocationCallbacks(),</div>
-<div class="line"><a name="l17495"></a><span class="lineno">17495</span>&#160;        pBuffer);</div>
-<div class="line"><a name="l17496"></a><span class="lineno">17496</span>&#160;    <span class="keywordflow">if</span>(res &gt;= 0)</div>
-<div class="line"><a name="l17497"></a><span class="lineno">17497</span>&#160;    {</div>
-<div class="line"><a name="l17498"></a><span class="lineno">17498</span>&#160;        <span class="comment">// 2. vkGetBufferMemoryRequirements.</span></div>
-<div class="line"><a name="l17499"></a><span class="lineno">17499</span>&#160;        VkMemoryRequirements vkMemReq = {};</div>
-<div class="line"><a name="l17500"></a><span class="lineno">17500</span>&#160;        <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l17501"></a><span class="lineno">17501</span>&#160;        <span class="keywordtype">bool</span> prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l17502"></a><span class="lineno">17502</span>&#160;        allocator-&gt;GetBufferMemoryRequirements(*pBuffer, vkMemReq,</div>
-<div class="line"><a name="l17503"></a><span class="lineno">17503</span>&#160;            requiresDedicatedAllocation, prefersDedicatedAllocation);</div>
-<div class="line"><a name="l17504"></a><span class="lineno">17504</span>&#160; </div>
-<div class="line"><a name="l17505"></a><span class="lineno">17505</span>&#160;        <span class="comment">// Make sure alignment requirements for specific buffer usages reported</span></div>
-<div class="line"><a name="l17506"></a><span class="lineno">17506</span>&#160;        <span class="comment">// in Physical Device Properties are included in alignment reported by memory requirements.</span></div>
-<div class="line"><a name="l17507"></a><span class="lineno">17507</span>&#160;        <span class="keywordflow">if</span>((pBufferCreateInfo-&gt;usage &amp; VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT) != 0)</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;           VMA_ASSERT(vkMemReq.alignment %</div>
-<div class="line"><a name="l17510"></a><span class="lineno">17510</span>&#160;              allocator-&gt;m_PhysicalDeviceProperties.limits.minTexelBufferOffsetAlignment == 0);</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;        <span class="keywordflow">if</span>((pBufferCreateInfo-&gt;usage &amp; VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT) != 0)</div>
-<div class="line"><a name="l17513"></a><span class="lineno">17513</span>&#160;        {</div>
-<div class="line"><a name="l17514"></a><span class="lineno">17514</span>&#160;           VMA_ASSERT(vkMemReq.alignment %</div>
-<div class="line"><a name="l17515"></a><span class="lineno">17515</span>&#160;              allocator-&gt;m_PhysicalDeviceProperties.limits.minUniformBufferOffsetAlignment == 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;        <span class="keywordflow">if</span>((pBufferCreateInfo-&gt;usage &amp; VK_BUFFER_USAGE_STORAGE_BUFFER_BIT) != 0)</div>
-<div class="line"><a name="l17518"></a><span class="lineno">17518</span>&#160;        {</div>
-<div class="line"><a name="l17519"></a><span class="lineno">17519</span>&#160;           VMA_ASSERT(vkMemReq.alignment %</div>
-<div class="line"><a name="l17520"></a><span class="lineno">17520</span>&#160;              allocator-&gt;m_PhysicalDeviceProperties.limits.minStorageBufferOffsetAlignment == 0);</div>
-<div class="line"><a name="l17521"></a><span class="lineno">17521</span>&#160;        }</div>
-<div class="line"><a name="l17522"></a><span class="lineno">17522</span>&#160; </div>
-<div class="line"><a name="l17523"></a><span class="lineno">17523</span>&#160;        <span class="comment">// 3. Allocate memory using allocator.</span></div>
-<div class="line"><a name="l17524"></a><span class="lineno">17524</span>&#160;        res = allocator-&gt;AllocateMemory(</div>
-<div class="line"><a name="l17525"></a><span class="lineno">17525</span>&#160;            vkMemReq,</div>
-<div class="line"><a name="l17526"></a><span class="lineno">17526</span>&#160;            requiresDedicatedAllocation,</div>
-<div class="line"><a name="l17527"></a><span class="lineno">17527</span>&#160;            prefersDedicatedAllocation,</div>
-<div class="line"><a name="l17528"></a><span class="lineno">17528</span>&#160;            *pBuffer, <span class="comment">// dedicatedBuffer</span></div>
-<div class="line"><a name="l17529"></a><span class="lineno">17529</span>&#160;            VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
-<div class="line"><a name="l17530"></a><span class="lineno">17530</span>&#160;            *pAllocationCreateInfo,</div>
-<div class="line"><a name="l17531"></a><span class="lineno">17531</span>&#160;            VMA_SUBALLOCATION_TYPE_BUFFER,</div>
-<div class="line"><a name="l17532"></a><span class="lineno">17532</span>&#160;            1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l17533"></a><span class="lineno">17533</span>&#160;            pAllocation);</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17536"></a><span class="lineno">17536</span>&#160;        <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;            allocator-&gt;GetRecorder()-&gt;RecordCreateBuffer(</div>
-<div class="line"><a name="l17539"></a><span class="lineno">17539</span>&#160;                allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17540"></a><span class="lineno">17540</span>&#160;                *pBufferCreateInfo,</div>
-<div class="line"><a name="l17541"></a><span class="lineno">17541</span>&#160;                *pAllocationCreateInfo,</div>
-<div class="line"><a name="l17542"></a><span class="lineno">17542</span>&#160;                *pAllocation);</div>
-<div class="line"><a name="l17543"></a><span class="lineno">17543</span>&#160;        }</div>
-<div class="line"><a name="l17544"></a><span class="lineno">17544</span>&#160;<span class="preprocessor">#endif</span></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="keywordflow">if</span>(res &gt;= 0)</div>
-<div class="line"><a name="l17547"></a><span class="lineno">17547</span>&#160;        {</div>
-<div class="line"><a name="l17548"></a><span class="lineno">17548</span>&#160;            <span class="comment">// 3. Bind buffer with memory.</span></div>
-<div class="line"><a name="l17549"></a><span class="lineno">17549</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="l17550"></a><span class="lineno">17550</span>&#160;            {</div>
-<div class="line"><a name="l17551"></a><span class="lineno">17551</span>&#160;                res = allocator-&gt;BindBufferMemory(*pAllocation, 0, *pBuffer, VMA_NULL);</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;            <span class="keywordflow">if</span>(res &gt;= 0)</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;                <span class="comment">// All steps succeeded.</span></div>
-<div class="line"><a name="l17556"></a><span class="lineno">17556</span>&#160;<span class="preprocessor">                #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l17557"></a><span class="lineno">17557</span>&#160;                    (*pAllocation)-&gt;InitBufferImageUsage(pBufferCreateInfo-&gt;usage);</div>
-<div class="line"><a name="l17558"></a><span class="lineno">17558</span>&#160;<span class="preprocessor">                #endif</span></div>
-<div class="line"><a name="l17559"></a><span class="lineno">17559</span>&#160;                <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL)</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;                    allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</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; </div>
-<div class="line"><a name="l17564"></a><span class="lineno">17564</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</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;            allocator-&gt;FreeMemory(</div>
-<div class="line"><a name="l17567"></a><span class="lineno">17567</span>&#160;                1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l17568"></a><span class="lineno">17568</span>&#160;                pAllocation);</div>
-<div class="line"><a name="l17569"></a><span class="lineno">17569</span>&#160;            *pAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l17570"></a><span class="lineno">17570</span>&#160;            (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, *pBuffer, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l17571"></a><span class="lineno">17571</span>&#160;            *pBuffer = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l17572"></a><span class="lineno">17572</span>&#160;            <span class="keywordflow">return</span> res;</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;        (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, *pBuffer, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l17575"></a><span class="lineno">17575</span>&#160;        *pBuffer = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l17576"></a><span class="lineno">17576</span>&#160;        <span class="keywordflow">return</span> res;</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="keywordflow">return</span> res;</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; </div>
-<div class="line"><a name="l17581"></a><span class="lineno">17581</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="l17582"></a><span class="lineno">17582</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17583"></a><span class="lineno">17583</span>&#160;    VkBuffer buffer,</div>
-<div class="line"><a name="l17584"></a><span class="lineno">17584</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l17587"></a><span class="lineno">17587</span>&#160; </div>
-<div class="line"><a name="l17588"></a><span class="lineno">17588</span>&#160;    <span class="keywordflow">if</span>(buffer == VK_NULL_HANDLE &amp;&amp; allocation == VK_NULL_HANDLE)</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>;</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; </div>
-<div class="line"><a name="l17593"></a><span class="lineno">17593</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyBuffer&quot;</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17598"></a><span class="lineno">17598</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordDestroyBuffer(</div>
-<div class="line"><a name="l17601"></a><span class="lineno">17601</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17602"></a><span class="lineno">17602</span>&#160;            allocation);</div>
-<div class="line"><a name="l17603"></a><span class="lineno">17603</span>&#160;    }</div>
-<div class="line"><a name="l17604"></a><span class="lineno">17604</span>&#160;<span class="preprocessor">#endif</span></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>(buffer != VK_NULL_HANDLE)</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;        (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, buffer, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l17392"></a><span class="lineno">17392</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDefragmentationEnd&quot;</span>);</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;    <span class="keywordflow">if</span>(context != VK_NULL_HANDLE)</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;        VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l17397"></a><span class="lineno">17397</span>&#160; </div>
+<div class="line"><a name="l17398"></a><span class="lineno">17398</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17399"></a><span class="lineno">17399</span>&#160;        <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;            allocator-&gt;GetRecorder()-&gt;RecordDefragmentationEnd(</div>
+<div class="line"><a name="l17402"></a><span class="lineno">17402</span>&#160;                allocator-&gt;GetCurrentFrameIndex(), context);</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;<span class="preprocessor">#endif</span></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">return</span> allocator-&gt;DefragmentationEnd(context);</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">else</span></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="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l17411"></a><span class="lineno">17411</span>&#160;    }</div>
+<div class="line"><a name="l17412"></a><span class="lineno">17412</span>&#160;}</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;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="l17415"></a><span class="lineno">17415</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17416"></a><span class="lineno">17416</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l17417"></a><span class="lineno">17417</span>&#160;    VkBuffer buffer)</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(allocator &amp;&amp; allocation &amp;&amp; buffer);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindBufferMemory&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    <span class="keywordflow">return</span> allocator-&gt;BindBufferMemory(allocation, 0, buffer, VMA_NULL);</div>
+<div class="line"><a name="l17426"></a><span class="lineno">17426</span>&#160;}</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_CALL_PRE VkResult VMA_CALL_POST <a class="code" href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a">vmaBindBufferMemory2</a>(</div>
+<div class="line"><a name="l17429"></a><span class="lineno">17429</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17430"></a><span class="lineno">17430</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l17431"></a><span class="lineno">17431</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
+<div class="line"><a name="l17432"></a><span class="lineno">17432</span>&#160;    VkBuffer buffer,</div>
+<div class="line"><a name="l17433"></a><span class="lineno">17433</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</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;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; buffer);</div>
+<div class="line"><a name="l17436"></a><span class="lineno">17436</span>&#160; </div>
+<div class="line"><a name="l17437"></a><span class="lineno">17437</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindBufferMemory2&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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> allocator-&gt;BindBufferMemory(allocation, allocationLocalOffset, buffer, pNext);</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;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="l17445"></a><span class="lineno">17445</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17446"></a><span class="lineno">17446</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l17447"></a><span class="lineno">17447</span>&#160;    VkImage image)</div>
+<div class="line"><a name="l17448"></a><span class="lineno">17448</span>&#160;{</div>
+<div class="line"><a name="l17449"></a><span class="lineno">17449</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; image);</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_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindImageMemory&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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="keywordflow">return</span> allocator-&gt;BindImageMemory(allocation, 0, image, VMA_NULL);</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; </div>
+<div class="line"><a name="l17458"></a><span class="lineno">17458</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="l17459"></a><span class="lineno">17459</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17460"></a><span class="lineno">17460</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation,</div>
+<div class="line"><a name="l17461"></a><span class="lineno">17461</span>&#160;    VkDeviceSize allocationLocalOffset,</div>
+<div class="line"><a name="l17462"></a><span class="lineno">17462</span>&#160;    VkImage image,</div>
+<div class="line"><a name="l17463"></a><span class="lineno">17463</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">void</span>* pNext)</div>
+<div class="line"><a name="l17464"></a><span class="lineno">17464</span>&#160;{</div>
+<div class="line"><a name="l17465"></a><span class="lineno">17465</span>&#160;    VMA_ASSERT(allocator &amp;&amp; allocation &amp;&amp; image);</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaBindImageMemory2&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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="keywordflow">return</span> allocator-&gt;BindImageMemory(allocation, allocationLocalOffset, image, pNext);</div>
+<div class="line"><a name="l17472"></a><span class="lineno">17472</span>&#160;}</div>
+<div class="line"><a name="l17473"></a><span class="lineno">17473</span>&#160; </div>
+<div class="line"><a name="l17474"></a><span class="lineno">17474</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="l17475"></a><span class="lineno">17475</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17476"></a><span class="lineno">17476</span>&#160;    <span class="keyword">const</span> VkBufferCreateInfo* pBufferCreateInfo,</div>
+<div class="line"><a name="l17477"></a><span class="lineno">17477</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="l17478"></a><span class="lineno">17478</span>&#160;    VkBuffer* pBuffer,</div>
+<div class="line"><a name="l17479"></a><span class="lineno">17479</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
+<div class="line"><a name="l17480"></a><span class="lineno">17480</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</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;    VMA_ASSERT(allocator &amp;&amp; pBufferCreateInfo &amp;&amp; pAllocationCreateInfo &amp;&amp; pBuffer &amp;&amp; pAllocation);</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;    <span class="keywordflow">if</span>(pBufferCreateInfo-&gt;size == 0)</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;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</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;    </div>
+<div class="line"><a name="l17489"></a><span class="lineno">17489</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreateBuffer&quot;</span>);</div>
+<div class="line"><a name="l17490"></a><span class="lineno">17490</span>&#160;    </div>
+<div class="line"><a name="l17491"></a><span class="lineno">17491</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    *pBuffer = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l17494"></a><span class="lineno">17494</span>&#160;    *pAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l17495"></a><span class="lineno">17495</span>&#160; </div>
+<div class="line"><a name="l17496"></a><span class="lineno">17496</span>&#160;    <span class="comment">// 1. Create VkBuffer.</span></div>
+<div class="line"><a name="l17497"></a><span class="lineno">17497</span>&#160;    VkResult res = (*allocator-&gt;GetVulkanFunctions().vkCreateBuffer)(</div>
+<div class="line"><a name="l17498"></a><span class="lineno">17498</span>&#160;        allocator-&gt;m_hDevice,</div>
+<div class="line"><a name="l17499"></a><span class="lineno">17499</span>&#160;        pBufferCreateInfo,</div>
+<div class="line"><a name="l17500"></a><span class="lineno">17500</span>&#160;        allocator-&gt;GetAllocationCallbacks(),</div>
+<div class="line"><a name="l17501"></a><span class="lineno">17501</span>&#160;        pBuffer);</div>
+<div class="line"><a name="l17502"></a><span class="lineno">17502</span>&#160;    <span class="keywordflow">if</span>(res &gt;= 0)</div>
+<div class="line"><a name="l17503"></a><span class="lineno">17503</span>&#160;    {</div>
+<div class="line"><a name="l17504"></a><span class="lineno">17504</span>&#160;        <span class="comment">// 2. vkGetBufferMemoryRequirements.</span></div>
+<div class="line"><a name="l17505"></a><span class="lineno">17505</span>&#160;        VkMemoryRequirements vkMemReq = {};</div>
+<div class="line"><a name="l17506"></a><span class="lineno">17506</span>&#160;        <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l17507"></a><span class="lineno">17507</span>&#160;        <span class="keywordtype">bool</span> prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l17508"></a><span class="lineno">17508</span>&#160;        allocator-&gt;GetBufferMemoryRequirements(*pBuffer, vkMemReq,</div>
+<div class="line"><a name="l17509"></a><span class="lineno">17509</span>&#160;            requiresDedicatedAllocation, prefersDedicatedAllocation);</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">// Make sure alignment requirements for specific buffer usages reported</span></div>
+<div class="line"><a name="l17512"></a><span class="lineno">17512</span>&#160;        <span class="comment">// in Physical Device Properties are included in alignment reported by memory requirements.</span></div>
+<div class="line"><a name="l17513"></a><span class="lineno">17513</span>&#160;        <span class="keywordflow">if</span>((pBufferCreateInfo-&gt;usage &amp; VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT) != 0)</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;           VMA_ASSERT(vkMemReq.alignment %</div>
+<div class="line"><a name="l17516"></a><span class="lineno">17516</span>&#160;              allocator-&gt;m_PhysicalDeviceProperties.limits.minTexelBufferOffsetAlignment == 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;        <span class="keywordflow">if</span>((pBufferCreateInfo-&gt;usage &amp; VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT) != 0)</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;           VMA_ASSERT(vkMemReq.alignment %</div>
+<div class="line"><a name="l17521"></a><span class="lineno">17521</span>&#160;              allocator-&gt;m_PhysicalDeviceProperties.limits.minUniformBufferOffsetAlignment == 0);</div>
+<div class="line"><a name="l17522"></a><span class="lineno">17522</span>&#160;        }</div>
+<div class="line"><a name="l17523"></a><span class="lineno">17523</span>&#160;        <span class="keywordflow">if</span>((pBufferCreateInfo-&gt;usage &amp; VK_BUFFER_USAGE_STORAGE_BUFFER_BIT) != 0)</div>
+<div class="line"><a name="l17524"></a><span class="lineno">17524</span>&#160;        {</div>
+<div class="line"><a name="l17525"></a><span class="lineno">17525</span>&#160;           VMA_ASSERT(vkMemReq.alignment %</div>
+<div class="line"><a name="l17526"></a><span class="lineno">17526</span>&#160;              allocator-&gt;m_PhysicalDeviceProperties.limits.minStorageBufferOffsetAlignment == 0);</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;        <span class="comment">// 3. Allocate memory using allocator.</span></div>
+<div class="line"><a name="l17530"></a><span class="lineno">17530</span>&#160;        res = allocator-&gt;AllocateMemory(</div>
+<div class="line"><a name="l17531"></a><span class="lineno">17531</span>&#160;            vkMemReq,</div>
+<div class="line"><a name="l17532"></a><span class="lineno">17532</span>&#160;            requiresDedicatedAllocation,</div>
+<div class="line"><a name="l17533"></a><span class="lineno">17533</span>&#160;            prefersDedicatedAllocation,</div>
+<div class="line"><a name="l17534"></a><span class="lineno">17534</span>&#160;            *pBuffer, <span class="comment">// dedicatedBuffer</span></div>
+<div class="line"><a name="l17535"></a><span class="lineno">17535</span>&#160;            VK_NULL_HANDLE, <span class="comment">// dedicatedImage</span></div>
+<div class="line"><a name="l17536"></a><span class="lineno">17536</span>&#160;            *pAllocationCreateInfo,</div>
+<div class="line"><a name="l17537"></a><span class="lineno">17537</span>&#160;            VMA_SUBALLOCATION_TYPE_BUFFER,</div>
+<div class="line"><a name="l17538"></a><span class="lineno">17538</span>&#160;            1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l17539"></a><span class="lineno">17539</span>&#160;            pAllocation);</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17542"></a><span class="lineno">17542</span>&#160;        <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l17543"></a><span class="lineno">17543</span>&#160;        {</div>
+<div class="line"><a name="l17544"></a><span class="lineno">17544</span>&#160;            allocator-&gt;GetRecorder()-&gt;RecordCreateBuffer(</div>
+<div class="line"><a name="l17545"></a><span class="lineno">17545</span>&#160;                allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17546"></a><span class="lineno">17546</span>&#160;                *pBufferCreateInfo,</div>
+<div class="line"><a name="l17547"></a><span class="lineno">17547</span>&#160;                *pAllocationCreateInfo,</div>
+<div class="line"><a name="l17548"></a><span class="lineno">17548</span>&#160;                *pAllocation);</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="preprocessor">#endif</span></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;        <span class="keywordflow">if</span>(res &gt;= 0)</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;            <span class="comment">// 3. Bind buffer with memory.</span></div>
+<div class="line"><a name="l17555"></a><span class="lineno">17555</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="l17556"></a><span class="lineno">17556</span>&#160;            {</div>
+<div class="line"><a name="l17557"></a><span class="lineno">17557</span>&#160;                res = allocator-&gt;BindBufferMemory(*pAllocation, 0, *pBuffer, VMA_NULL);</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;            <span class="keywordflow">if</span>(res &gt;= 0)</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;                <span class="comment">// All steps succeeded.</span></div>
+<div class="line"><a name="l17562"></a><span class="lineno">17562</span>&#160;<span class="preprocessor">                #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l17563"></a><span class="lineno">17563</span>&#160;                    (*pAllocation)-&gt;InitBufferImageUsage(pBufferCreateInfo-&gt;usage);</div>
+<div class="line"><a name="l17564"></a><span class="lineno">17564</span>&#160;<span class="preprocessor">                #endif</span></div>
+<div class="line"><a name="l17565"></a><span class="lineno">17565</span>&#160;                <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL)</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;                    allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</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; </div>
+<div class="line"><a name="l17570"></a><span class="lineno">17570</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</div>
+<div class="line"><a name="l17571"></a><span class="lineno">17571</span>&#160;            }</div>
+<div class="line"><a name="l17572"></a><span class="lineno">17572</span>&#160;            allocator-&gt;FreeMemory(</div>
+<div class="line"><a name="l17573"></a><span class="lineno">17573</span>&#160;                1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l17574"></a><span class="lineno">17574</span>&#160;                pAllocation);</div>
+<div class="line"><a name="l17575"></a><span class="lineno">17575</span>&#160;            *pAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l17576"></a><span class="lineno">17576</span>&#160;            (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, *pBuffer, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l17577"></a><span class="lineno">17577</span>&#160;            *pBuffer = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l17578"></a><span class="lineno">17578</span>&#160;            <span class="keywordflow">return</span> res;</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;        (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, *pBuffer, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l17581"></a><span class="lineno">17581</span>&#160;        *pBuffer = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l17582"></a><span class="lineno">17582</span>&#160;        <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l17583"></a><span class="lineno">17583</span>&#160;    }</div>
+<div class="line"><a name="l17584"></a><span class="lineno">17584</span>&#160;    <span class="keywordflow">return</span> res;</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; </div>
+<div class="line"><a name="l17587"></a><span class="lineno">17587</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="l17588"></a><span class="lineno">17588</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17589"></a><span class="lineno">17589</span>&#160;    VkBuffer buffer,</div>
+<div class="line"><a name="l17590"></a><span class="lineno">17590</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    VMA_ASSERT(allocator);</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">if</span>(buffer == VK_NULL_HANDLE &amp;&amp; allocation == VK_NULL_HANDLE)</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;        <span class="keywordflow">return</span>;</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; </div>
+<div class="line"><a name="l17599"></a><span class="lineno">17599</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyBuffer&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17604"></a><span class="lineno">17604</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordDestroyBuffer(</div>
+<div class="line"><a name="l17607"></a><span class="lineno">17607</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17608"></a><span class="lineno">17608</span>&#160;            allocation);</div>
 <div class="line"><a name="l17609"></a><span class="lineno">17609</span>&#160;    }</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="keywordflow">if</span>(allocation != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l17612"></a><span class="lineno">17612</span>&#160;    {</div>
-<div class="line"><a name="l17613"></a><span class="lineno">17613</span>&#160;        allocator-&gt;FreeMemory(</div>
-<div class="line"><a name="l17614"></a><span class="lineno">17614</span>&#160;            1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l17615"></a><span class="lineno">17615</span>&#160;            &amp;allocation);</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; </div>
-<div class="line"><a name="l17619"></a><span class="lineno">17619</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="l17620"></a><span class="lineno">17620</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17621"></a><span class="lineno">17621</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo* pImageCreateInfo,</div>
-<div class="line"><a name="l17622"></a><span class="lineno">17622</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="l17623"></a><span class="lineno">17623</span>&#160;    VkImage* pImage,</div>
-<div class="line"><a name="l17624"></a><span class="lineno">17624</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
-<div class="line"><a name="l17625"></a><span class="lineno">17625</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</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;    VMA_ASSERT(allocator &amp;&amp; pImageCreateInfo &amp;&amp; pAllocationCreateInfo &amp;&amp; pImage &amp;&amp; pAllocation);</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="keywordflow">if</span>(pImageCreateInfo-&gt;extent.width == 0 ||</div>
-<div class="line"><a name="l17630"></a><span class="lineno">17630</span>&#160;        pImageCreateInfo-&gt;extent.height == 0 ||</div>
-<div class="line"><a name="l17631"></a><span class="lineno">17631</span>&#160;        pImageCreateInfo-&gt;extent.depth == 0 ||</div>
-<div class="line"><a name="l17632"></a><span class="lineno">17632</span>&#160;        pImageCreateInfo-&gt;mipLevels == 0 ||</div>
-<div class="line"><a name="l17633"></a><span class="lineno">17633</span>&#160;        pImageCreateInfo-&gt;arrayLayers == 0)</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="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</div>
-<div class="line"><a name="l17636"></a><span class="lineno">17636</span>&#160;    }</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreateImage&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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;    *pImage = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l17643"></a><span class="lineno">17643</span>&#160;    *pAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l17644"></a><span class="lineno">17644</span>&#160; </div>
-<div class="line"><a name="l17645"></a><span class="lineno">17645</span>&#160;    <span class="comment">// 1. Create VkImage.</span></div>
-<div class="line"><a name="l17646"></a><span class="lineno">17646</span>&#160;    VkResult res = (*allocator-&gt;GetVulkanFunctions().vkCreateImage)(</div>
-<div class="line"><a name="l17647"></a><span class="lineno">17647</span>&#160;        allocator-&gt;m_hDevice,</div>
-<div class="line"><a name="l17648"></a><span class="lineno">17648</span>&#160;        pImageCreateInfo,</div>
-<div class="line"><a name="l17649"></a><span class="lineno">17649</span>&#160;        allocator-&gt;GetAllocationCallbacks(),</div>
-<div class="line"><a name="l17650"></a><span class="lineno">17650</span>&#160;        pImage);</div>
-<div class="line"><a name="l17651"></a><span class="lineno">17651</span>&#160;    <span class="keywordflow">if</span>(res &gt;= 0)</div>
-<div class="line"><a name="l17652"></a><span class="lineno">17652</span>&#160;    {</div>
-<div class="line"><a name="l17653"></a><span class="lineno">17653</span>&#160;        VmaSuballocationType suballocType = pImageCreateInfo-&gt;tiling == VK_IMAGE_TILING_OPTIMAL ?</div>
-<div class="line"><a name="l17654"></a><span class="lineno">17654</span>&#160;            VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL :</div>
-<div class="line"><a name="l17655"></a><span class="lineno">17655</span>&#160;            VMA_SUBALLOCATION_TYPE_IMAGE_LINEAR;</div>
-<div class="line"><a name="l17656"></a><span class="lineno">17656</span>&#160;        </div>
-<div class="line"><a name="l17657"></a><span class="lineno">17657</span>&#160;        <span class="comment">// 2. Allocate memory using allocator.</span></div>
-<div class="line"><a name="l17658"></a><span class="lineno">17658</span>&#160;        VkMemoryRequirements vkMemReq = {};</div>
-<div class="line"><a name="l17659"></a><span class="lineno">17659</span>&#160;        <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l17660"></a><span class="lineno">17660</span>&#160;        <span class="keywordtype">bool</span> prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
-<div class="line"><a name="l17661"></a><span class="lineno">17661</span>&#160;        allocator-&gt;GetImageMemoryRequirements(*pImage, vkMemReq,</div>
-<div class="line"><a name="l17662"></a><span class="lineno">17662</span>&#160;            requiresDedicatedAllocation, prefersDedicatedAllocation);</div>
-<div class="line"><a name="l17663"></a><span class="lineno">17663</span>&#160; </div>
-<div class="line"><a name="l17664"></a><span class="lineno">17664</span>&#160;        res = allocator-&gt;AllocateMemory(</div>
-<div class="line"><a name="l17665"></a><span class="lineno">17665</span>&#160;            vkMemReq,</div>
-<div class="line"><a name="l17666"></a><span class="lineno">17666</span>&#160;            requiresDedicatedAllocation,</div>
-<div class="line"><a name="l17667"></a><span class="lineno">17667</span>&#160;            prefersDedicatedAllocation,</div>
-<div class="line"><a name="l17668"></a><span class="lineno">17668</span>&#160;            VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
-<div class="line"><a name="l17669"></a><span class="lineno">17669</span>&#160;            *pImage, <span class="comment">// dedicatedImage</span></div>
-<div class="line"><a name="l17670"></a><span class="lineno">17670</span>&#160;            *pAllocationCreateInfo,</div>
-<div class="line"><a name="l17671"></a><span class="lineno">17671</span>&#160;            suballocType,</div>
-<div class="line"><a name="l17672"></a><span class="lineno">17672</span>&#160;            1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l17673"></a><span class="lineno">17673</span>&#160;            pAllocation);</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;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17676"></a><span class="lineno">17676</span>&#160;        <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
-<div class="line"><a name="l17677"></a><span class="lineno">17677</span>&#160;        {</div>
-<div class="line"><a name="l17678"></a><span class="lineno">17678</span>&#160;            allocator-&gt;GetRecorder()-&gt;RecordCreateImage(</div>
-<div class="line"><a name="l17679"></a><span class="lineno">17679</span>&#160;                allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17680"></a><span class="lineno">17680</span>&#160;                *pImageCreateInfo,</div>
-<div class="line"><a name="l17681"></a><span class="lineno">17681</span>&#160;                *pAllocationCreateInfo,</div>
-<div class="line"><a name="l17682"></a><span class="lineno">17682</span>&#160;                *pAllocation);</div>
-<div class="line"><a name="l17683"></a><span class="lineno">17683</span>&#160;        }</div>
-<div class="line"><a name="l17684"></a><span class="lineno">17684</span>&#160;<span class="preprocessor">#endif</span></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;        <span class="keywordflow">if</span>(res &gt;= 0)</div>
-<div class="line"><a name="l17687"></a><span class="lineno">17687</span>&#160;        {</div>
-<div class="line"><a name="l17688"></a><span class="lineno">17688</span>&#160;            <span class="comment">// 3. Bind image with memory.</span></div>
-<div class="line"><a name="l17689"></a><span class="lineno">17689</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="l17690"></a><span class="lineno">17690</span>&#160;            {</div>
-<div class="line"><a name="l17691"></a><span class="lineno">17691</span>&#160;                res = allocator-&gt;BindImageMemory(*pAllocation, 0, *pImage, VMA_NULL);</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">if</span>(res &gt;= 0)</div>
-<div class="line"><a name="l17694"></a><span class="lineno">17694</span>&#160;            {</div>
-<div class="line"><a name="l17695"></a><span class="lineno">17695</span>&#160;                <span class="comment">// All steps succeeded.</span></div>
-<div class="line"><a name="l17696"></a><span class="lineno">17696</span>&#160;<span class="preprocessor">                #if VMA_STATS_STRING_ENABLED</span></div>
-<div class="line"><a name="l17697"></a><span class="lineno">17697</span>&#160;                    (*pAllocation)-&gt;InitBufferImageUsage(pImageCreateInfo-&gt;usage);</div>
-<div class="line"><a name="l17698"></a><span class="lineno">17698</span>&#160;<span class="preprocessor">                #endif</span></div>
-<div class="line"><a name="l17699"></a><span class="lineno">17699</span>&#160;                <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL)</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;                    allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</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;                <span class="keywordflow">return</span> VK_SUCCESS;</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;            allocator-&gt;FreeMemory(</div>
-<div class="line"><a name="l17707"></a><span class="lineno">17707</span>&#160;                1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l17708"></a><span class="lineno">17708</span>&#160;                pAllocation);</div>
-<div class="line"><a name="l17709"></a><span class="lineno">17709</span>&#160;            *pAllocation = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l17710"></a><span class="lineno">17710</span>&#160;            (*allocator-&gt;GetVulkanFunctions().vkDestroyImage)(allocator-&gt;m_hDevice, *pImage, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l17711"></a><span class="lineno">17711</span>&#160;            *pImage = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l17712"></a><span class="lineno">17712</span>&#160;            <span class="keywordflow">return</span> res;</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;        (*allocator-&gt;GetVulkanFunctions().vkDestroyImage)(allocator-&gt;m_hDevice, *pImage, allocator-&gt;GetAllocationCallbacks());</div>
-<div class="line"><a name="l17715"></a><span class="lineno">17715</span>&#160;        *pImage = VK_NULL_HANDLE;</div>
-<div class="line"><a name="l17716"></a><span class="lineno">17716</span>&#160;        <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l17717"></a><span class="lineno">17717</span>&#160;    }</div>
-<div class="line"><a name="l17718"></a><span class="lineno">17718</span>&#160;    <span class="keywordflow">return</span> res;</div>
-<div class="line"><a name="l17719"></a><span class="lineno">17719</span>&#160;}</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;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="l17722"></a><span class="lineno">17722</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
-<div class="line"><a name="l17723"></a><span class="lineno">17723</span>&#160;    VkImage image,</div>
-<div class="line"><a name="l17724"></a><span class="lineno">17724</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    VMA_ASSERT(allocator);</div>
-<div class="line"><a name="l17727"></a><span class="lineno">17727</span>&#160; </div>
-<div class="line"><a name="l17728"></a><span class="lineno">17728</span>&#160;    <span class="keywordflow">if</span>(image == VK_NULL_HANDLE &amp;&amp; allocation == VK_NULL_HANDLE)</div>
-<div class="line"><a name="l17729"></a><span class="lineno">17729</span>&#160;    {</div>
-<div class="line"><a name="l17730"></a><span class="lineno">17730</span>&#160;        <span class="keywordflow">return</span>;</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyImage&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
-<div class="line"><a name="l17738"></a><span class="lineno">17738</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</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;        allocator-&gt;GetRecorder()-&gt;RecordDestroyImage(</div>
-<div class="line"><a name="l17741"></a><span class="lineno">17741</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
-<div class="line"><a name="l17742"></a><span class="lineno">17742</span>&#160;            allocation);</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="preprocessor">#endif</span></div>
-<div class="line"><a name="l17745"></a><span class="lineno">17745</span>&#160; </div>
-<div class="line"><a name="l17746"></a><span class="lineno">17746</span>&#160;    <span class="keywordflow">if</span>(image != VK_NULL_HANDLE)</div>
-<div class="line"><a name="l17747"></a><span class="lineno">17747</span>&#160;    {</div>
-<div class="line"><a name="l17748"></a><span class="lineno">17748</span>&#160;        (*allocator-&gt;GetVulkanFunctions().vkDestroyImage)(allocator-&gt;m_hDevice, image, allocator-&gt;GetAllocationCallbacks());</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="keywordflow">if</span>(buffer != VK_NULL_HANDLE)</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;        (*allocator-&gt;GetVulkanFunctions().vkDestroyBuffer)(allocator-&gt;m_hDevice, buffer, allocator-&gt;GetAllocationCallbacks());</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;    <span class="keywordflow">if</span>(allocation != VK_NULL_HANDLE)</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;        allocator-&gt;FreeMemory(</div>
+<div class="line"><a name="l17620"></a><span class="lineno">17620</span>&#160;            1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l17621"></a><span class="lineno">17621</span>&#160;            &amp;allocation);</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; </div>
+<div class="line"><a name="l17625"></a><span class="lineno">17625</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="l17626"></a><span class="lineno">17626</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17627"></a><span class="lineno">17627</span>&#160;    <span class="keyword">const</span> VkImageCreateInfo* pImageCreateInfo,</div>
+<div class="line"><a name="l17628"></a><span class="lineno">17628</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="l17629"></a><span class="lineno">17629</span>&#160;    VkImage* pImage,</div>
+<div class="line"><a name="l17630"></a><span class="lineno">17630</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a>* pAllocation,</div>
+<div class="line"><a name="l17631"></a><span class="lineno">17631</span>&#160;    <a class="code" href="struct_vma_allocation_info.html">VmaAllocationInfo</a>* pAllocationInfo)</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;    VMA_ASSERT(allocator &amp;&amp; pImageCreateInfo &amp;&amp; pAllocationCreateInfo &amp;&amp; pImage &amp;&amp; pAllocation);</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="keywordflow">if</span>(pImageCreateInfo-&gt;extent.width == 0 ||</div>
+<div class="line"><a name="l17636"></a><span class="lineno">17636</span>&#160;        pImageCreateInfo-&gt;extent.height == 0 ||</div>
+<div class="line"><a name="l17637"></a><span class="lineno">17637</span>&#160;        pImageCreateInfo-&gt;extent.depth == 0 ||</div>
+<div class="line"><a name="l17638"></a><span class="lineno">17638</span>&#160;        pImageCreateInfo-&gt;mipLevels == 0 ||</div>
+<div class="line"><a name="l17639"></a><span class="lineno">17639</span>&#160;        pImageCreateInfo-&gt;arrayLayers == 0)</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;        <span class="keywordflow">return</span> VK_ERROR_VALIDATION_FAILED_EXT;</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;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaCreateImage&quot;</span>);</div>
+<div class="line"><a name="l17645"></a><span class="lineno">17645</span>&#160; </div>
+<div class="line"><a name="l17646"></a><span class="lineno">17646</span>&#160;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l17647"></a><span class="lineno">17647</span>&#160; </div>
+<div class="line"><a name="l17648"></a><span class="lineno">17648</span>&#160;    *pImage = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l17649"></a><span class="lineno">17649</span>&#160;    *pAllocation = VK_NULL_HANDLE;</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="comment">// 1. Create VkImage.</span></div>
+<div class="line"><a name="l17652"></a><span class="lineno">17652</span>&#160;    VkResult res = (*allocator-&gt;GetVulkanFunctions().vkCreateImage)(</div>
+<div class="line"><a name="l17653"></a><span class="lineno">17653</span>&#160;        allocator-&gt;m_hDevice,</div>
+<div class="line"><a name="l17654"></a><span class="lineno">17654</span>&#160;        pImageCreateInfo,</div>
+<div class="line"><a name="l17655"></a><span class="lineno">17655</span>&#160;        allocator-&gt;GetAllocationCallbacks(),</div>
+<div class="line"><a name="l17656"></a><span class="lineno">17656</span>&#160;        pImage);</div>
+<div class="line"><a name="l17657"></a><span class="lineno">17657</span>&#160;    <span class="keywordflow">if</span>(res &gt;= 0)</div>
+<div class="line"><a name="l17658"></a><span class="lineno">17658</span>&#160;    {</div>
+<div class="line"><a name="l17659"></a><span class="lineno">17659</span>&#160;        VmaSuballocationType suballocType = pImageCreateInfo-&gt;tiling == VK_IMAGE_TILING_OPTIMAL ?</div>
+<div class="line"><a name="l17660"></a><span class="lineno">17660</span>&#160;            VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL :</div>
+<div class="line"><a name="l17661"></a><span class="lineno">17661</span>&#160;            VMA_SUBALLOCATION_TYPE_IMAGE_LINEAR;</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="comment">// 2. Allocate memory using allocator.</span></div>
+<div class="line"><a name="l17664"></a><span class="lineno">17664</span>&#160;        VkMemoryRequirements vkMemReq = {};</div>
+<div class="line"><a name="l17665"></a><span class="lineno">17665</span>&#160;        <span class="keywordtype">bool</span> requiresDedicatedAllocation = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l17666"></a><span class="lineno">17666</span>&#160;        <span class="keywordtype">bool</span> prefersDedicatedAllocation  = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l17667"></a><span class="lineno">17667</span>&#160;        allocator-&gt;GetImageMemoryRequirements(*pImage, vkMemReq,</div>
+<div class="line"><a name="l17668"></a><span class="lineno">17668</span>&#160;            requiresDedicatedAllocation, prefersDedicatedAllocation);</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;        res = allocator-&gt;AllocateMemory(</div>
+<div class="line"><a name="l17671"></a><span class="lineno">17671</span>&#160;            vkMemReq,</div>
+<div class="line"><a name="l17672"></a><span class="lineno">17672</span>&#160;            requiresDedicatedAllocation,</div>
+<div class="line"><a name="l17673"></a><span class="lineno">17673</span>&#160;            prefersDedicatedAllocation,</div>
+<div class="line"><a name="l17674"></a><span class="lineno">17674</span>&#160;            VK_NULL_HANDLE, <span class="comment">// dedicatedBuffer</span></div>
+<div class="line"><a name="l17675"></a><span class="lineno">17675</span>&#160;            *pImage, <span class="comment">// dedicatedImage</span></div>
+<div class="line"><a name="l17676"></a><span class="lineno">17676</span>&#160;            *pAllocationCreateInfo,</div>
+<div class="line"><a name="l17677"></a><span class="lineno">17677</span>&#160;            suballocType,</div>
+<div class="line"><a name="l17678"></a><span class="lineno">17678</span>&#160;            1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l17679"></a><span class="lineno">17679</span>&#160;            pAllocation);</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="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17682"></a><span class="lineno">17682</span>&#160;        <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l17683"></a><span class="lineno">17683</span>&#160;        {</div>
+<div class="line"><a name="l17684"></a><span class="lineno">17684</span>&#160;            allocator-&gt;GetRecorder()-&gt;RecordCreateImage(</div>
+<div class="line"><a name="l17685"></a><span class="lineno">17685</span>&#160;                allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17686"></a><span class="lineno">17686</span>&#160;                *pImageCreateInfo,</div>
+<div class="line"><a name="l17687"></a><span class="lineno">17687</span>&#160;                *pAllocationCreateInfo,</div>
+<div class="line"><a name="l17688"></a><span class="lineno">17688</span>&#160;                *pAllocation);</div>
+<div class="line"><a name="l17689"></a><span class="lineno">17689</span>&#160;        }</div>
+<div class="line"><a name="l17690"></a><span class="lineno">17690</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l17691"></a><span class="lineno">17691</span>&#160; </div>
+<div class="line"><a name="l17692"></a><span class="lineno">17692</span>&#160;        <span class="keywordflow">if</span>(res &gt;= 0)</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="comment">// 3. Bind image with memory.</span></div>
+<div class="line"><a name="l17695"></a><span class="lineno">17695</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="l17696"></a><span class="lineno">17696</span>&#160;            {</div>
+<div class="line"><a name="l17697"></a><span class="lineno">17697</span>&#160;                res = allocator-&gt;BindImageMemory(*pAllocation, 0, *pImage, VMA_NULL);</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">if</span>(res &gt;= 0)</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="comment">// All steps succeeded.</span></div>
+<div class="line"><a name="l17702"></a><span class="lineno">17702</span>&#160;<span class="preprocessor">                #if VMA_STATS_STRING_ENABLED</span></div>
+<div class="line"><a name="l17703"></a><span class="lineno">17703</span>&#160;                    (*pAllocation)-&gt;InitBufferImageUsage(pImageCreateInfo-&gt;usage);</div>
+<div class="line"><a name="l17704"></a><span class="lineno">17704</span>&#160;<span class="preprocessor">                #endif</span></div>
+<div class="line"><a name="l17705"></a><span class="lineno">17705</span>&#160;                <span class="keywordflow">if</span>(pAllocationInfo != VMA_NULL)</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;                    allocator-&gt;GetAllocationInfo(*pAllocation, pAllocationInfo);</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; </div>
+<div class="line"><a name="l17710"></a><span class="lineno">17710</span>&#160;                <span class="keywordflow">return</span> VK_SUCCESS;</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;            allocator-&gt;FreeMemory(</div>
+<div class="line"><a name="l17713"></a><span class="lineno">17713</span>&#160;                1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l17714"></a><span class="lineno">17714</span>&#160;                pAllocation);</div>
+<div class="line"><a name="l17715"></a><span class="lineno">17715</span>&#160;            *pAllocation = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l17716"></a><span class="lineno">17716</span>&#160;            (*allocator-&gt;GetVulkanFunctions().vkDestroyImage)(allocator-&gt;m_hDevice, *pImage, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l17717"></a><span class="lineno">17717</span>&#160;            *pImage = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l17718"></a><span class="lineno">17718</span>&#160;            <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l17719"></a><span class="lineno">17719</span>&#160;        }</div>
+<div class="line"><a name="l17720"></a><span class="lineno">17720</span>&#160;        (*allocator-&gt;GetVulkanFunctions().vkDestroyImage)(allocator-&gt;m_hDevice, *pImage, allocator-&gt;GetAllocationCallbacks());</div>
+<div class="line"><a name="l17721"></a><span class="lineno">17721</span>&#160;        *pImage = VK_NULL_HANDLE;</div>
+<div class="line"><a name="l17722"></a><span class="lineno">17722</span>&#160;        <span class="keywordflow">return</span> res;</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; </div>
+<div class="line"><a name="l17727"></a><span class="lineno">17727</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="l17728"></a><span class="lineno">17728</span>&#160;    <a class="code" href="struct_vma_allocator.html">VmaAllocator</a> allocator,</div>
+<div class="line"><a name="l17729"></a><span class="lineno">17729</span>&#160;    VkImage image,</div>
+<div class="line"><a name="l17730"></a><span class="lineno">17730</span>&#160;    <a class="code" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</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;    VMA_ASSERT(allocator);</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="keywordflow">if</span>(image == VK_NULL_HANDLE &amp;&amp; allocation == VK_NULL_HANDLE)</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">return</span>;</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; </div>
+<div class="line"><a name="l17739"></a><span class="lineno">17739</span>&#160;    VMA_DEBUG_LOG(<span class="stringliteral">&quot;vmaDestroyImage&quot;</span>);</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;    VMA_DEBUG_GLOBAL_MUTEX_LOCK</div>
+<div class="line"><a name="l17742"></a><span class="lineno">17742</span>&#160; </div>
+<div class="line"><a name="l17743"></a><span class="lineno">17743</span>&#160;<span class="preprocessor">#if VMA_RECORDING_ENABLED</span></div>
+<div class="line"><a name="l17744"></a><span class="lineno">17744</span>&#160;    <span class="keywordflow">if</span>(allocator-&gt;GetRecorder() != VMA_NULL)</div>
+<div class="line"><a name="l17745"></a><span class="lineno">17745</span>&#160;    {</div>
+<div class="line"><a name="l17746"></a><span class="lineno">17746</span>&#160;        allocator-&gt;GetRecorder()-&gt;RecordDestroyImage(</div>
+<div class="line"><a name="l17747"></a><span class="lineno">17747</span>&#160;            allocator-&gt;GetCurrentFrameIndex(),</div>
+<div class="line"><a name="l17748"></a><span class="lineno">17748</span>&#160;            allocation);</div>
 <div class="line"><a name="l17749"></a><span class="lineno">17749</span>&#160;    }</div>
-<div class="line"><a name="l17750"></a><span class="lineno">17750</span>&#160;    <span class="keywordflow">if</span>(allocation != VK_NULL_HANDLE)</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;        allocator-&gt;FreeMemory(</div>
-<div class="line"><a name="l17753"></a><span class="lineno">17753</span>&#160;            1, <span class="comment">// allocationCount</span></div>
-<div class="line"><a name="l17754"></a><span class="lineno">17754</span>&#160;            &amp;allocation);</div>
+<div class="line"><a name="l17750"></a><span class="lineno">17750</span>&#160;<span class="preprocessor">#endif</span></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;    <span class="keywordflow">if</span>(image != VK_NULL_HANDLE)</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;        (*allocator-&gt;GetVulkanFunctions().vkDestroyImage)(allocator-&gt;m_hDevice, image, allocator-&gt;GetAllocationCallbacks());</div>
 <div class="line"><a name="l17755"></a><span class="lineno">17755</span>&#160;    }</div>
-<div class="line"><a name="l17756"></a><span class="lineno">17756</span>&#160;}</div>
-<div class="line"><a name="l17757"></a><span class="lineno">17757</span>&#160; </div>
-<div class="line"><a name="l17758"></a><span class="lineno">17758</span>&#160;<span class="preprocessor">#endif // #ifdef VMA_IMPLEMENTATION</span></div>
+<div class="line"><a name="l17756"></a><span class="lineno">17756</span>&#160;    <span class="keywordflow">if</span>(allocation != VK_NULL_HANDLE)</div>
+<div class="line"><a name="l17757"></a><span class="lineno">17757</span>&#160;    {</div>
+<div class="line"><a name="l17758"></a><span class="lineno">17758</span>&#160;        allocator-&gt;FreeMemory(</div>
+<div class="line"><a name="l17759"></a><span class="lineno">17759</span>&#160;            1, <span class="comment">// allocationCount</span></div>
+<div class="line"><a name="l17760"></a><span class="lineno">17760</span>&#160;            &amp;allocation);</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;}</div>
+<div class="line"><a name="l17763"></a><span class="lineno">17763</span>&#160; </div>
+<div class="line"><a name="l17764"></a><span class="lineno">17764</span>&#160;<span class="preprocessor">#endif // #ifdef VMA_IMPLEMENTATION</span></div>
 </div><!-- fragment --></div><!-- contents -->
 <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:1979</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:1937</div></div>
diff --git a/src/VulkanSample.cpp b/src/VulkanSample.cpp
index ee3f8c8..e9872d5 100644
--- a/src/VulkanSample.cpp
+++ b/src/VulkanSample.cpp
@@ -32,8 +32,8 @@
 static const char* const SHADER_PATH2 = "../bin/";

 static const wchar_t* const WINDOW_CLASS_NAME = L"VULKAN_MEMORY_ALLOCATOR_SAMPLE";

 static const char* const VALIDATION_LAYER_NAME = "VK_LAYER_LUNARG_standard_validation";

-static const char* const APP_TITLE_A =     "Vulkan Memory Allocator Sample 2.3.0-alpha.1";

-static const wchar_t* const APP_TITLE_W = L"Vulkan Memory Allocator Sample 2.3.0-alpha.1";

+static const char* const APP_TITLE_A =     "Vulkan Memory Allocator Sample 2.3.0";

+static const wchar_t* const APP_TITLE_W = L"Vulkan Memory Allocator Sample 2.3.0";

 

 static const bool VSYNC = true;

 static const uint32_t COMMAND_BUFFER_COUNT = 2;

diff --git a/src/vk_mem_alloc.h b/src/vk_mem_alloc.h
index 0a1bd23..32258b4 100644
--- a/src/vk_mem_alloc.h
+++ b/src/vk_mem_alloc.h
@@ -29,7 +29,7 @@
 

 /** \mainpage Vulkan Memory Allocator

 

-<b>Version 2.3.0-alpha.1</b> (2019-11-25)

+<b>Version 2.3.0</b> (2019-12-04)

 

 Copyright (c) 2017-2019 Advanced Micro Devices, Inc. All rights reserved. \n

 License: MIT